Droidcon London 2012

img.fleft { vertical-align:top; width:23%; float:left; margin-right:7px; } img.fright { vertical-align:top; width:23%; float:right; margin-left:7px; } p.clear { clear:both; margin-top:7px; }

DroidCon UK banner

La semaine dernière, j'ai eu la chance de pouvoir assister à la Droidcon London, l'une des grandes messes annuelles dédiées à Android. Cet événément est l'un des meilleurs moyens de se tenir informé de l'actualité Android, une très bonne occasion de rencontrer des programmeurs, des fabricants de téléphones, tablettes et autres gadgets Android. Cet article vous propose un résumé des présentations auxquelles j'ai pu assister et autres technos intéressantes dont on m'a parlé ou encore fait des démonstrations à Droidcon U.K.

Note : le masculin est utilisé dans cet article afin d'alléger le texte. Il désigne aussi bien les hommes ques les femmes.

Le programme de la Droidcon London 2012

Le programme de la Droidcon était réparti sur deux jours : les 25 et 26 octobre 2012. Le premier jour est entièrement dédié à un Bar Camp : une série de conférences et d'ateliers organisés spontanément par les développeurs. Le second jour est lui consacré aux speakers officiels de la Droidcon, et cette année l'affiche comptait quelques grands noms avec lesquels vous serez certainement familiers.

Le Bar Camp

Pour ceux qui ne connaissent pas le Bar Camp, il s'agit d'un processus assez original pour une conférence de cette taille (environ 200 personnes participaient au Bar Camp) : au début de la journée, en plénière, toutes les personnes qui veulent proposer un atelier, une conférence ou encore un débat montent sur l'estrade, présentent leur idée en 2 minutes. Puis, à main levée et à l'applaudimètre, les conférences sont retenues...ou non. Les organisateurs de la Droidcon conçoivent alors rapidement un agenda avec les heures et salles et le publient rapidement aussi bien sur Internet que sur l'application Droidcon London et sur quelques grands tableaux placés stratégiquement sur le lieu de la conférence.

Ce processus, très démocratique, permet à tous de proposer un sujet qui les intéressent, et permet également de faire émerger du contenu nouveau et des idées originales.

Vous trouverez ci-dessous une brève présentation de chacun des ateliers auxquels j'ai assisté et dans la mesure du possible des liens vers du matériel utilisé pendant la conférence (slides power point, sites web, etc.). L'intégralité de la programmation est accessible depuis le site officiel de la Droidcon.

Proguard : optimization and obfuscation

Proguard logo

Eric Lafortune a présenté le célèbre outil Proguard dont il est l'auteur. Proguard permet de réduire la taille des fichiers jars (sous Android, les jars sont inclus dans le fichier dex qui se trouve dans le fichier apk de vos apps). Proguard est totalement intégré à la SDK Android et fonctionne également dans le plugin ADT pour Eclipse.

Proguard effectue les opérations suivantes sur vos fichiers apk :

  • optimisation du byte code
  • élagage (shrinking) de code non utilisé
  • obfuscation : renommage et regroupement de classes

Eric Lafortune a présenté des exemples très convaincants d'optimisation de byte code : Proguard est par exemple capable d'inliner une fonction récursive en la dépliant totalement !

L'élagage permet de se débarrasser du code / byte code non utilisé dans un projet. Si par exemple vous utilisez des librairies dans votre app, proguard ne conservera que les méthodes que vous utilisez, supprimant les autres.

Et l'obfuscation permet, elle, de considérablement réduire la taille du byte code en renommant toutes les classes et méthodes en leur donnant des noms très courts (ex: a.b.c) ce qui permet d'accélérer les temps de chargement des apps dans la Dalvik. Cette dernière opération rend malheureusement plus difficile la lecture des StackTraces en cas d'exceptions. La SDK propose cependant un outil permettant de vous aider dans cette tâche : retrace. Signalons également que certains outils d'analytics gèrent également le byte code obfusqué par Proguard comme Bugsense.

Eric Lafortune a récemment créé une start-up : saikoa qui propose un support professionnel pour Proguard ainsi qu'un dérivé de Proguard adapté à Android : DexGuard. Souhaitons-lui bonne chance dans cette aventure et espérons que cette nouvelle initiative permettra de lever certaines limitations actuelles de Proguard sur Android comme, par exemple, le fait que les ressources non utilisées ne soient pas supprimées automatiquement d'un apk.

