Migrer des applications vers Android 9

Android 9 (niveau d'API 28) introduit de nouvelles fonctionnalités et API dont vous pouvez profiter dans vos applications, ainsi que de nouveaux changements de comportement. Ce document présente les étapes à suivre pour migrer vos applications vers Android 9 en deux phases clés:

  1. Assurer la compatibilité de base avec Android 9

    Vérifiez que votre application existante est entièrement fonctionnelle sur la nouvelle version de la plate-forme. À ce stade, vous n'utilisez pas de nouvelles API et ne modifiez pas le targetSdkVersion de votre application, mais des modifications mineures peuvent être nécessaires.

  2. Cibler la nouvelle plate-forme, compiler avec le SDK Android 9 et utiliser les fonctionnalités d'Android 9

    Lorsque vous êtes prêt à profiter des nouvelles fonctionnalités de la plate-forme, mettez à jour votre targetSdkVersion vers 28, vérifiez que l'application continue de fonctionner comme prévu, puis commencez à utiliser de nouvelles API.

Préparer un appareil équipé d'Android 9

Si vous disposez d'un appareil compatible, obtenez l'image système Android 9 de votre appareil auprès du fabricant. Cliquez ici pour accéder aux images d'usine pour les appareils Pixel. Pour obtenir des instructions générales pour flasher une image système, cliquez ici.

Vous pouvez également télécharger l'image système Android 9 pour Android Emulator. Elle est répertoriée dans SDK Manager sous Android API 28 sous le nom Google APIs Intel x86 Atom System Image (Image système des API Google Intel x86 Atom).

Remarque:L'image système de l'émulateur Android 9 peut être téléchargée dans Android Studio 3.1 ou version ultérieure. Android Studio 3.2 offre une compatibilité maximale. Pour en savoir plus, consultez Obtenir le SDK Android 9.

Assurer la compatibilité avec Android 9

L'objectif est de s'assurer que votre application existante fonctionne telle quelle sur Android 9. Étant donné que certaines modifications de la plate-forme peuvent affecter le comportement de votre application, des ajustements peuvent être nécessaires, mais vous n'avez pas besoin d'utiliser de nouvelles API ni de modifier votre targetSdkVersion.

Assurer la compatibilité avec Android 9 en détail

Effectuer des tests de compatibilité

Dans la plupart des cas, le test de compatibilité avec Android 9 implique le même type de test que celui que vous effectuez lorsque vous préparez la publication de votre application. C'est le moment de consulter les Consignes fondamentales relatives à la qualité des applications et les Bonnes pratiques de test.

Toutefois, il existe un autre aspect des tests: Android 9 apporte des modifications à la plate-forme Android qui peuvent affecter le comportement de votre application ou interrompre complètement l'application, même si vous ne modifiez pas votre targetSdkVersion. Pour cette raison, il est important d'examiner les principales modifications décrites dans le tableau 1 et de tester les correctifs que vous allez appliquer pour les adapter.

Tableau 1. Principales modifications affectant toutes les applications exécutées sur les appareils Android 9.

Modifier Résumé
Restrictions concernant les interfaces non SDK L'accès à des interfaces non SDK spécifiques est désormais bloqué, que l'accès soit direct, via JNI ou par réflexion. Les tentatives d'accès à des interfaces restreintes génèrent des erreurs telles que NoSuchFieldException et NoSuchMethodException. Pour en savoir plus, consultez Restrictions concernant les interfaces non SDK.
Suppression du fournisseur Crypto À partir d'Android 9, le fournisseur JCA Crypto a été supprimé. Les appels à SecureRandom.getInstance("SHA1PRNG", "Crypto") génèrent NoSuchProviderException.
Décodeur UTF-8 plus strict Sous Android 9, le décodeur UTF-8 pour le langage Java est plus strict et respecte la norme Unicode.
Accès à l'appareil photo, au micro et aux capteurs bloqué pour les applis inactives Lorsque les applis sont inactives, elles ne peuvent plus accéder aux capteurs de l'appareil photo, du micro ni des capteurs SensorManager.

Pour obtenir une liste plus complète des modifications de comportement pour toutes les applications exécutées sous Android 9, consultez le document Changements de comportement.

Mettre à jour votre version cible et utiliser les fonctionnalités d'Android P

Cette section explique comment assurer une compatibilité totale avec Android 9 en passant à la version 28 de targetSdkVersion et en ajoutant de nouvelles fonctionnalités disponibles dans Android 9.

En plus de vous proposer de nouvelles API, Android 9 introduit des changements de comportement lorsque vous mettez à jour votre targetSdkVersion vers la version 28. Étant donné que certains changements de comportement peuvent nécessiter des modifications du code pour éviter le dysfonctionnement, vous devez d'abord comprendre comment votre application peut être affectée lorsque vous modifiez targetSdkVersion en examinant toutes les modifications de comportement pour les applications ciblant Android 9.

Remarque:Les étapes décrites ci-dessus pour garantir la compatibilité des plates-formes sont des conditions préalables au ciblage de votre application sur Android 9. Assurez-vous donc d'effectuer d'abord ces étapes.

Mettre à jour la version cible et utiliser les fonctionnalités d'Android 9 étape par étape

Obtenir le SDK Android 9

Vous pouvez obtenir les packages SDK pour compiler votre application avec Android 9 à l'aide d'Android Studio 3.1 ou version ultérieure. Si vous n'avez pas encore besoin des nouvelles fonctionnalités d'Android 9, et que vous souhaitez uniquement effectuer la compilation sur cette version de la plate-forme, vous pouvez utiliser Android Studio 3.1. Android Studio 3.2 est entièrement compatible avec les fonctionnalités d'Android 9.

Tester votre application Android 9

Une fois les préparations ci-dessus terminées, vous pouvez compiler votre application, puis la tester davantage pour vous assurer qu'elle fonctionne correctement lorsque vous ciblez Android 9 (niveau d'API 28). C'est le moment de consulter les Consignes fondamentales relatives à la qualité des applications et les Bonnes pratiques de test.

