J’ai reçu il y a quelques semaines le livre « Android » de Florent Garin, paru aux éditions Dunod. Je dépile tout doucement la tonne de livre que je dois lire, et j’aime aussi prendre mon temps. D’où un retour un peu tardif par rapport au livre qui est sorti fin octobre.
Avec 217 pages, le livre s’adresse aux développeurs qui souhaitent découvrir et commencer à programmer sur la plateforme Android. Le livre est très concret, et couvre les points les plus importants, tout en évitant de noyer le lecteur avec trop de détail. J’aime bien le style, à la fois simple mais didactique. Certaines parties sont un peu longue, mais elles serviront le lecteur à la recherche d’un guide de démarrage complet.
Pour moi qui ne connaît rien à Android, j’ai refermé le livre après sa lecture, avec le sentiment d’avoir compris la spécificité du développement dans cet environnement. Les 4 composants clés sont bien expliqués : Activity, Service, BroadcastReceiver et ContentProvider. J’ai été un peu étonné en fait de l’API de Google. Il y a là aussi quelques restrictions, dues au moteur d’Android.
Ce que j’ai retenu
Florent Garin débute le livre après avoir expliqué l’alliance Open Handset par une présentation du coeur d’Android : basé sur un noyau Linux 2.6, nous apprenons que le coeur d’Android est constitué entre autre d’une implémentation d’OpenGL, d’un moteur de rendu web WebKit, ainsi que d’une base légère SQLite.
Android tourne avec une machine virtuelle appelée Dalvik. Ce n’est pas une machine virtuelle Java complète. Elle ne respecte pas les spécifications de SUN. Dalvik est une VM dite « register-based » là où une JVM classique est dîtes « stacke-based« . L’utilitaire dx est utilisé pour convertir les .class d’une application Java en .dex, le format Dalvik.
Chaque application Android tourne avec sa propre VM, ce qui permet aussi le multi-tâche dans un téléphone Android. Dalvik n’a pas de JIT, mais des optimisations permettent d’améliorer énormément les performances et surtout, de réduire la consommation énergétique des applications. Cela semble bête, mais la gestion de l’énergie est un gros challenge sur un téléphone embarqué. Romain Guy vous en parlerait mieux que moi.
Le modèle de programmation est détaillé à partir du chapitre 3. Assez proche de nos habitudes, on se rend compte cependant rapidement que le développement est plutôt typé « C » en regardant les différents exemples que l’auteur propose. Il vous amène sans soucis devant Eclipse et vous aide à configurer votre environnement avec l’émulateur, c’est très pédagogique.
Page 39 vous ferez la connaissance de la classe « R » comme Resources. Assez impressionnante, elle est générée par le plugin Eclipse et permet de regrouper sous la forme de constantes, toutes les ressources de votre application : boutons, message, nom de l’application, cases à cocher, etc. L’interface graphique ensuite est détaillée, avec une présentation de chacun des Widgets. Il est possible de construire son interface soit en la programmant à la Swing, soit en la déclarant en XML, un peu comme du MXML pour ceux qui connaissent Flex. Ce chapitre est intéressant mais si je devais faire une critique, je regrette qu’il n’y ait pas une présentation d’une petite application, afin de nous montrer un cas plus concret. C’est plus une énumération, plutôt bien faite car le code est détaillé.
Le chapitre 5 est l’un des plus importants car il explique le modèle de composants d’Android. Les 4 composants sont : Activity, Service, BroadcastReceiver et ContentProvider. C’est la partie la plus intéressante et la plus compliquée du livre. Elle détaille avec un exemple les principes d’échanges de messages entre les applications. Comment une application peut-elle se réveiller lorsqu’un SMS arrive sur le téléphone ? La notion d’Intent, sorte de messages qui traversent le système est intéressante. En bref, une notion intéressante apparaît dans le chapitre : comme toutes les applications de votre téléphone peuvent traiter un type d’événement, celles-ci échangent en fait et collaborent pour faire des activités sur le téléphone, ce qui casse la notion d’application isolée. Cela évite aussi de devoir tout implémenter tout le temps.
La suite du livre explique la persistance des données, comment sauver soit via le système de fichier, soit via SQLite. Ensuite une partie assez importante est consacrée à l’interface utilisateur. A la fin du chapitre vous serez en mesure d’utiliser des composants comme la barre de status, de jouer une animation en 2D et vous aurez survolé la partie 3D. Je pense aux créateurs de jeux et je pense que cette partie les laissera sur leur faim par contre.
Le chapitre 8 est consacré au matériel. Comment envoyer et recevoir des SMS ? passer des appels vocaux ? Comment utiliser Google Maps et la géolocalisation ? Comment aussi utiliser l’appareil photo, le vibreur, l’accéléromètre et aussi l’écran tactile. A la page 154 un exemple simple vous montre comment afficher votre latitude et votre longitude, en quelques 40 lignes. L’API n’est pas forcément simple à programmer, mais l’auteur restitue cela plutôt bien, les exemples sont clairs.
Le dernier chapitre est par contre le moins intéressant. Il est consacré aux échanges entre Android et le monde extérieur via le réseau. La partie sur XMPP est sympa, mais il y a quelques pages que j’ai laissé tomber comme la page 187 et sa tartine de code. En même temps ce sujet pourrait demander à lui tout seul une bonne cinquantaine de pages supplémentaires.
Conclusion
Le livre « Android » est sympa à lire et il remplit bien son rôle : vous faire découvrir la programmation sur le moteur de Google. La maquette du livre est plutôt bien faite. A titre personnel j’aime moyennement le format. Par contre on apprécie l’entête et le résumé de chaque chapitre, ce qui permet de retrouver rapidement un passage. Si je devais laisser une critique par rapport au contenu, c’est qu’il manque une petite application complète par exemple, qui aurait été écrite au fil du livre. Cela laisse le champ libre pour quelqu’un qui souhaiterait écrire « Android par la pratique ».
A acheter si vous voulez programmer sur Android et si vous voulez comprendre simplement les possibilités de cette nouvelle plateforme. A 29 EUR en plus, le rapport qualité/prix est intéressant.
Références:
« Android, Développer des applications mobiles pour les Googles Phones » par Florent Garin. Préface de Sylvain Wallez. 214 pages, éditon Dunod.
Update: le livre utilise la version 1.5 r2 (page 22). Il existe 3 versions du SDK au 6 décembre 2009 :
– Android SDK 1.5 r3 avril 2009
– Android SDK 1.6 r2 décembre 2009
– Android 2.0.1 r1 décembre 2009
A noter que la version 1.6 et la version 2.0.1 sont encore des versions « Béta ». Florent si tu lis ces lignes, est-ce que tu peux donner ton avis et répondre à Guillaume ?
Salut Nicolas, merci pour cette revue du livre, très intéressante et qui donne envie de commander le bouquin. Il manque peut-être juste une information qui pourrait être utile au lecteur, à savoir quelle version d’Android est couverte par le livre.
C’est la version 1.5r2, j’ai mis en fin d’article plus de détails. Tu as bien fait de faire la remarque, merci 🙂
Bonjour, toujours concernant les livres Android, il y a un bon plan:
http://commonsware.com/
3 livres mis à jour pour 35$
Je crois que le premier aborde la 2.0
Sinon il y a un atelier vendredi soir apres une conf: g-e-t.fr
Super analyse du livre en tout cas.
Les livres de commonsware sont dispos en français aux éditions pearson éducations France sous le titre l’art du développement Android
Merci pour la revue, le contenu a l’air correct.
« Cela évite aussi de devoir tout implémenter tout le temps. »
=> Hélas, ce n’est pas tout à fait vrai. L’installation d’applications ne prend pas en compte la notion de dépendances. Difficile donc de créer une API sous forme d’application exposant des services, car rien ne garantie sa présence (on peut heureusement la vérifier, par un tour de passe passe technique : http://www.curious-creature.org/2008/12/15/android-can-i-use-this-intent/). Les développeurs préfereront dupliquer des jars plutôt que de les mutualiser au sein d’une seule application.
Par ailleurs, je me permet de vous signaler la série d’article « Android pour l’entreprise » : http://blog.excilys.com/tag/series-ymca/ . Un nouvel article devrait être publié incessamment sous peu (dès relecture/validation), traitant des problématiques de déploiement et de mise à jour automatique.
PS : la page http://www.touilleur-express.fr/wp-comments-post.php comporte visiblement un bug : le contenu redonné dans le textarea est échappé au niveau des apostrophes (ça met des \ partout).
Le lien est pour les intents est http://www.curious-creature.org/2008/12/15/android-can-i-use-this-intent/ (la parenthèse a la fin m’a joué un tour). Dailleurs, c’est le blog de Romain Guy 🙂
Deux ou trois remarques.
Sur la notion d’Intent et les Composants – activité, services, etc.). Pour moi aussi la partie la plus fascinante d’Android.
Trois autres arguments pour avoir créé un système avec des intent.
– couplage lâche. Tu veux un service? Tu peux envoyer un message pour voir si ce service existe. Et dès que tu es sûr que ton service existe, tu lui envoies un message – avec attente de la réponse,ou non, c’est selon. Très agréable. D’un point de vue architectural très abouti. Et tu peux remplacer tout composant par un autre composant. Il suffit que ton composant réponde au bon Intent.
– On programme non seulement pour faire une application, mais aussi pour la faire tourner sur un système d’exploitation. On dépasse la cadre habituel de l’appli – voire pour « nouzautres javaistes jee », de la plateforme, pour accéder à toutes les fonctionalités possibles du device. Tu veux envoyer un mail? Tu fais confiance à l’OS, tu ne réinventes pas la roue et tu utilises l’Intent pour envoyer un mail. Pour moi Android est un jee côté client. C’est à dire java+des api pour gonfler les performances de ton appli, lui faiore faire plein de choses.
– Et enfin il est très performant d’avoir un OS qui tourne avec des composants et non avec des applications. En effet, il suffit pour l’OS de ne faire tourner que les composants nécessaires. Ainsi, besoin uniquement d’une Activité qui tourne en Foreground. Donc toutes les autres peuvent être mises de côté, « éteintes ». Le Système Android gère le cycle de vie des composants, les arrête, les redémarre… (c’est ça aussi le côté j2ee côté client, le cycle de vie des composants sont managés). Bref, tout cela pourquoi, tu vas me dire? C’est tout con. Parce qu’on est sur nu téléphone. Un petit ordinateur avec peu de émmoire et peu de batterie. Donc il faut économiser la ressource. D’où la gestion du cycle de vie des composants. cqfd.
Autre chose, les versions 1.6 et 2.0.1 ne sont pas des beta. Tu retrouveras notamment la 2.0.1 sur le téléphone Motorola Droid (qui en France s’appelle Milestone). Après, chaque téléphone a un peu sa version d’Android, il y en a eu 6 ou 7 depuis la 1.0… Heureusement les téléphones peuvent être mis à jour par les opérateurs / google – ce qui est un énorme avantage. La 2.0.1 est même carrément « obligatoire » pour les gens qui programment pour Android 2.0 – on dirait que Google a trouvé un problème de sécurité ou un problème bloquant?
Gabriel Kastenbaum
Hello à tous,
Le livre cible effectivement la version 1.5r2 qui était la dernière au moment de la fin de la rédaction.
J’ai d’ailleurs dû en cours de route revenir sur certains chapitres lorsque le SDK 1.5 est sorti ; notamment pour couvrir les « App Widgets » qui étaient l’apport essentiel du 1.5.
Concernant les livres et la question de savoir si un livre doit être un tuto ou pas, on peut lire une discussion sur le blog de Christian Bauer. « Are books tutorials? »
http://relation.to/12422.lace
C’est d’exemples que manque le plus le développeur débutant, c’est valable pour tous les langages. Sur le net, quelques exemples de programmation Android, mais soit trop simplistes, soit trop longs pour être pédagogiques. Bravo en tous cas pour l’effort de faire un livre en français sur le sujet. En matière de programmation, c’est rare.