RoboSpice, Asynchronous Networking Made easy

RoboSpice logo

Stéphane Nicolas, de Octo Technology, a présenté RoboSpice une nouvelle librairie open source qui simplifie l'écriture de requêtes réseau asynchrones.

L'équipe d'Octo a travaillé fort pour publier la version 1.1 de RoboSpice pour la DroidCon London. Pour avoir un aperçu de RoboSpice en quelques secondes, voici une infographie très bien faite (une réalisation de Matthieu Dumeau, infographiste chez Octo).

L'équipe de RoboSpice a également publié une application qui explique pourquoi RoboSpice est la meilleure façon d'écrire des requêtes réseaux pour Android et démontre les limites des AsyncTasks et des Loaders. Cette application : RoboSpice motivations est disponible sur le Google play Store.

Les slides qui ont été présentées à la DroidCon London pour présenter RoboSpice sont disponibles dans la section download du repo Git Hub de la lib.

RoboSpice inclut les fonctionnalités suivantes :

  • exécute les requêtes réseaux asynchrone dans un service Android.
  • facilite les requêtes REST : RoboSpice utilise Spring Android. Ce n'est pas une alternative à Spring Android, mais la meilleure façon de l'utiliser.
  • RoboSpice est fortement typée : vous transmettez des POJOs à vos requêtes REST et vous recevez des POJOs.
  • RoboSpice n'impose aucune limitation sur les classes de POJOs utilisées (pas nécessairement Serializable par exemple) ni sur les classes d'Activités qui peuvent utiliser RoboSpice.
  • met en cache automatiquement les résultats des requêtes en Json (avec Jackson et Gson), ou en Xml, ou encore sous forme de String ou de fichiers binaires. RoboSpice permet même de stocker directement les POJOs dans une BD SQLite en utilisant ORM Lite (en beta).
  • avertit vos activités du résultat des requêtes réseau si et seulement si elles sont encore actives, et sur le thread UI.
  • ne cause aucun memory leak, à l'inverse des AsyncTasks et à l'instar des Loaders.
  • et bien plus encore...

RoboSpice est le fruit d'un projet de recherche et développement initié et réalisé collectivement par 4 Octo :

Introduction to Polaris, a mapping library for Android

polaris logo

Cyril Mottier, a présenté Polaris : une librairie open source simplifiant l'utilisation de Google Maps dans le développement Android.

Une application de démo de Polaris est disponible sur Google Play Store.

Polaris comporte de nombreux avantages pour le développement d'applications cartographiques :

  • les cartes y sont plus fluides, en fait les ItemizedOverlay y sont utilisés de façon optimale.
  • les infobulles sur les points de la carte sont personnalisables et mieux redimensionnées.
  • le zoom et d'autres gestures sont plus intuitives.
  • sur les devices ne supportant pas le multi-touch, des widgets permettent la navigation.
  • le cycle de vie des maps est géré plus finement : de nombreuses interfaces d'écoute d'événements ont été ajoutées.

Cyril Mottier propose un article détaillé sur les nouvelles fonctionnalités de Polaris sur son blog personnel.

OpenCV for Android

OpenCV logo

Erik Hellman, l'un des concepteurs de OpenCV (Open Source Computer Vision) a présenté le portage de cette librairie open source sur Android. OpenCV est une librairie de manipulation d'images en temps réel. Elle permet de manipuler directement le contenu de la CameraView sur Android.

OpenCV est une librairie complexe issue du monde universitaire mais très bien documentée. Elle repose sur une communauté de plus de 47 000 développeurs et c'est une librairie stable et mâture téléchargée plus de 5 millions de fois depuis Internet.

OpenCV intègre de nombreux modules :

  • analyse d'images et de vidéos en temps réel
  • détection d'objets
  • détection de contours
  • analyse colorimétrique
  • détection des visages
  • apprentissage automatique

La version Android comporte cependant encore quelques lourdeurs lors de son utilisation (ex: l'intégration du code natif se fait par le biais d'apk natifs et est encore compliquée) mais cela devrait s'améliorer rapidement dans les prochaines versions de la lib.

