… tout comme une nouvelle version des tools/platform-tools et de la support-library. Il manque seulement l’image Intel qui devrait arriver très prochainement.

Ce 13 novembre a marqué l’histoire d’Android avec une nouvelle version de Jelly Bean : Android 4.2 (ou JELLY_BEAN_MR1 pour les intimes). Les Nexus 4 et Nexus 10 ont été mis à la vente, mais à notre grande surprise, le SDK n’était pas disponible rendant très difficile l’optimisation des applications. Mais rassurez-vous dans la soirée, Google a mis en ligne le SDK pour l’API Level 17.

Passons rapidement en revue les nouveautés, avec dans un premier temps des changements de comportements :

  • Par défaut, les Content providers ne sont plus exportés, car l’attribut android:exported est mis à false. Bien évidemment vous pouvez à tout moment le changer.
  • La gestion de la position de l’utilisateur fait maintenant une réelle différence entre ACCESS_COARSE_LOCATION et ACCESS_FINE_LOCATION. En coarse_location, la précision sera au minimum d’un block/rue d’une ville.
  • Certains paramètres du terminal sont maintenant en lecture seulement. A priori si vous essayez de les modifier, le système ne les modifiera pas et générera pas d’exception (d’où un FC évité).

Mais passons au plus important, les nouveautés :

  • Android Daydream est un écran de veille interactif (accessible depuis Paramètres -> Affichage -> Ecran de veille interactif) qui s’active quand l’utilisateur branche le terminal sur un dock ou qu’il est branché sur le secteur. Un seul « dream » peut être affiché à la fois et la gestion passe par un service nommé DreamService, qui est très proche d’une Activity.
  • Les widgets sur l’écran de verrouillage (appelés keyguard) sont assez simples à mettre en oeuvre. Dans votre xml, vous devez indiquer s’il est keyguard et/ou home_screen. Vous disposez de méthodes pour différencier les deux emplacements et pouvez spécifier des layouts différents.
  • Gestion du multi-utilisateur : les préférences, base de données, fichiers sont propres à chaque utilisateur. Il est donc plus que recommandé d’utiliser les méthodes du SDK et non le path vers les dossiers de la mémoire pour éviter tout problème. Il est également possible de différencier un utilisateur via son UUID (les paramètres du téléphone étant logiquement similaires). Les paramètres globaux sont eux gérés dans Settings.Global.
  • Supports de l’écriture de droite à gauche (RTL)
  • Gestion des Fragments dans des Fragments (ou Nested Fragments), il suffit simplement d’appeler getChildFragmentManager() sur le Fragment père.
  • Améliorations du Renderscript

Si vous voulez voir plus précisément les nouveautés, vous pouvez consulter le diff.

En plus du SDK, vous retrouvez une nouvelle version du plugin Eclipse et des outils du SDK. Ceux-ci offrent notamment une optimisation pour les écrans Retina, mais attention si vous avez Mac OS X 10.8.2, un kernel panic intervient avec l’accélération matérielle (et une image Intel). La seule solution est de downgrader en 10.8.0 ou 10.8.1.

Une nouvelle version de la support-library est au rendez-vous, avec notamment :

  • Le support des nested Fragment (un Fragment dans un Fragment)
  • Améliorations du débuggage sur le FragmentManager
  • Ajout d’une interface PageTransformer au ViewPager afin de mettre une transition personnalisée avec le scroll (ne fonctionne que sur Android >= 3.0)
  • Améliorations de l’accessibilité
  • Ajout d’un GestureDetectorCompat
  • Ajout de la classe AtomicFile pour faire des opérations atomiques sur les fichiers
  • Accès à toutes les méthodes de make dans l’IntentCompat
  • Et bien d’autres !