Lorsque vous compilez votre application avec le targetSdkVersion défini sur P, vous devez prendre en compte des modifications spécifiques de la plate-forme. Certaines de ces modifications peuvent avoir un impact important sur le comportement de votre application, voire interrompre complètement celle-ci, même si vous n'implémentez pas de nouvelles fonctionnalités dans Android 9.

Le tableau 2 fournit une liste de ces modifications, accompagnée de liens vers plus d'informations.

Tableau 2. Principales modifications qui affectent les applications lorsque targetSdkVersion est défini sur 28.

Modifier Résumé
Autorisation pour le service de premier plan Les applications souhaitant utiliser les services de premier plan doivent désormais demander d'abord l'autorisation FOREGROUND_SERVICE. Il s'agit d'une autorisation normale. Le système l'accorde donc automatiquement à l'application à l'origine de la demande. Le démarrage d'un service de premier plan sans l'autorisation génère une exception SecurityException.
Abandon des algorithmes de chiffrement Bouncy Castle. Android 9 abandonne plusieurs algorithmes de chiffrement du fournisseur Bouncy Castle au profit de ceux fournis par le fournisseur Conscrypt. Les appels à getInstance() qui demandent le fournisseur Bouncy Castle génèrent des erreurs NoSuchAlgorithmException. Pour résoudre les erreurs, ne spécifiez pas de fournisseur dans getInstance() (en d'autres termes, demandez l'implémentation par défaut).
Suppression de l'accès direct à Build.serial Les applications qui ont besoin de l'identifiant Build.serial doivent maintenant demander l'autorisation READ_PHONE_STATE, puis utiliser la nouvelle méthode Build.getSerial() ajoutée dans Android 9.
Partage non autorisé du répertoire de données WebView Les applications ne peuvent plus partager un même répertoire de données WebView entre les processus. Si votre application comporte plusieurs processus utilisant WebView, CookieManager ou toute autre API du package android.webkit, votre application plantera lorsque le second processus appelle une méthode WebView.
L'accès au répertoire de données de l'application est bloqué par SELinux Le système applique des bacs à sable SELinux par application avec des restrictions SELinux propres à chaque application au niveau du répertoire de données privées de chaque application. Il n'est désormais plus possible d'accéder directement au répertoire de données d'une autre application via son chemin d'accès. Les applications peuvent continuer à partager des données à l'aide des mécanismes d'IPC, y compris en transmettant des FD.

Pour obtenir une liste plus complète des modifications de comportement pour les applications ciblant Android 9, consultez le document Changements de comportement.

Pour découvrir les nouvelles fonctionnalités et API disponibles sur Android 9, consultez Fonctionnalités et API d'Android 9.