Android 4.4 (API level 19), les changements pour les devs et les graphistes

 

Votre sang de geek bouillonne depuis la mise en ligne de l’annonce d’Android 4.4 alias KitKat. Vous avez peut-être même déjà craqué pour un nouveau Nexus 5. Et certains d’entre vous auront fait comme à chaque fois, ils auront testé la nouvelle image pour l’émulateur en se disant : « Mais non, ça ne va pas ramer, et cette fois-ci, il y aura des trucs à voir dans l’émulateur »… Bon au final, l’émulateur a mis 15 minutes pour se lancer… et à part des icônes un peu changées il n’y a rien de marrant. Vous étiez donc blasés et avez décidé de partir au lit en boudant avec votre nounours. Mais heureusement, nous on avait rien à faire alors on a lu la doc’… Et il y a quand même quelques trucs à retenir !

Android 44 checkout highlights

Pour rappel, quelques sources sont utiles pour les développeurs et les designers :

Ouais, ça fait beaucoup à lire … du coup on va résumer pour vous !

Les designers, quelques changements pour vous

Maintenant, c’est une habitude. Depuis qu’il y a de vrais bons dans l’équipe Android (comme ce cher Matias Duarte), les aspects design et ergonomie sont beaucoup mieux définis. Pour cette version, Google a pris en compte un retour fréquent de la communauté de développeurs : les couleurs de Holo sont très fortes (ce bleu flashy notamment), du coup les choix de couleurs spécifiques des marques peuvent être gênés. Deux changements vont corriger le problème.

Une nouvelle page dans la rubrique Design de la documentation a fait son apparition. Elle donne quelques recommandations pour appliquer les couleurs de votre marque à votre application, tout en restant dans les lignes de conduite Android : http://developer.android.com/design/style/branding.html.

L’objectif est d’être « compatible avec l’expérience Android, tout en gardant la personnalité de votre marque« .

branding_googlemusic

Un autre point intéressant est situé au niveau du changement du retour utilisateur au moment du clic. Avant, il était conseillé de mettre un halo de couleur autour de la touche. Google a pensé que ce halo est trop appuyé et n’aide pas à la lisibilité. Pour corriger cet effet, il est maintenant conseillé d’appliquer un effet « plus sombre » à son bouton dans l’état pressed. Là aussi, la page dédiée à ce comportement a été majourée (une contraction du verbe mise-à-jourer… je te majoure, tu te majoures…) : http://developer.android.com/design/style/touch-feedback.html. J’ai demandé sur Google+ à Nick Butcher et Roman Nurik s’il était intéressant de garder une rétrocompatibilité sur ce changement. J’attends leur réponse au moment d’écrire l’article.

Un autre changement majeur est l’arrivée de la mise en page Full-Screen pour toutes les applications. Comprenez par là la disparition de la barre de notification et de la barre de boutons si le terminal en dispose. Jusque là, seule la lecture de vidéo en profitait quand le système la gérait. Maintenant toutes les applications vont pouvoir en profiter pour rendre l’expérience plus immersive, notamment pour la lecture de livres ou de vidéos ou pour les jeux vidéo. De plus, la barre de notifications devient translucide. J’ai repéré une discussion intéressante entre Romain Guy et Jake Wharton sur Twitter sur la manière de gérer le padding de la barre de notifications transparente.

fullscreen_landing

Enfin, pour les graphistes, un dernier outil a été ajouté : de nouvelle gestures. Les graphistes pourront imposer à leur développeurs d’intégrer des gestures+animations de « page qui se tourne » sans que le développeur dise que c’est trop compliqué.

Nouvelles APIs pour les développeurs

On a pas mal de choses à se mettre sous la dent grâce aux nouvelles APIs propres à KitKat.

Tout d’abord, le composant WebView a pas mal changé. Précédemment, Android utilisait le moteur WebKit de base dans la WebView comme dans le navigateur natif. Maintenant, c’est le moteur de rendu de Chromium (partie 100 % open source de Chrome) qui est utilisé. Les promesses sont toujours plus de performances et les dernières APIs HTML5 dans votre WebView. Je laisse les spécialistes commenter sur le sujet.

