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

1 commentaire:

  1. Matsuura is winning the profit game, gaining competitive advantage through the use of generative design to mechanically create customized workpiece-holding fixtures, and printing them in high-strength polymer overnight. MJK Performance designs and manufactures top quality, precision CNC machined bike elements. Get from idea to design, and from design to CNC machined part quicker. Designed to regulate high manufacturing turning facilities, vertical lathes with inclined mattress, parallel, double turret , and so on. Designed to suit with|swimsuit} the needs of slant mattress lathes and enormous manufacturing Toilet Brushes lathes, offering the most recent technology.

    RépondreSupprimer