Android 8.0 (niveau d'API 26) introduit des modifications de comportement, ainsi que de nouvelles fonctionnalités et API que vous pouvez exploiter dans vos applications. Ce document présente les étapes à suivre pour migrer vos applications vers Android 8.0 en deux phases clés:
- Assurer la compatibilité avec Android 8.0
Vérifiez que votre application est entièrement fonctionnelle sur la nouvelle version de la plate-forme. À ce stade, vous n'utilisez pas de nouvelles API ni ne modifiez la
targetSdkVersion
de votre application, mais des modifications mineures peuvent être nécessaires. - Mettre à jour votre version cible et utiliser les fonctionnalités d'Android 8.0
Lorsque vous êtes prêt à profiter des nouvelles fonctionnalités de la plate-forme, mettez à jour votre
targetSdkVersion
vers la version 26, vérifiez que l'application continue de fonctionner comme prévu, puis commencez à utiliser les nouvelles API.
Assurer la compatibilité avec Android 8.0
L'objectif ici est de vous assurer que votre application existante fonctionne telle quelle sur Android 8.0 (niveau d'API 26). Étant donné que certaines modifications de la plate-forme peuvent avoir un impact sur le comportement de votre application, certains ajustements peuvent être nécessaires, mais vous n'avez pas besoin d'utiliser de nouvelles API ni de modifier votre targetSdkVersion
.
Préparer un appareil équipé d'Android 8.0
- Si vous possédez un appareil compatible (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P ou Nexus Player), suivez les instructions pour flasher votre appareil.
- Vous pouvez également télécharger l'image système Android 8.0 pour Android Emulator. Il est listé dans le SDK Manager sous Android 8.0 sous le nom Image système Intel x86 Atom des API Google.
Remarque:L'image système Android 8.0 est disponible en téléchargement à partir d'Android Studio 3.0 ou version ultérieure. Pour en savoir plus, consultez la section ci-dessous pour obtenir le SDK Android 8.0.
Effectuer des tests de compatibilité
Dans la plupart des cas, les tests de compatibilité avec Android 8.0 (niveau d'API 26) impliquent le même type de tests que ceux que vous effectuez lorsque vous vous préparez à publier votre application. C'est le moment de consulter les consignes fondamentales relatives à la qualité des applications et les bonnes pratiques en matière de test.
Cependant, il existe un autre aspect aux tests: Android 8.0 introduit 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
. C'est pourquoi il est important que vous examiniez les principaux changements du tableau 1 et que vous testiez les correctifs que vous implémentez pour les prendre en compte.
Modifier | Résumé | Autres références |
---|---|---|
Notifications de la localisation en arrière-plan moins fréquentes | Si votre application reçoit des mises à jour de position d'un service en arrière-plan, elle reçoit des mises à jour moins fréquentes sur Android 8.0 (niveau d'API 26) que sur les anciennes versions d'Android. Plus précisément, un service en arrière-plan ne peut pas recevoir de mises à jour de position plus de quelques fois par heure. Toutefois, lorsque votre application est au premier plan, le taux de mises à jour de position reste inchangé. | Limites de localisation en arrière-plan |
net.hostname ne sont plus acceptés
|
L'interrogation de la propriété système net.hostname génère un résultat nul.
|
Aucune |
Nouvelle exception de la part de send(DatagramPacket) |
La méthode send(DatagramPacket) génère une exception SocketException si la méthode connect(InetAddress, int) précédemment exécutée a échoué.
|
Changements de comportement: connectivité réseau et HTTP(S) |
NullPointerException approprié à partir des méthodes AbstractCollection
|
AbstractCollection.removeAll(null) et AbstractCollection.retainAll(null) génèrent désormais toujours une NullPointerException . Auparavant, l'NullPointerException n'était pas généré lorsque la collection était vide.
Ce changement rend le comportement cohérent avec la documentation.
|
Changements de comportement: gestion des collections |
NullPointerException approprié à partir de Currency.getDisplayName(null)
|
L'appel de Currency.getDisplayName(null) génère une exception NullPointerException .
|
Modifications de comportement: paramètres régionaux et internationalisation |
Pour obtenir une liste plus complète des modifications de comportement dans Android 8.0 (niveau d'API 26), consultez également la page Changements de comportement dans Android 8.0.
Mettre à jour votre version cible et utiliser les fonctionnalités d'Android 8.0
Cette section explique comment activer la compatibilité complète avec Android 8.0 (niveau d'API 26) en mettant à jour votre targetSdkVersion
vers la version 26 et en ajoutant de nouvelles fonctionnalités disponibles dans Android 8.0.
En plus de vous proposer de nouvelles API, Android 8.0 introduit des modifications de comportement lorsque vous mettez à jour votre targetSdkVersion
vers la version 26. Étant donné que certains changements de comportement peuvent nécessiter des modifications de code pour éviter tout dysfonctionnement, vous devez d'abord comprendre en quoi votre application peut être affectée lorsque vous modifiez le targetSdkVersion
en examinant toutes les modifications de comportement pour les applications ciblant Android 8.0.
Remarque:Les étapes décrites ci-dessus pour assurer la compatibilité de la plate-forme sont obligatoires pour cibler votre application sur Android 8.0. Veillez donc à les effectuer en premier.
Obtenir le SDK Android 8.0
Vous pouvez obtenir les packages SDK pour compiler votre application avec Android 8.0 (niveau d'API 26) à l'aide de la dernière version d'Android Studio (Android Studio 3.0 ou version ultérieure est recommandé). Android Studio 3.0 ou version ultérieure inclut des outils qui vous aideront à utiliser les fonctionnalités d'Android 8.0, telles que les icônes adaptatives et les polices téléchargeables. Si vous n'avez pas encore besoin de ces fonctionnalités, vous pouvez utiliser la version stable d'Android Studio 2.3.3 pour compiler votre application avec Android 8.0 et utiliser les nouvelles API.
Pour configurer l'une ou l'autre des versions d'Android Studio, procédez comme suit:
- Lancez Android Studio et ouvrez SDK Manager en cliquant sur Tools > SDK Manager (Outils > SDK Manager).
- Dans l'onglet SDK Platforms (Plates-formes SDK), cochez Show Package Details (Afficher les détails du package). Sous Preview d'Android 8.0, vérifiez les points suivants :
- Plate-forme SDK Android 26
- Image système des API Google Intel x86 Atom (obligatoire uniquement pour l'émulateur)
- Accédez à l'onglet SDK Tools (Outils du SDK) et cochez toutes les cases pour lesquelles des mises à jour sont disponibles (cliquez sur chaque case à cocher contenant un tiret ). Cela doit inclure les dernières versions des éléments suivants, qui sont obligatoires :
- SDK Build-Tools 26.0.0 pour Android
- Android SDK Platform-Tools 26.0.0
- Android Emulator 26.0.0
- Cliquez sur OK pour installer tous les packages de SDK sélectionnés.
Vous êtes maintenant prêt à commencer à utiliser Android 8.0.
Mettre à jour la configuration de compilation
Mettez à jour compileSdkVersion
, targetSdkVersion
et la version de la bibliothèque d'assistance avec les dernières révisions disponibles, par exemple:
android { compileSdkVersion 26 defaultConfig { targetSdkVersion 26 } ... } dependencies { compile 'com.android.support:appcompat-v7:26.0.0' } // REQUIRED: Google's new Maven repo is required for the latest // support library that is compatible with Android 8.0 repositories { google() // If you're using a version of Gradle lower than 4.1, you must instead use: // maven { // url 'https://maven.google.com' // } }
Supprimer les broadcast receivers de votre fichier manifeste
Étant donné qu'Android 8.0 (niveau d'API 26) introduit de nouvelles limites pour les broadcast receivers, vous devez supprimer tous les broadcast receivers enregistrés pour les intents de diffusion implicites. Les laisser en place n'interrompt pas votre application au moment de la compilation ou de l'exécution, mais elles n'ont aucun effet lorsque votre application s'exécute sous Android 8.0.
Les diffusions auxquelles seule votre application peut répondre (intents de diffusion explicites et diffusions envoyées spécifiquement au nom de package de votre application) continuent de fonctionner de la même manière sur Android 8.0.
Il existe des exceptions à cette nouvelle restriction. Pour obtenir la liste des diffusions implicites qui fonctionnent toujours dans les applications ciblant Android 8.0, consultez la section Exceptions de diffusion implicite.
Tester votre application Android 8.0
Une fois les préparations ci-dessus terminées, vous pouvez créer votre application, puis la tester plus en détail pour vous assurer qu'elle fonctionne correctement lorsque vous ciblez Android 8.0 (niveau d'API 26). C'est un autre bon moment pour consulter les consignes fondamentales relatives à la qualité des applications et les bonnes pratiques de test.
Lorsque vous compilez votre application avec targetSdkVersion
défini sur 26, vous devez prendre en compte des modifications spécifiques de la plate-forme. Certaines de ces modifications peuvent avoir un impact significatif sur le comportement de votre application ou même l'empêcher de fonctionner, même si vous n'implémentez pas de nouvelles fonctionnalités dans Android 8.0.
Le tableau 2 liste ces modifications et fournit des liens vers des informations supplémentaires.
Modifier | Résumé | Autres références |
---|---|---|
Confidentialité | Android 8.0 (niveau d'API 26) n'est pas compatible avec l'utilisation des propriétés système net.dns1, net.dns2, net.dns3 ou net.dns4. | Modifications de comportement : confidentialité |
Segments en lecture et exécutables appliqués | Pour les bibliothèques natives, Android 8.0 (niveau d'API 26) applique la règle selon laquelle les données ne doivent pas être exécutables et que le code ne doit pas être accessible en écriture. | Changements de comportement : Bibliothèques natives |
Validation de l'en-tête et des sections ELF | L'éditeur de liens dynamique vérifie davantage de valeurs dans les en-têtes et les en-têtes de section ELF, et échoue si elles ne sont pas valides. | Modifications de comportement : bibliothèques natives |
Notifications | Les applications ciblant la version Android 8.0 (niveau d'API 26) du SDK doivent implémenter un ou plusieurs canaux de notification pour envoyer des notifications aux utilisateurs. | Présentation de l'API : Notifications |
La méthode List.sort()
|
Il est possible que les implémentations de cette méthode n'appellent plus Collections.sort() , ou votre application générera une exception en raison d'un dépassement de pile.
|
Modifications de comportement : gestion de la collecte |
La méthode Collections.sort()
|
Dans les implémentations de liste, Collections.sort() génère désormais une exception ConcurrentModificationException .
|
Modifications de comportement: gestion des collections |
Pour obtenir une liste plus complète des modifications de comportement dans Android 8.0 (niveau d'API 26), consultez la page Changements de comportement dans Android 8.0.
Pour explorer les nouvelles fonctionnalités et API disponibles avec Android 8.0 (niveau d'API 26), consultez Fonctionnalités et API d'Android 8.0.