che sto cercando di fare qualcosa di simile a questo stackoverflow posting. Quello che voglio fare è leggere la definizione di un'attività o servizio dalla scheda SD. Per evitare problemi di autorizzazione manifest, creo una versione di shell di questa attività in .apk, ma provo a sostituirla con un'attività con lo stesso nome che si trova sulla scheda SD in fase di esecuzione. Sfortunatamente, sono in grado di caricare la definizione della classe di attività dalla scheda SD utilizzando DexClassLoader, ma la definizione della classe originale è quella che viene eseguita. Esiste un modo per specificare che la nuova definizione di classe sostituisce quella precedente o qualsiasi suggerimento su come evitare i problemi di autorizzazione manifest senza effettivamente fornire l'attività necessaria nel pacchetto? L'esempio di codice:Android, come utilizzare DexClassLoader per sostituire in modo dinamico un'attività o servizio
ClassLoader cl = new DexClassLoader("/sdcard/mypath/My.apk",
getFilesDir().getAbsolutePath(),
null,
MainActivity.class.getClassLoader());
try {
Class<?> c = cl.loadClass("com.android.my.path.to.a.loaded.activity");
Intent i = new Intent(getBaseContext(), c);
startActivity(i);
}
catch (Exception e) {
intead del lancio del com.android.my.path.to.a.loaded.activity
specificato nel /sdcard/mypath/My.apk
, si lancia l'attività caricata staticamente nel progetto.
Ho la sensazione che questo non può essere fatto semplicemente a causa di come Android gestisce asset. Se hai chiamato startActivity su una classe in un'altra applicazione, dovrebbe caricare nel thread di quella applicazione non la tua, e quindi essere semplicemente un'alternativa pericolosa agli Intenti di Android. – Tom