Android à l'Aide de DexClassLoader de chargement de fichier apk
J'ai touché un peu à un mur. Toute aide serait appréciée. J'ai une application que je veux utiliser DexClassLoader pour charger un autre fichier apk.
Voici mon code:
DexClassLoader dLoader = new DexClassLoader("/sdcard/download/test.apk","/sdcard/download",null,ClassLoader.getSystemClassLoader().getParent());
Class calledClass = dLoader.loadClass("com.test.classname");
Intent it=new Intent(this, calledClass);
it.setClassName("com.test", "com.test.classname");
startActivity(it);
Maintenant, je l'avais déjà installé test.apk, donc quand j'ai couru le code ci-dessus, il
a bien fonctionné et a lancé l'application. Cependant, je veux être en mesure de
exécuter ce sans test.apk étant déjà installé (comme cela serait le
la défaite du tout le point de l'application) . J'ai donc désinstallé et
quand j'ai couru mon application, j'obtiens cette erreur:
android.content.ActivityNotFoundException: Unable to find explicit
activity class {com.test/com.test.classname}; have you declared this
activity in your AndroidManifest.xml.
Donc je suis un peu perplexe ici. Cette activité est déclarée dans le Manifeste
de l'apk, je suis en train de lancer. Je ne peux pas déclarer dans mes applications
Le manifeste. Des idées?
Grâce,
Craig
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser Android PathClassLoader:
Bien que la question est vieille, je vais répondre parce que j'ai un peu de mal à trouver une réponse claire de votre même question pour moi-même. Tout d'abord, je tiens à souligner qu'une exigence claire à votre question est à la charge d'une classe à partir d'une .apk qui n'est pas déjà installé sur l'appareil. Par conséquent, l'appel du gestionnaire de package à l'aide de getPackageManager() et en lui donnant le chemin d'accès au package sera conduisent clairement à NameNotFoundException parce que le .apk qui a le paquet n'est pas installé sur l'appareil.
Donc, la façon d'aller sur le chargement de classes à partir d'une .apk fichier n'est pas installé sur l'appareil (c'est à dire que vous n'avez le .apk stockés dans un répertoire sur votre SDCARD) est par l'utilisation de DexClassLoader comme suit:
1 - assurez-vous que vous avez la .apk fichier dans un répertoire sur votre carte sd. J'ai la mienne Offloadme.apk dans le dossier de Téléchargement sur ma SDCARD.
2 - Ajouter la permission de lecture dans votre AndroidManifest.xml pour permettre à votre application de lecture du manifeste.
3 - Utiliser les définitions suivantes pour définir le chemin d'accès de l' .apk, le nom de la classe à l'intérieur de l'apk, et le nom de la méthode dans la classe que vous souhaitez appeler:
4 - Utiliser le DexClassLoader à la charge de l' .apk et d'appeler la ajouter méthode dans le SimpleCalculator classe à l'aide de la réflexion comme suit:
Remarque que dans mon exemple simple, j'ai ajouté deux nombres à l'aide de la ajouter méthode disponible dans la SimpleCalculator classe chargé de la Offloadme.apk fichier stocké sur ma carte sd et j'ai pu imprimer la réponse correcte qui est de 11.
Vous ne pouvez pas le faire. Même si vous êtes en mesure d'accéder à des classes à partir d'un fichier externe, Android ne fonctionne toujours pas. Et vous n'avez pas l'exécution des activités directement, mais en demandant Android de les exécuter, de sorte qu'ils doivent être enregistrés/installé dans le système.