Un tout nouveau package CardEmulation fait son entrée. Pour les services autour du NFC (partage de données à courte portée, paiement sans contact, carte de fidélités, toussa toussa) c’est une fonctionnalité de plus pour permettre aux développeurs de rendre nos smartphones indispensables. C’est une API qui doit permettre de mieux gérer les cartes virtuelles NFC. Par ailleurs, il semble aussi qu’il soit possible pendant l’exécution de l’application de bloquer certaines lectures de tag NFC à vote application.

A partir de Android KitKat, il ne sera plus nécessaire de demander la permission External Storage pour accéder au dossier spécifique de son application sur la carte mémoire externe. Sans la permission, vous n’aurez accès qu’au dossier retourné par Context.getExternalFilesDir(). Le gros avantage, c’est que si vous n’avez pas besoin de naviguer dans toute l’arborescence, c’est une permission de moins nécessaire.

Une amélioration de l’AlarmManager a pour objectif d’améliorer l’impact pour la batterie. Vos services utilisant AlarmManager pour s’exécuter à un moment précis ne sont plus assurées de s’exécuter au temps précis défini. Le système va lancer toutes les alarmes « proches » ensemble afin de réveiller le terminal qu’une fois pour toutes ces alarmes « proches ». Si vous souhaitez une mise à jour précise (pour une application d’horloge par exemple 8) ), utilisez « setExact » en lieu et place de « set« . Le même comportement est ajouté aux APIs de synchronisation.

Capture d’écran 2013-11-01 à 00.38.15

Toute une nouvelle API pour l’intégration d’imprimantes a été ajoutée. Vous aller pouvoir envoyer des images et des documents au format PDF. Toutes les applis de billetterie vont pouvoir se mettre à jour par exemple. Le tout se passe avec le nouveau PrintService.

L’API SMS abeaucoup changé. Avant, toutes les applications étaient en lecture/écriture sur le ContentProvider des SMS. Maintenant, l’utilisateur peut définir une application SMS par défaut. Celle-ci sera la seule en capacité d’écrire les SMS. Pensez à lire le billet du blog officiel sur le sujet.

Pas mal de mises à jour sur l’API de médias ont été faites. C’est assez pointu, donc je vais commenter ce que j’ai compris :

Pour la vidéo, vous pourrez maintenant adapter le rendu du codec à la volée, avoir un accès à l’ImageRenderer plus précis pour de meilleures performances et profiter de nouveaux codec comme le WebVTT. Pour l’audio, plus de libertés sur la lecture sont données et un effet pour les basses plus efficace est à disposition. Enfin, l’API de contrôle de lecture a distance a été améliorée afin d’offrir plus d’options aux applications tierces.

De nouvelles animations sont aussi disponibles dans le package Transitions. Vous avez à votre disposition l’objet Scene pour mieux représenter une ensemble d’animations à appliquer entre deux vues. Vous pouvez aussi mettre en pause maintenant vos animations.

Des optimisations pour les graphismes ont été ajoutées vous permettant de gérer plus finement la réutilisation des bitmaps. C’est un gain en performance qui peut être non-négligeable.

La gestion des fichiers intègre au nouveau format : le document. L’intérêt est de fournir à n’importe quel fichiers des propriétés de documents. C’est-à-dire un fichier pour lequel l’application peut vouloir garder l’accès sans pour autant le charger complètement. Toute une nouvelle page a été ouverte pour cette fonctionnalité.

De nouveaux capteurs vont permettre d’enrichir vos applications. Le plus marrant étant le capteur de « pas » (quand vous marchez) hardware ou podomètre pour une meilleure optimisation batterie. Le magnétomètre vient offrir de nouvelles fonctionnalités quand le gyroscope n’est pas disponible. De plus, dans un objectif d’amélioration de la batterie, votre application pourra décider de ne recevoir des événements de capteurs qu’à une fréquence que vous aurez choisi et non pas à chaque rafraîchissement du capteur.

kk-sensors-moves-n5

Vous pourrez maintenant transformer votre terminal Android en petite console. En effet, les développeurs de jeux vont être capables de différencier les contrôleurs connectés pour différencier les joueurs. Pensez donc à supporter le nouveau getControllerNumber.

Pour l’accessibilité, des nouvelles APIs permettent de gérer des drawables miroir pour que non seulement le texte, mais aussi le visuel, s’adaptent au besoin.

Trois nouvelles permissions ont également vu le jour. Deux servent à gérer l’ajout et la suppression de raccourcis et une à gérer l’interface IR, je vais y revenir.

