Dalvik est un petit village au nord de l’Islande, plus connu pour son port de pêche, mais depuis 2008 ce nom a pris une autre tournure. Dan Bornstein et son équipe chez Google l’ont choisi pour désigner la machine virtuelle utilisée sur tous les devices Android pour exécuter les applications. Dalvik n’est pas une version de JVM mais plutôt une alternative.
Version optimisée de la VM
Dalvik est une machine virtuelle pouvant être exécutée sur un device ayant peu de CPU et de RAM. L’empreinte sur le système de cette VM est faible pour préserver au maximum la batterie.
Chaque application s’exécute dans son propre processus avec sa propre instance de Dalvik. Cette VM a donc été écrite pour pouvoir gérer ceci de la meilleure manière possible. Dalvik n’exécute pas de fichiers .class mais des fichiers .dex (Dalvik Executables) qui sont moins lourds en mémoire. Par exemple les chaines de caractères ou les constantes qui sont dupliquées dans les différents fichiers .class, ne sont définies qu’une seule fois dans les fichiers .dex. Un outil appelé dx est utilisé pour convertir les .class Java en .dex
Les fichiers .dex peuvent être modifiés lors de l’installation de l’application afin d’optimiser son comportement sur le device.
La machine virtuelle Dalvik repose sur le noyau Linux pour les fonctionnalités de base comme la gestion des threads ou la gestion de la mémoire.
A l'inverse des machines virtuelles Java (JVM) qui sont des machines basées sur la pile, la VM Dalvik est basée sur les registres. Je ne vais pas faire un cours sur la compilation (voir ici pour en avoir un) mais je vais prendre tout de même un exemple simple pour montrer la différence.
A l'inverse des machines virtuelles Java (JVM) qui sont des machines basées sur la pile, la VM Dalvik est basée sur les registres. Je ne vais pas faire un cours sur la compilation (voir ici pour en avoir un) mais je vais prendre tout de même un exemple simple pour montrer la différence.
Prenons l’expression A = B + C. Cette expression est trop compliquée pour être exécutée tel quel par le processeur et elle doit être décomposée en expression plus simple.
Une machine à pile dispose comme son nom l'indique d’une pile dans laquelle nous allons placer nos valeurs. Les opérations binaires opèrent sur les deux valeurs au sommet de la pile et les opérations unaires sur la valeur au sommet de la pile
Notre expression sera interprétée de cette manière
Version allégée
Dalvik ne propose qu’un sous ensemble des packages Java. Swing et AWT, les librairies graphiques du JDK par exemple, n’ont pas été reprises. Seules les plus usitées sont utilisées. D’autres ont été incluses
Tout comme pour un développement Java classique il bien évidemment possible d’ajouter des librairies externes à vos projets.
Un problème de licence
Le sujet des licences est un sujet épineux en ce moment dans le secteur de la mobilité. Il existe une multitude d’articles sur le net qui parfois divergent sur le sujet. Oracle est une entreprise commerciale absente aujourd'hui de l’industrie mobile. Souhaitant bénéficier de la manne financière liée à Android, ils ont intenté un procès à Google concernant Dalvik et la violation de plusieurs brevets.
Pour parler de ce problème de licence, je me suis donc réorienté vers le blog de James Gosling (le créateur de Java pour ceux qui ne le connaîtraient pas) http://nighthacks.com/roller/jag/, où j’ai pu trouver plusieurs articles intéressants.
Par exemple il rappelle le concept de la liberté « freedom for one could restrict the freedom of another ». La préoccupation des développeurs Sun à l’époque était d’offrir la liberté à tous les développeurs de logiciel de n’écrire leur application qu’une fois pour qu’elle puisse fonctionner sur n’importe quel système d’exploitation et n’importe quelle machine.
Sun a essayé de mettre en place des brevets pour faire respecter l’interopérabilité entre les applications et le système. Tout le monde a la possibilité d’utiliser librement Java à condition de respecter les spécifications. C’est un des points de blocage qu’il y a eu à l’époque avec Google quand ces derniers sont venus présentés à Sun leurs projets sur la mobilité. En effet Google voulait construire une plateforme libre de droits pour les constructeurs de mobile. Comme je l’ai dit un peu plus haut dans cet article, le code compilé pour Dalvik peut être modifié à l’installation si le fabricant du téléphone le souhaite.
La fragmentation est importante entre les mobiles Android (différence de puissance, de taille d’écran, de résolutions…) pour qu'il y ait lieu de restreindre encore la liberté des développeurs. Ecrire une application sous Android sur un grand nombre de devices nécessite beaucoup de travail de développement et de tests par rapport par exemple à un développement sous Ios.
Pour le moment les fabricants n’usent pas trop de cette possibilité ce qui ne gène pas trop le développement, mais ceci est une faille dans le système.
Avec du recul on peut dire que Sun a peut être fait une erreur stratégique à l’époque en ne pliant pas aux exigences de Google mais ils ont le mérite de ne pas avoir trahis leurs convictions. Pour Google, la mise en place de Dalvik leur a permis de construire une plateforme de développement sans les contraintes juridiques et financières liées à Java ME.
Merci à Anne Laure Rigaudon pour sa relecture
Une machine à pile dispose comme son nom l'indique d’une pile dans laquelle nous allons placer nos valeurs. Les opérations binaires opèrent sur les deux valeurs au sommet de la pile et les opérations unaires sur la valeur au sommet de la pile
Notre expression sera interprétée de cette manière
- PUSH B place la valeur B au sommet de la pile
- PUSH A place la valeur A au sommet de la pile
- ADD remplace la valeur au sommet par leur somme
- POP C enlève la valeur au sommet de la pile et la met dans C
- MOVE B,R1 place la valeur B dans R1
- MOVE A,R2 place la valeur A dans R2
- ADD R1,R2 ajoute R1 et R2 dans R2
- MOVE R2,X déplace le résultat dans X
Version allégée
Dalvik ne propose qu’un sous ensemble des packages Java. Swing et AWT, les librairies graphiques du JDK par exemple, n’ont pas été reprises. Seules les plus usitées sont utilisées. D’autres ont été incluses
- Junit pour les tests
- Commons Httpclient pour appeler des url distantes
- Json
- Des classes android pour accéder à la base de données SQLite, pour utiliser les fonctionnalités du device (GPS, appel telephonique, SMS, photo….), pour afficher des écrans….
- …
Tout comme pour un développement Java classique il bien évidemment possible d’ajouter des librairies externes à vos projets.
Un problème de licence
Le sujet des licences est un sujet épineux en ce moment dans le secteur de la mobilité. Il existe une multitude d’articles sur le net qui parfois divergent sur le sujet. Oracle est une entreprise commerciale absente aujourd'hui de l’industrie mobile. Souhaitant bénéficier de la manne financière liée à Android, ils ont intenté un procès à Google concernant Dalvik et la violation de plusieurs brevets.
Pour parler de ce problème de licence, je me suis donc réorienté vers le blog de James Gosling (le créateur de Java pour ceux qui ne le connaîtraient pas) http://nighthacks.com/roller/jag/, où j’ai pu trouver plusieurs articles intéressants.
Par exemple il rappelle le concept de la liberté « freedom for one could restrict the freedom of another ». La préoccupation des développeurs Sun à l’époque était d’offrir la liberté à tous les développeurs de logiciel de n’écrire leur application qu’une fois pour qu’elle puisse fonctionner sur n’importe quel système d’exploitation et n’importe quelle machine.
Sun a essayé de mettre en place des brevets pour faire respecter l’interopérabilité entre les applications et le système. Tout le monde a la possibilité d’utiliser librement Java à condition de respecter les spécifications. C’est un des points de blocage qu’il y a eu à l’époque avec Google quand ces derniers sont venus présentés à Sun leurs projets sur la mobilité. En effet Google voulait construire une plateforme libre de droits pour les constructeurs de mobile. Comme je l’ai dit un peu plus haut dans cet article, le code compilé pour Dalvik peut être modifié à l’installation si le fabricant du téléphone le souhaite.
La fragmentation est importante entre les mobiles Android (différence de puissance, de taille d’écran, de résolutions…) pour qu'il y ait lieu de restreindre encore la liberté des développeurs. Ecrire une application sous Android sur un grand nombre de devices nécessite beaucoup de travail de développement et de tests par rapport par exemple à un développement sous Ios.
Pour le moment les fabricants n’usent pas trop de cette possibilité ce qui ne gène pas trop le développement, mais ceci est une faille dans le système.
Avec du recul on peut dire que Sun a peut être fait une erreur stratégique à l’époque en ne pliant pas aux exigences de Google mais ils ont le mérite de ne pas avoir trahis leurs convictions. Pour Google, la mise en place de Dalvik leur a permis de construire une plateforme de développement sans les contraintes juridiques et financières liées à Java ME.
Merci à Anne Laure Rigaudon pour sa relecture

Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.