Android 8.0 (niveau d'API 26) introduit des changements de comportement, ainsi que de nouvelles fonctionnalités et API qui dont vous pouvez profiter dans vos applications. Ce document vous donne un aperçu de la procédure de migration vos applications vers Android 8.0 et ce, 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 et ne modifiez pas le
targetSdkVersion
de votre application, mais des modifications mineures peut être nécessaire. - Mettre à jour votre version cible et utiliser les fonctionnalités d'Android 8.0
Lorsque vous serez prêt à profiter des nouvelles fonctionnalités la plate-forme, mettez à jour votre
targetSdkVersion
sur 26, vérifiez que l'application continue fonctionner comme prévu, puis commencer à utiliser de nouvelles API.
Assurer la compatibilité avec Android 8.0
L'objectif est de s'assurer que votre application existante fonctionne en l'état sur Android 8.0.
(niveau d'API 26). Étant donné que certaines modifications de la plate-forme
peuvent affecter le comportement de votre appli,
des ajustements peuvent s'avérer nécessaires, mais vous n'avez pas besoin d'utiliser de nouvelles API ni
modifiez votre targetSdkVersion
.
Préparer un appareil équipé d'Android 8.0
- Si vous avez un appareil compatible (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P ou Nexus) , par exemple), suivez le instructions pour flasher votre appareil.
- Vous pouvez également télécharger l'image système Android 8.0 pour Android Emulator. Il est répertorié dans
SDK Manager sous
Android 8.0 en tant qu'image système des API Google Intel x86 Atom.
Remarque:L'image système Android 8.0 peut être téléchargée à partir de 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é
Test de la compatibilité avec Android 8.0 (niveau d'API 26) dans la plupart des cas implique les mêmes types de tests que ceux que vous effectuez lorsque vous préparez le lancement de votre application. C'est le moment de consulter les consignes fondamentales relatives à la qualité des applications et les bonnes pratiques de test.
Cependant, il y a un autre aspect aux tests: Android 8.0 introduit des modifications dans le
plate-forme pouvant affecter le comportement de votre application ou l'endommager complètement, même si vous ne modifiez pas
votre targetSdkVersion
. C'est pourquoi il est important que vous examiniez les principaux changements
dans le tableau 1 et testez les correctifs que vous avez mis en œuvre pour les adapter aux modifications.
Tableau 1. Principales modifications affectant toutes les applications fonctionnant sur les appareils Android 8.0.
Modifier | Résumé | Autres références |
---|---|---|
Mises à jour de la position en arrière-plan moins fréquentes | Si votre application reçoit des mises à jour de la position d'un service en arrière-plan, elle reçoit moins fréquemment mises à jour sur Android 8.0 (niveau d'API 26) par rapport aux versions plus anciennes d'Android. Plus précisément, un contexte service ne peut pas recevoir de mises à jour de la position plusieurs fois par heure. Toutefois, même si votre application est exécutée au premier plan, la fréquence des mises à jour de la position reste inchangée. | <ph type="x-smartling-placeholder"></ph> Limites de localisation en arrière-plan |
net.hostname ne sont plus acceptés
|
Interroger la propriété système net.hostname produit un résultat nul.
|
Aucune |
Nouvelle exception à 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é.
|
<ph type="x-smartling-placeholder"></ph> Changements de comportement: connectivité réseau et HTTP(S) |
NullPointerException à partir de
AbstractCollection méthode
|
AbstractCollection.removeAll(null) et
AbstractCollection.retainAll(null) génère désormais systématiquement une
NullPointerException ;
Auparavant, l'NullPointerException n'était pas générée lorsque la collection était vide.
Ce changement rend le comportement cohérent avec la documentation.
|
<ph type="x-smartling-placeholder"></ph> Changements de comportement: gestion des collections |
NullPointerException à partir de
Currency.getDisplayName(null)
|
Vous appelez Currency.getDisplayName(null) ...
génère une NullPointerException .
|
<ph type="x-smartling-placeholder"></ph> Changements 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 la section Modifications du comportement sur Android 8.0.
Mettre à jour votre version cible et utiliser les fonctionnalités d'Android 8.0
Cette section explique comment activer la compatibilité totale avec Android 8.0.
(niveau d'API 26) en remplaçant targetSdkVersion
par la version 26
et de nouvelles fonctionnalités disponibles dans Android 8.0.
En plus de vous proposer de nouvelles API, Android 8.0 introduit un certain comportement
change lorsque vous mettez à jour votre targetSdkVersion
vers la version 26. Étant donné que certains comportements
peut nécessiter des modifications du code pour éviter les dysfonctionnements, vous devez d'abord comprendre comment votre application peut être
concernés lorsque vous modifiez le targetSdkVersion
en examinant toutes les modifications de comportement pour les applications ciblant Android 8.0.
Remarque:La procédure décrite ci-dessus pour Assurez-vous que la compatibilité avec les plates-formes est une condition préalable pour cibler Android 8.0 avec votre application, commencez par suivre ces étapes.
Obtenir le SDK Android 8.0
Vous pouvez obtenir les packages SDK pour créer votre application avec Android 8.0. (niveau d'API 26) en utilisant la dernière version Android Studio (Android Studio 3.0 ou version ultérieure est recommandé). Android Studio 3.0 et versions ultérieures incluent des outils pour vous aider à utiliser les fonctionnalités d'Android 8.0. comme les icônes adaptatives et 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 créer 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 Outils > SDK Manager.
- Dans l'onglet SDK Platforms (Plates-formes SDK), cochez la case Show Package Details (Afficher les détails du package). En dessous
Dans la Preview d'Android 8.0, vérifiez les points suivants:
<ph type="x-smartling-placeholder">
- </ph>
- Android SDK Platform 26
- Image système des API Google Intel x86 Atom (obligatoire uniquement pour l'émulateur)
- Passez à l'onglet SDK Tools et vérifiez tous les éléments pour lesquels des mises à jour sont disponibles (cliquez sur
chaque case à cocher qui affiche un tiret
). Cela doit inclure la dernière version des éléments suivants requises: <ph type="x-smartling-placeholder">
- </ph>
- 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 SDK sélectionnés.
Vous êtes maintenant prêt à commencer à utiliser Android 8.0.
Mettre à jour votre configuration de compilation
Mettez à jour compileSdkVersion
,
targetSdkVersion
et la version la plus récente de la bibliothèque Support
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
Android 8.0 (niveau d'API 26) introduit de nouvelles limites pour les broadcast receivers, vous devez supprimer tous les broadcast receivers enregistré pour des intents de diffusion implicites. Les laisser en place n'a pas d'impact sur 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.
Diffusions auxquelles seule votre application peut répondre : intents de diffusion explicites des annonces envoyées au nom de package de votre application, ce qui continue à fonctionner Android 8.0
Il existe des exceptions à cette nouvelle restriction. Pour une Pour lister les 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éparatifs ci-dessus terminés, vous pouvez créer votre application, puis la tester pour vous assurer qu'elle fonctionne correctement lorsque vous ciblez Android 8.0 (niveau d'API 26). C'est un autre bon moment pour revoir Application principale Consignes relatives à la qualité et Meilleure Pratiques de test.
Lorsque vous compilez votre application avec targetSdkVersion
défini sur 26,
vous devez être conscient
des changements spécifiques de la plateforme. Certaines de
ces modifications peuvent avoir un impact significatif
sur le comportement de votre application ou même
interrompre complètement votre application, même si vous ne mettez pas en œuvre
fonctionnalités d'Android 8.0.
Le tableau 2 présente la liste de ces modifications, avec des liens vers plus d'informations.
Tableau 2. Principales modifications affectant les applications
lorsque targetSdkVersion
est défini sur 26.
Modifier | Résumé | Autres références |
---|---|---|
Confidentialité | Android 8.0 (niveau d'API 26) ne prend pas en charge l'utilisation du les propriétés système net.dns1, net.dns2, net.dns3 ou net.dns4. | Changements de comportement: Confidentialité |
Application des segments en écriture et exécutables | Pour les bibliothèques natives, Android 8.0 (niveau d'API 26) applique la règle qui les données ne doivent pas être exécutables et le code ne doit pas être accessible en écriture. | Changements de comportement: Bibliothèques natives |
Validation de l'en-tête et de la section ELF | L'éditeur de liens dynamique vérifie plus de valeurs dans l'en-tête ELF et les en-têtes de section, et échoue s'ils ne sont pas valides. | Changements de comportement: Bibliothèques natives |
Notifications | Applications ciblant la version Android 8.0 (niveau d'API 26) du SDK doit implémenter un ou plusieurs canaux de notification pour publier 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.
|
Changements de comportement: Gestion des collections |
La méthode Collections.sort()
|
Dans les implémentations de liste, Collections.sort() génère désormais une
ConcurrentModificationException
|
Comportement Modifications apportées à la gestion des collections |
Pour obtenir une liste plus complète des modifications de comportement sous Android 8.0 (niveau d'API 26), consultez la section Modifications du comportement sur 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 Android 8.0