Cinq nouvelles fonctionnalités du téléphone peuvent être demandées par votre applications :

  • La présence d’un capteur infrarouge
  • La gestion d’une politique de terminal
  • La fonction NFC Host Card vue plus tôt dans l’article
  • Et les deux fonctions liées au compteur de pas

Enfin, c’est peu visible dans l’annonce, mais une nouvelle API de gestion d’échanges par infrarouge devrait vous permettre de faire des télécommandes universelles avec les terminaux compatibles. Je pense que c’est dans le package ConsumerIRManager.

Pensez à passer votre target API en 19 !

Faites enfin de belles vidéos de vos applications

Un des problèmes récurrents sur Android, c’est la difficultés de faire des vidéos promotionnelles de vos applications. Actuellement, il fallait une carte d’acquisition HDMI et un terminal compatible.

Maintenant, avec Android KitKat, une nouvelle option dans le menu « Options pour les développeurs » permet de lancer le l’enregistrement du flux vidéo. Pour récupérer le résultat, exécutez « adb shell screenrecord » depuis la console de votre ordinateur. C’est quand même bien plus facile.

Grosse mise à jour dans les Play Services

Pour rappel, les Play Services sont les fonctionnalités « closed sources » de Google poussées par l’intermédiaire des mises à jour du Play Store. L’avantage numéro 1 c’est la migration indépendante de la version (donc avec une large rétro-compatibilité), le désavantage étant le menottage aux fonctionnalités Google (big brother, NSA, tout ça…). Après, il faut dire qu’il y a des fonctionnalités sympathiques.

google-services

Tout d’abord, si vous utilisez AdMob, maintenant Google Mobile Ads est intégré au Play Services pour remplacer la bibliothèque AdMob. Google promet des corrections de bugs « over the air« , de nouvelles pubs plus interactives (comprenez plus performantes aussi), de nouveaux outils pour vous aider à monétiser vos applications. L’autre ajout majeur est de prendre en compte l’Android ID de l’utilisateur. C’est pour lui la possibilité de restreindre les pubs aux seuls thèmes qui l’intéresse, mais aussi pour le développeur d’améliorer la pertinence de la pub grâce à des informations cross-apps.

Les fonctionnalités de localisation et de Maps ont encore été améliorées afin d’être toujours moins gourmandes pour votre batterie. N’hésitez pas à utiliser les Geofencing par exemple.

Enfin, des fonctionnalités de test en sandbox sont disponibles pour Google Sign-In et Google Wallet. Mais aussi quelques amélioration pour vos possibilités d’achats In-App avec Google Wallet.

La bibliothèque de support et le NDK légèrement améliorés

La « support library » pour améliorer la rétro-compatibilité a été aussi un peu améliorée. Essentiellement, l’objectif est d’utiliser des APIs qui ressemble à celles nouvellement introduites (comme le framework de Print) et la bibliothèque gère pour vous le renvoi des données cohérentes quelle que soit la version Android d’exécution. Le détail sympa, c’est l’ajout de PopupMenu drag’n’dropables, je vous laisse lire la doc.

Le NDK, la partie des outils pour le développeur qui vous offre la possibilité d’écrire dans du code C/C++ bas niveau a un peu changé. Outre quelques APIs stabilisées, c’est RenderScript qui est maintenant accessible depuis le NDK. C’est donc pleins d’optimisations pour vos animations écrites avec le NDK qui sont offertes.

Quelques améliorations dans les outils pour développeurs

Tout d’abord, la nouvelle star Android Studio passe en version 0.3.2. On reste en version preview.

Android Studio est capable maintenant d’appeler lui même la fonctionnalité d’enregistrement d’écran afin de stocker le flux de votre écran en fichier vidéo.

Android Studio propose maintenant une preview des drawables créés de façon programmatique. C’est très utile pour vérifier que le résultat de votre image est bien celui que vous souhaitez, sans lancer l’application sur le terminal. Une nouvelle vue de preview est aussi disponible pour les menus.

Une nouvelle méthode de build expérimentale promet aussi entre 20 et 30% de gain de temps. A vos risques et périls si vous l’activez.

android-studio

 

De leur côté, le SDK et le plugin ADT n’ont connu que des corrections de bugs et le support de KitKat. De là à voir le pragmatisme de l’abandon de Eclipse, il n’y a qu’un pas.

En conclusion, laissons Google récapituler

Et pour finir l’article, quoi de mieux qu’un DevBites pour revoir tout ça ?


Les derniers articles