Plusieurs vidéos de démonstration de OpenCV pour Android sont disponibles sur Youtube.

Tawkon : a radiation monitoring app for Android

tawkon logo

Le saviez-vous ? Mais l'IARC (Agence Internationale de recherche sur le cancer), qui dépend de l'OMS (Organisation Mondiale de la Santé) a classé les téléphones portables sur la liste 2B : celle des produits potentiellement cancérogènes, au même titre que le chloroforme ou encore le gas-oil.

Tawkon est une application originale qui vous permet de connaître en temps réél l'intensité des ondes émises par de votre téléphone. Dès que ceux-ci dépassent un certain niveau, vous êtes averti automatiquement.

Durant sa présentation, Ori Goshen a précisé que nos téléphones ne sont réellement dangereux que dans certaines situations bien particulières, lors de pics d'émission, ce sont précisément ces pics que Tawkon vous permet de détecter. Il vous suffit alors de vous déplacer, d'éloigner votre téléphone ou d'utiliser un casque pour ne pas être surexposé.

Les conférences officielles

The Fragment Transition

fragment illustration

Corey Latislaw a présenté une session dédiée à l'utilisation des fragments. Son intention était d'inciter les développeurs à prendre en main cette technologie apparue depuis quelques temps déjà (release Honey Comb de la SDK), mais qui ne semble pas encore faire partie des pratiques courantes dans la communauté Android (Corey a par exemple montré que les questions relatives aux fragments représentent 7% des questions sur Android). L'idée derrière cette présentation est simple : retroussons-nous les manches et utilisons systématiquement les fragments !

Cette stratégie semble d'autant plus pertinente que les nouvelles offres de Google en matière de téléphone et de tablettes devraient rapidement favoriser l'essor des tablettes Android.

Elle a donc proposé différentes stratégies pour :

  • démarrer un nouveau projet en utilisant directement les fragments
  • convertir un ancien projet n'utilisant que des Activity en projet à base de Fragment.

Les slides de sa présentation sont disponibles sur prezi.com. Sa présentation est aussi disponible sur Youtube.

Personnellement, Corey m'a convaincu : je suis en train de migrer vers une utilisation systématique des fragments.. Oui, c'est plus difficile, mais par contre, l'adaptation des applis aux tablettes ne coûtent plus grand chose en terme d'effort de développement.

Continuously building & enforcing app quality using Jenkins

jenkins logo

Christopher Orr and Jørgen Tjernø ont proposé une session d'introduction à l'intégration continue sur Android. Ils ont notamment détaillé l'installation et l'utilisation de Jenkins et de ses plugins pour Android.

Parmi ces plugins, trois retiennent notre attention :

  • Android Emulator plugin : qui permet d'instancier un émulateur au cours d'un build Jenkins. La stabilité de ce plugin s'est largement amélioré, notamment grâce aux contributions de Jørgen Tjernø. Il est maintenant plus facile de contrôler l'émulateur durant les builds automatisés.
  • Android Lint plugin : qui permet d'obtenir l'ensemble des alertes et erreurs détectées par l'outil Lint et de les consulter directement depuis les pages de build Jenkins. Cette fonctionnalité est intéressante dans la mesure où il reste difficile d'arrimer les projets Android à des outils d'assurance qualité tels que Sonar
  • Appaloosa plugin : qui permet de distribuer vos builds, une fois qu'ils ont passé leurs tests unitaires directement dans le store privé Appaloosa .

Cette présentation m'a également permis de découvrir Gerrit, un outil développé par Google pour faciliter les processus de peer review. Gerrit possède une interface web et permet de valider le code de chaque commit avant de le pusher dans votre branche stable de git. Gerrit ne fonctionne qu'avec git.

Les slides de la présentation de Christopher and Jørgen sont disponibles ici:

The fly-in app menu for designer and developper

fly in app menu

Cyril Mottier (le créateur de Polaris, voir ci-haut) a également donné une présentation le deuxième jour de la DroidCon sur l'utilisation du "Fly-in app Menu", un pattern UI apparu récemment sur Android qui consiste à présenter un menu latéral coulissant (aussi appelé side-navigation).

