Droidcon Londres 2010
Nous étions à Londres la semaine dernière pour la Droidcon 2010, une conférence sur Android et le développement mobile. C'était un événement de deux jours avec un barcamp le premier jour et une conférence plus traditionnelle le second jour. Les sujets principaux étaient l'expérience utilisateur, le développement Android de manière générale et un peu de marketing. Il y avait de nombreux sujets durant ces deux jours mais nous avons décidé de parler de ceux qui nous ont paru être les plus pertinents.
Faites attention à l'interface utilisateur et à l'expérience utilisateur
Ce qui nous a le plus marqué était comment Google insistait sur la réalisation de belles interfaces utilisateur (UI) et d'une bonne expérience utilisateur (UX) dans les applications. Deux présentations ont été faites par deux Google Android Developer Advocate (Roman Nurik et Reto Meier) à propos de ces sujets.
Interface Utilisateur
Roman Nurik nous donna en premier quelques conseils en interface utilisateur pour créer de belles applications :
La première impression est essentielle et ne doit pas seulement concerner l'application elle-même ! Sur le marché, l'application doit avoir une jolie icône, une bonne description, un nom simple et des captures d'écrans représentatives. Ne pensez pas seulement à l'utilisation de l'application, faites de la publicité pour elle sur un site Web ou un blog avec une interface cohérente (mêmes couleurs, icônes et styles que l'application). Concernant l'application, le premier lancement peut être l'opportunité de remercier l'utilisateur, éventuellement l'éduquer avec une simple aide visuelle ou un tutoriel imagé comme les applications Winamp ou Goggles le font :
Concevoir pour une utilisation facile. Évitez les processus d'enregistrements compliqués et assurez vous que l'utilisateur peut utiliser directement l'application. Avoir un écran d'accueil simple et élégant, montrant les principales fonctionnalités de l'application est un must, l'utilisateur sait au premier regard ce qu'il peut faire :
Hiérarchisez votre information dans votre interface et utilisez un pattern principal de navigation (les informations les plus importantes en haut, la navigation principale en haut).
Il nous a donné quelques tuyaux sur l'interface utilisateur :
- Préférez 3 ou 4 onglets en haut de l'écran plutôt que 5 ou plus en bas.
- Supprimez la navigation dans le menu optionnel, la navigation doit être visible sur l'écran.
- Supprimez les boutons retour visible sur l'écran (contrairement à l'iPhone) : il y a un bouton physique pour cela.
- Ne modifiez pas l'historique d'écrans précédents et évitez d'avoir une pile de retour trop longue. C'est affreux d'appuyer 50 fois sur le bouton retour pour revenir à l'écran précédent.
Il a conclu sa présentation en parlant du prototypage. N'ouvrez pas votre Eclipse et codez. Dans un premier temps, pensez aux informations que vous voulez montrer et organisez les. Utilisez un crayon et du papier ou utilisez des outils plus sophistiqués comme Pencil (en tant que plugin Firefox ou application indépendante) et Adobe Fireworks (quelques informations pour vous aider).
Concernant les nouveaux outils (http://code.google.com/p/android-ui-utils/), il fournit quelques stencils pour l'outil Pencil. Très utiles pour créer très rapidement un prototype réaliste :
Pour s'assurer de créer des icônes cohérentes avec Android, il a présenté l'Android Asset Studio, des icônes modèles sous Photoshop et les directives sur les icônes, utiles pour avoir de belles icônes dans votre application et garder une interface utilisateur cohérente entre les applications. Nous critiquons souvent le look and feel des applications Android mais tout est fourni pour créer de belles interfaces utilisateurs.
Expérience Utilisateur
Ensuite nous avons vu Reto Meier, un autre Android Developer Advocate de Google qui parlait de l'expérience utilisateur. Il a donné de nombreux conseils pour donner aux utilisateurs une expérience agréable :
- Toujours informer l'utilisateur de ce qui se passe : Quand il y a un chargement d'information, utilisez les barres et dialogues de progression. Affichez la vue puis les données lorsqu'elles arrivent (listes,...).
- Supprimez les blocages et les interfaces qui ne répondent pas : Utilisez les Thread et particulièrement AsyncTask ! Votre interface utilisateur doit répondre en 100-200 ms.
- Mais le plus important : n'allez pas contre l'utilisateur (navigation intuitive) et n'allez pas contre le système (expérience native d'Android, pile de retour,…)
Vous pouvez trouver tous ces conseils sur sa présentation disponible sur YouTube (de Google I/O 2010). Nous recommandons fortement à chaque développeur Android de la voir et de l'appliquer... très instructive ! L'expérience utilisateur doit être la première priorité des développeurs.
Pensez au delà du téléphone
Les appareils Android ne sont plus seulement des téléphones : tablettes, TV, embarqués (voiture…) avec différentes résolutions, tailles d'écrans (de 3” à plus de 40”) et capacités (pas de photo sur certaines tablettes, pas d'accéléromètre dans une TV !).
Al Sutton a dit que les développeurs doivent penser à cela quand ils développent des applications. Par exemple, les tablettes et TV sont conçues pour un affichage en mode paysage. Imaginez, tourner la TV dans votre salon ! Pensez large (utilisez -large pour vos layouts), paysage (ne bloquez pas dans un mode portrait) et adaptez votre interface utilisateur à l'appareil. Ne reproduisez pas les applications Twitter ou Facebook qui ont une très mauvaise expérience utilisateur (portrait seulement, beaucoup d'espace non utilisé, petites icônes) sur tablettes comme vous pouvez le voir ci-dessous :
Une autre erreur est de confondre densité et résolution. Les développeurs ne devraient pas considérer que la densité faible correspond à une résolution QVGA, la densité moyenne à une résolution HVGA et que la haute densité à une la résolution WVGA. Ces faits sont en général vrais pour les téléphones mais pas pour les tablettes ou TV. Par exemple, la Dell Streak (5") est une tablette WVGA MDPI et la Samsung Galaxy Tab (7") est une tablette WSVGA HDPI. De nombreux détails sur comment gérer les différents écrans sont disponibles ici.
Concernant les autres capacités, utilisez le PackageManager (getSystemAvailableFeature) pour vérifier la disponibilité d'un périphérique matériel (GPS, Accéléromètre, boussole, photo,…) afin de ne pas avoir des problèmes au runtime et éviter d'afficher à l'écran les fonctionnalités non disponibles.
Vous n'êtes pas tout seul !
Quand vous développez une application, ne pensez pas seulement à elle, pensez également à la plate-forme, aux autres applications, aux autres appareils autour de vous. C'était clairement le message de Sean Owen, Mark Murphy et Friedger Müffke.
Utilisez les Intents, fournissez des Intents,... les Intents sont merveilleux
")Sean Owen est un développeur Google qui a co-développé Barcode Scanner (dans le top 5 du Market) et son API ZXing sur son 20% de temps libre chez Google. Sean a expliqué que distribuer en open source la librairie principale de son application était une priorité dès le début pour que cette librairie puisse être réutilisée par d'autres développeurs. Il a donc transformé son application en une dépendance, une API : ZXing API basée sur le mécanisme d'Intent d'Android.
Pour ceux qui ne savent pas ce qu'est un Intent, il s'agit d'un mécanisme qui assure que vous êtes capable de communiquer à l'intérieur ou à l'extérieur de votre application. Dans votre application, vous bougez d'un écran à un autre en utilisant les Intents. Vous pouvez aussi utilisez une application externe qui est capable de faire ce que vous voulez faire. Typiquement, lorsque vous cliquez sur une URL, le navigateur est lancé avec un Intent. Quand vous souhaitez partager de l'information, toutes les applications disponibles dans votre appareil et qui sont capables de partager de l'information (Twitter, Facebook, email...) sont proposées par le système avec ce mécanisme. Quelques détails sont disponibles ici.
Concernant Barcode Scanner, toute application peut l'utiliser en appelant le bon Intent. Tout le monde peut donc développer une nouvelle application qui scanne des QR code sans avoir à développer son scanner lui-même. Le problème avec ceci est lorsque l'utilisateur de l'application n'a pas installé Barcode Scanner sur son appareil. Il doit y avoir une ActivityNotFoundException...
Et c'est le sujet principal de Sean Owen : vous pouvez effectuer des téléchargements (depuis votre application) avec les Intents ! C'est à dire : créer une application merveilleuse qui peut être lancée via des Intents, créer une API pour lancer cet Intent et capturer l'exception, lancer l'Android Market pour récupérer l'application manquante. Et c'est tout ! Un nouvel utilisateur à votre application de téléchargé !
Il a conclu sa session avec une belle phrase : "Pensez plate-forme, pas seulement application", pensez à toutes les applications que vous pouvez utilisez, pensez à toutes les applications qui pourraient utiliser les vôtres... Android est ouvert et fournit des mécanismes pour voir plus large que juste notre petite application.
Modèles de réutilisation
Mark Murphy a ensuite parlé de la réutilisation de code et de fonctionnalités. Pourquoi devrions nous réutiliser ? Principalement pour améliorer les capacités des applications, la qualité et aller plus vite sur le marché. Selon lui, trois modèles de réutilisation sont possibles :
- Utilisez des APK et Intents, comme nous venons de le voir avec Barcode Scanner. C'est une façon simple d'intégrer des fonctionnalités dans son application. Comme nous l'avons vu, il peut y avoir des erreurs si l'application dépendante n'est pas installée...
- Utilisez des JAR comme nous le faisons en Java depuis la nuit des temps. C'est un mécanisme simple et bien connu pour fournir des fonctionnalités. Le souci ici est qu'aucune ressource Android ne peut être fournie (images et autres), non disponible dans la classe statique R...
- Utilisez Android Library Project, une fonctionnalité récemment ajoutée dans le SDK. Cela assure de partager code et ressources. Le principal problème avec ce mécanisme est que vous ne pouvez pas générer un APK ou un JAR parce que le code source et les ressources nécessitent d'être ajoutés à votre projet et compilés au même moment. Donc si vous souhaitez partager une librairie, vous ne pourrez pas partager les sources avec.
Il a conclu en parlant de comment partager toutes ces librairies et mentionné OpenIntents (voir partie suivante)...
Sa présentation est disponible sur slideshare.
OpenIntents
Friedger Müffke est un des principaux développeurs d'OpenIntents qui fournit de nombreuses applications Android. Il a également participé à l'organisation des Droidcon 2010 à Berlin et Bruxelles.
Comme Sean Owen et Mark Murphy, Friedger a parlé de la puissance des Intents et de la nécessité de partager vos Intents. C'est important de ne pas penser monolithique mais composants interconnectés pour réutiliser des API et applications faites par d'autres développeurs. Avec les Intents toutes les applications sont égales, si une application peut gérer un Intent le choix est proposé à l'utilisateur de sélectionner son application favorite. Par exemple, si votre application autorise l'utilisateur à partager son contenu sur Twitter, c'est important que votre application ne publie pas elle même sur Twitter mais laisse le choix à l'utilisateur de choisir l'application.
Sur la première capture d'écran ci-dessous, l'utilisateur a le choix de partager notamment sa vidéo avec Peep et Twitter qui sont deux des applications Twitter. Sur la seconde capture, l'utilisateur peut choisir son application favorite pour sélectionner une piste de musique :
Mais dans la mesure où l'utilisation des Intents nécessite d'avoir certaines informations, la réutilisation des Intents d'autres applications devient problématique. Aucune information sur les Intents n'est disponible sur l'Android Market, la seule possibilité est que le développeur les documente sur son site Web. Pour éviter ce problème, un registre des Intents est nécessaire. Tous les développeurs peuvent faire la promotion de leurs Intents et voir la possibilité de réutiliser des applications dans un seul endroit.
Lorsqu'aucune application n'est capable de gérer un Intent à travers votre application, Sean Owen suggérait de capturer l'exception pour rediriger l'utilisateur sur l'Android Market vers une application que vous savez capable de gérer l'Intent. Cette méthode requière de spécifier une telle application et dans ce cas l'utilisateur n'a pas le choix. Friedger Müffke propose d'avoir un gestionnaire de dépendance pour résoudre ce problème. Lorsqu'un Intent n'est géré par aucune des applications installées, le gestionnaire des dépendances suggérerait quelques applications à installer. Cependant, ce gestionnaire de dépendance devrait faire partie d'Android pour être facilement utilisable par tous les utilisateurs sans recourir à une pré-installation.
AllJoyn
Qualcomm a présenté sont ambitieux projet AllJoyn, ayant pour objet de connecter des appareils mobiles avec une technologie peer-to-peer basée sur la proximité. Cela utilise le WiFi ou le Bluetooth pour connecter les appareils. Un appareil mobile peut découvrir d'autres mobiles autour de lui pour échanger des données, fournir des services aux autres, consommer des services des autres, promouvoir ses services à tous les appareils autour de soi, etc. Les possibilités avec ce projet sont énormes :
- Applications sociales, interagir avec des gens autour de vous
- Jeux multijoueurs, jouer à des jeux avec des gens près de vous
- Échanger des informations
- Services de proximité, acheter ou valider un ticket près d'un terminal
Le SDK est déjà disponible pour ceux qui sont intéressés. Cela consiste à utiliser quelques annotations pour partager vos services avec les autres.
Android, une communauté large et grandissante
Durant ces deux jours, nous avons réalisé à quel point la communauté Android est dynamique. Développeurs, sociétés de services IT, compagnies de télécommunications et fabricants sont très intéressés par cet OS, en participant activement à cet événement. Les participants venaient de nombreux pays pour partager leurs connaissances et leurs meilleures pratiques. Avoir une belle interface utilisateur et une bonne expérience utilisateur sont primordiales pour relever le défi de la diversification d'Android qui n'est plus seulement utilisé sur téléphones. Tous les développeurs ont réalisé que les Intents étaient l'une des fonctionnalités les plus puissantes d'Android pour faire des applications interconnectées et non isolées.
Nous voudrions remercier les organisateurs et les participants pour ces deux jours enrichissants.