2011-11-09 4 views
1

cette question a en fait deux parties:Comment charger dynamiquement une activité ou une classe Android à partir d'un fichier jar externe?

  1. comment créer un fichier jar externe qui peut être chargé dynamiquement? Pouvez-vous simplement charger un fichier .apk en tant que fichier .jar? pouvez-vous charger classes.dex à la place? avez-vous besoin d'utiliser l'outil dx pour convertir un fichier jar pour le faire?

  2. Je vois ce morceau de code pour charger dynamiquement une classe:

    String jarfile = "test2.jar"; 
        DexClassLoader classloader = new DexClassLoader(
         jarfile, "/tmp", null, getClass().getClassLoader()); 
        Class<?> myclass = classloader.loadClass("Test2Activity"); 
    

Dans ce cas, où serait situé le fichier jar? En d'autres termes, lorsque j'installer mon application Android principale, j'aurais besoin du chemin d'accès au fichier test2.jar.

merci pour toute aide.

Répondre

0

Je ne pense pas que ce soit possible, à tout le moins une référence pour chaque activité que vous pouvez initier doit exister dans votre manifeste de projet. Donc, même si cela était possible, je pense que cela échouerait encore. Avez-vous essayé de regarder Setting up a Library Project comme alternative?

0

Je suis en fait à la recherche d'une réponse similaire - J'ai réussi à trouver un moyen de charger dynamiquement les fichiers jar à une application Android - ici sur un débordement de pile via ce lien: vous -Tout besoin est ici - Sauf que j'ai ajouté quelques choses que je passais du temps à essayer de comprendre en dessous du lien- qui peut être utile pour vous

http://stackoverflow.com/questions/11453614/how-can-i-load -a-jar-fichier-dynamiquement-dans-une-android-application-4-0-3

Voici quelques choses à garder à l'esprit:

  1. Lors de la création du .jar: Vous avez seulement besoin du fichier .class qui doit être chargée dynamiquement - vous n'avez pas besoin d'inclure dans l'interface IPeripheral le fichier .jar. Créer le fichier .jar à l'aide d'un IDE - Je n'utiliserais pas la commande suivante pour éditer le fichier manifeste par défaut en appelant l'option jar en ligne de commande - Comme ceci: "jar cmf manifeste-addition jar-file fichier (s) d'entrée ". Au lieu de cela ouvrir Eclipse, Goto Fichier> Exporter> Java> Fichier Jar et suivez cela. Quand il s'agit de sélectionner le fichier manifeste - Sélectionnez personnalisé, et créez simplement le fichier manifest dans le projet comme un fichier texte sans titre et enregistrez-le comme Whatever.manifestAssurez-vous que ce fichier texte a une ligne vide à la fin de le fichier!

  2. Dans l'exemple de code à partir du lien ci-dessus: Assurez-vous de vérifier ce que cette ligne fait vraiment:

    dalvik.system.PathClassLoader myClassLoader = new dalvik.system.PathClassLoader(urls.get(index).toString(), ModuleLoader.class.getClassLoader()); 
    

La raison pour laquelle je dis cela parce urls.get (index). toString() retournera le fichier:/pathname, et ce que vous voulez est simplement le nom du chemin. J'ai simplement analysé cela pour le faire fonctionner.

  1. Pour créer la SDCard - faire simplement à partir du gestionnaire de périphériques Android - Il y a une option pour définir le stockage externe - choisir une taille. Dans DDMS, vous serez en mesure d'ouvrir "File Explorer", vous trouverez sdcard dans le dossier mnt et être en mesure de pousser votre fichier jar dans le dossier de la carte SD.

  2. Voici à quoi ressemble ma classe Main_activity, qui appelle le chargeur de module.

    public class MainActivity extends Activity 
    { 
        private static Context context; 
        @Override 
        public void onCreate(Bundle savedInstanceState) 
        { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
    
         //Get this classes context 
         MainActivity.context = getApplicationContext(); 
    
         // method to return a list of modules that all implement the interface IPeripheral 
         List<IPeripheral> modules = ModuleLoader.loadModules("/mnt/sdcard", getApplicationContext()); 
    
         //Accessing a method - and display is just a method that toasts. 
         display(modules.get(0).getName()); 
        } 
    } 
    

    Hope this helps - Je ne pense pas que son possible pour vous d'ajouter dynamiquement des fichiers jar qui sont des fichiers Java qui sont en fait des « écrans » ou activités android, car cela vous obligera à modifier pro-grammaticalement la Projette le fichier manifeste Android que vous tentez de charger dynamiquement dans le fichier jar. Je ne pense pas que ce soit possible car cela pose un risque de sécurité.

Questions connexes