La présentation visait à mettre en évidence les difficultés liées à l'utilisation d'un tel menu :

  • comment l'intégrer proprement à l'application ? Par une implémentation personnelle ou grâce à une librairie ?
  • comment indiquer aux utilisateurs sa présence alors que le menu est caché ?
  • comment ne pas introduire de la confusion dans la stack des activités à cause du Fly-in app menu ?

Cyril Mottier a dressé un tableau peu concluant du Fly-in app Menu lors de sa présentation. Ces slides sont disponibles sur Slide Deck.

Beaming data to devices using NFC

commonsware logo

Mark Murphy, plus connu sous le nom de Commons Guy sur le forum Stack Over Flow, directeur des éditions Commons ware a donné une présentation très complète sur NFC (aussi appelé Android Beam).

L'ensemble de sa présentation visait à démontrer l'utilisation, relativement simple de tags NFC mais surtout de la communication inter-devices utilisant le protocole NFC. Il en a présenté les principales difficultés techniques, les avantages (confidentialité, rapidité de mise en œuvre) ainsi que certaines limites inhérentes à la technologie comme sa faible portée ou encore son faible débit de transmission.

Mark Murphy a également mentionné un prolongement intéressant de cette technologie pour initier des communications de proximité mais ensuite de transférer le relais à d'autres protocoles de communication comme BlueTooth ou encore le Wifi qui pallient aux défauts du NFC (meilleure portée, débit plus élevé).

Les slides de Mark Murphy sur NFC sont disponibles sur slideshare.

Write Less / Do More

Scott Alexander Brown a présenté une session dédiée aux librairies les plus récentes sur Android.

Nous ne répéterons pas cette présentation en énumérant les librairies qui y ont été citées. Mais voici 3 liens qui vous permettront de vous tenir à jour des nouvelles librairies sur Android :

La présentation de Scott est accessible en ligne sur sa dropbox..

En coulisse : des technos émergentes

Replacing the Android SDK emulator

Android VM logo

Daniel Farges de GenyMobile a présenté une alternative à l'émulateur Android : Android VM.

Cet émulateur est extrêmement rapide et se lance à l'intérieur de Virtual box. Bien qu'Android VM soit encore en cours de développement, il est déjà fonctionnel et supporte le réseau, le son, l'accélération graphique.

Le projet de GenyMobile possède son propre site Internet et des slides de présentation sont disponibles sur slide share.

Nous reviendrons sans aucun doute sur cette techno dans un prochain article de blog puisque nous comptons faire des essais pour l'utiliser notamment dans le cadre d'un processus d'intégration continue avec Jenkins.

Vogar

Vogar illustration

