Android, comment utiliser DexClassLoader pour remplacer dynamiquement une Activité ou un Service
Je suis en train de faire quelque chose de semblable à ce stackoverflow affichage. Ce que je veux faire est de lire la définition d'une activité ou d'un service à partir de la carte SD. Pour éviter de manifester des problèmes d'autorisation, j'ai créer un shell version de cette activité dans le .apk, mais essayez de le remplacer par une activité du même nom qui résident sur la carte SD au moment de l'exécution. Malheureusement, je suis en mesure de charger l'activité de la définition de la classe à partir de la carte SD en utilisant DexClassLoader, mais l'origine de la définition de classe est celle qui est exécutée. Est-il un moyen de spécifier que la nouvelle définition de la classe remplace l'ancienne, ou des suggestions sur la façon d'éviter le manifeste des problèmes d'autorisation sans réellement fournir le nécessaire de l'activité dans le paquet? L'exemple de code:
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 de lancement de la com.android.my.path.to.a.loaded.activity
spécifié dans /sdcard/mypath/My.apk
, il lance l'activité de manière statique chargé dans le projet.
OriginalL'auteur RickNotFred | 2010-03-25
Vous devez vous connecter pour publier un commentaire.
Démarrage d'une Activité par le biais de DexClassLoader sera très difficile, parce que vous n'avez pas à installer l'APK, et donc il n'y a rien à gérer votre Intention.
Vous devriez avoir la même classe d'activité dans votre plate-forme de l'APK et de le déclarer dans AndroidManifest.xml. Ensuite, vous devez changer le chargeur de classe de votre choix DexClassLoader. Comme un résultat, il va commencer votre plugin APK. (Note: "la plate-forme APK" se réfère à l'application qui est déjà installé dans le téléphone, alors que le "plugin APK" désigne le fichier apk enregistrés dans votre carte SD.)
La plate-forme devrait ressembler à quelque chose comme ceci:
Pour plus de code, vous pouvez visiter https://github.com/Rookery/AndroidDynamicLoader
Je suis en train de lire le code source Android afin de trouver un moyen plus élégant de la méthode à mettre en œuvre cette fonctionnalité. Si vous avez une idée, n'hésitez pas à me contacter.
super réponse !! le lien m'a beaucoup aidé.
C'est mieux si vous expliquez à la classe de Smith ici.
Smith est une classe d'assistance pour la réflexion.
N'trouver une meilleure solution et la solution qui vous ont donné.Je suis allé à travers le projet github et essayé moi-même mais il montre l'emballage de l'activité plutôt que l'activité dans l'apk
OriginalL'auteur Sim Sun