2010-04-27 11 views
15

In Android documentation relativo alla firma del codice, è possibile leggere: "Firmando più applicazioni con lo stesso certificato e utilizzando i controlli delle autorizzazioni basati sulle firme, le tue applicazioni possono utilizzare il codice di condivisione e dati in modo sicuro "Android: come condividere il codice tra i progetti firmati con lo stesso certificato

Come esattamente tale condivisione del codice può essere fatto? È possibile rilasciare l'applicazione principale e più plugin intercambiabili e poi scoprirli in fase di runtime? Che aspetto ha il codice sorgente e quali sono i vantaggi rispetto alle chiamate di intenti "standard" da/a diversi pacchetti APK?

risposta

9

Utilizzare Context.createPackageContext() per istanziare un pacchetto per un altro .apk a cui sei interessato. Se è firmato con lo stesso certificato come tuo, E entrambi utilizzi lo stesso ID utente condiviso, puoi utilizzare il flag per caricare il suo codice nel processo, consentendo di ottenere ClassLoader dal contesto e creare un'istanza di qualsiasi classe desiderata.

In caso contrario, se non sono firmati lo stesso e in modo esplicito utilizzando lo stesso ID utilizzato condiviso, è possibile caricare solo le sue risorse.

Si prega di notare che non è possibile modificare l'ID utente condiviso per un'applicazione (per qualcos'altro o spostarsi tra l'avere e non avere un ID utente condiviso) una volta che l'applicazione è in commercio.

+0

Maggiori informazioni: http://developer.android.com/intl/de/guide/topics/security/security.html#userid e http://developer.android.com /intl/de/guide/topics/manifest/manifest-element.html – tomash

2

Dire di voler chiamare una funzione pubblica della classe caricata dinamicamente. Utilizzare il seguente frammento di codice:

Context friendContext = this.createPackageContext("packageName", Context.CONTEXT_INCLUDE_CODE); 
Class friendClass = friendContext.getClassLoader().loadClass("packageName.className"); 
Class noparams[] = {}; //say the function (functionName) required no inputs 
friendClass.getMethod("functionName", noparams).invoke(friendClass.newInstance(), null);