Vogar est un petit outil permettant de lancer des programmes Java, ou des tests. Il peut lancer ces programmes sur un véritable JVM ou encore sur une device Android. Nous n'avons pas encore pu tester cet outil, mais il nous semble être un bon moyen d'accélérer nos cycles de développement en TDD. En effet, cet outil en ligne de commande permet de se passer de la phase de dexing (première et deuxième phase d'utilisation de aapt dans un build android) et n'utilise pas d'apk pour exécuter les tests. Il interagit directement avec la Dalvik d'un émulateur ou d'une device et lance vos programmes dedans.

Mockito for Android

Mockito logo

Mockito, le célèbre framework de Mock pour Java est maintenant compatible avec Android. Il s'utilise très simplement et permet de réaliser des tests unitaires en mockant les composants, même fortement couplés entre eux.

Nous vous suggérons cet article de Paul Butcher à ce sujet, vous y trouverez un tutorial complet sur l'utilisation de Mockito pour Android. Une autre excellente référence est ce tutorial proposé par Square up.

Pour celles qui cherchent plus de détails sur ce nouveau support Android dans Mockito, nous vous suggérons de consulter cette discussion sur Google groups.

Otto, Dagger & Tape

Tape logo

Pour celles qui ne connaissent pas Jake Wharton, il s'agit de l'un des contributeurs les plus prolifiques dans le monde open source Android. C'est notamment le concepteur des librairies ActionBarSherlock et NotificationCompat2. Il travaille actuellement pour Square Up.

Square propose 3 librairies innovantes pour Android :

  • Tape permet de manipuler une liste de tâches à effectuer. Les tâches sont sérialisées sur disque, ce qui permet de les reprendre même dans le cas où l'application est quittée puis relancée.
  • Otto est une implémentation d'un bus permettant de découpler différentes parties d'une application : les différents éléments d'une application : service, activités, fragments peuvent s'envoyer des messages très simplement en postant des messages sur ce bus. Chaque contexte y réagit dans un style de programmation événementiel très intuitif.
  • Dagger est un framework d'injection de dépendances. Les injections se font à la compilation ce qui le rend plus rapide que RoboGuice par exemple.

Ces 3 outils peuvent être intégrés, ce qui amène à repenser totalement l'architecture des applications Android. Une présentation complète de cette nouvelle architecture est disponible sur slide share.

Notons également qu'une alternative à Otto existe avec le projet EventBus de greendroid. Nous n'avons pas encore pu comparer ces technologies, mais l'une comme l'autre semble prometteuse et augurent des meilleures architectures sur Android en terme de découplage des composants (notamment entre Activity et Fragment, ou encore entre la couche UI et la couche métier).

QualComm et la réalité virtuelle

QualComm a présenté son nouveau processor SnapDragon et sa nouvelle SDK (Vuforia) pour intégrer de la réalité augmentée dans les apps Android et iOS.

Le moins qu'on puisse dire est que cette nouvelle technologie est impressionnante : fluide et robuste. Pour cette démonstration, sur un galaxy S2, le présentateur filmait une image d'empreinte de pas dans de la boue. Une simple image 2D dans un magasine. Sur l'écran du S2, on pouvait non seulement voir cette image mais la chaussure apparaissait alors sur l'écran, en 3D ! On pouvait tourner autour de cet objet ajouté et il était visible dans tous les angles, en temps réel.

Vous trouverez facilement des videos de démonstrations de cette technologie sur Youtube, comme celle-ci.

Le processeur SnapDragon est aussi impressionnant par ces capacités graphiques, les heureux futurs possesseurs du Nexus 4 en tireront sans doute un grand plaisir : le dernier téléphone intègre un processeur SnapDragon à 4 coeurs.

Camobi, faites des démo de vos apps mobiles facilement

Camobi picture

Camobi est un accessoire très simple, mais très pratique. Il vous permet de projeter l'écran de votre mobile, quel qu'il soit (iPhone / Android ou autres) sur l'écran de votre ordinateur. Le principe de Camobi est assez simple : une caméra filme le mobile et un driver vous permet de récupérer le film capturé en temps réel. Ainsi, si vous projetez le contenu de votre écran sur un mur, vous pouvez facilement basculer de vos slides à votre mobile.

Camobi a été utilisée pour de nombreuses présentations à la DroidCon et elle fonctionnait très bien. C'est un outil simple et pratique pour faire des démos à vos clients (lors de vos réunions de fin d'itérations agiles par exemple).

Il est possible de se procurer Camobi depuis le site de Lumitrade, ou directement sur le site de Camobi.

Conclusion

DroidCon London 2012 a été une conférence très riche, un rassemblement de programmeurs Android passionnés. Il m'a permis de rencontrer de nombreux acteurs de la communauté Android (j'ai eu la joie de serrer les mains d'Eric Lafortune et Mark Murphy !! ;) ). Beaucoup de rencontres intéressantes, dans un climat détendu : un vrai bonheur pour un techos, comme on dit !

La DroidCon permet également de faire le plein de nouvelles technos en tout genre, de se tenir informer des développements les plus récents sur Android. C'est aussi une très bonne occasion de proposer de nouveaux projets : la formule Bar Camp possède un caractère très intime qui permet à chacun de lancer des idées novatrices, profitez-en ! C'est ce que nous avons fait pour lancer notre librairie RoboSpice et ce fut une réussite.

Si j'avais un regret, ce serait peut-être le manque de conférences très avancées, la plupart étant de niveaux intermédiaire ou débutant. Mais la grande disponibilité de chacun compense largement ce manque : si vous avez une question pointue, n'hésitez pas à la poser aux conférenciers, vous aurez la meilleure réponse du moment. La grande disponibilité de chacun est un régal.

Les prochaines DroidCon sont :