lundi 28 septembre 2009

L'utilisation de librairies java sur Android - Partie 1 (awt)

Comme vous le savez certainement, l'environnement Android est assez différent de celui qu'on a l'habitude de voir avec J2SE :
- Il ne supporte qu'une partie des API disponibles dans J2SE
- La machine virtuelle est Dalvik.
Je vais tenter de référencer les problèmes auquels on peut s'attendre lorsqu'on tente d'utiliser une librairie java sur android dans une série d'articles. J'ouvre le bal avec AWT :
  • Références à AWT et Swing interdites
Android dispose de sa propre API d'interface graphique. Google a décidé d'interdire les références au packages awt et swing. Le plus souvent, les librairies ne disposent pas d'interface graphique, alors pourquoi cela peut poser problème ?
Eh bien c'est un peu un problème de conception du J2SE : Lorsqu'on souhaite par exemple faire du traitement sur des fichiers d'images (lecture, écriture, redimensionnement, ...), la plupart du temps on utilise ce que nous propose J2SE c'est à dire java.awt.Image...
Si vous tentez de référencer awt dans votre propre code on vous averti gentillement à la compilation.
Si vous avez récupéré directement le .jar de votre librairie, vous pouvez facilement savoir quelles parties de J2SE sont utilisées avec le fabuleux utilitaire jarjar disponible ici
java -jar jarjar-1.0.jar find class javamail-1.4.2\mail.jar "%JAVA_HOME%\lib\rt.jar"
Avec un pipe et un grep vous trouverez facilement ce qui vous intéresse...

Que faire si des références sont trouvées ?
Certaines classes appellent des fonctions natives de l'interface, dans ce cas, vous êtes fichus. Pour beaucoup d'autres, il n'y a pas d'objection technique à les utiliser, je vous suggère d'extraire ce qui vous intéresse des implémentations opensource OpenJDK ou d'Apache Harmony. Une fois ceci fait, toujours en utilisant jarjar, renommez les références des packages java.awt et java.swing de votre "sous ensemble de jre maison" et dans la librairie.

Etant donné le travail important que cela nécessite, n'hésitez pas partager dans vos commentaires, vos efforts d'adaptations de librairies !

A suivre : Le Classloader et le chargement dynamique...