lundi 7 décembre 2009

L'utilisation de librairies java sur Android - Partie 2 (Classloader)

Certaines librairies utilisent des techniques avancées de chargement dynamique.
Il faut savoir que la compilation de programme android s'effectue en plusieurs étapes :
* .java => .class (classique)
* .class + .jar éventuels => .dex (1 seul et unique .dex pour tous les jars)
* .dex => .apk
Les raisons invoquées par google sont multiples : optimisation pour l'exécution sur des téléphones, gain de place, etc.
Si vous avez besoin du chargement dynamique, tout n'est pas perdu ! C'est possible sur android, sous quelques conditions.
Tout d'abord, vous ne pouvez pas charger un jar "classique". Vous devez le transformer en DEX avec les commandes "dx --dex" puis "aapt add".
Ensuite, vous devez utiliser une api spécifique :
android.dalvik.DexFile df = new android.dalvik.DexFile(new File("test.jar"));
String myClasseString = "com/test/MyClass";
Classloader cl = getClassloader();
Class myClasse = df.loadClass(myClasseString,cl);

Si vous avez des erreurs à la compilation, vous pouvez passer par les apis de réflexion.
C'est cette technique qui a été utilisée pour le portage d'Apache Felix (osgi).
Pour plus d'info cliquez ici

Aucun commentaire:

Enregistrer un commentaire