Effectuer une migration vers Android 8.0

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

  1. 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 peuvent être nécessaires.

  2. 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, passez à la version 26 de targetSdkVersion, vérifiez que l'application continue de fonctionner comme prévu, puis commencez à utiliser de nouvelles API.

Assurer la compatibilité avec Android 8.0

L'objectif est de s'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 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 8.0 étape par étape

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

  • Si vous disposez d'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. Elle est répertoriée dans SDK Manager sous Android 8.0 sous le nom Google APIs Intel x86 Atom System Image (Image système des API Google Intel x86 Atom).

    Remarque:L'image système Android 8.0 peut être téléchargée à 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, le test de compatibilité avec Android 8.0 (niveau d'API 26) 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 8.0 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 8.0.

Modifier Résumé Autres références
Moins de mises à jour de la position en arrière-plan Si votre application reçoit des notifications de position de la part 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 d'arrière-plan ne peut pas recevoir de mises à jour de la position plus de plusieurs fois par heure. Toutefois, lorsque votre application est au premier plan, le taux de mise à jour de la position reste le même. Limites de localisation en arrière-plan
net.hostname ne sont plus acceptés L'interrogation de la propriété système net.hostname produit un résultat nul. Aucune
Nouvelle exception pour send(DatagramPacket) La méthode send(DatagramPacket) génère une erreur SocketException si la méthode connect(InetAddress, int) précédemment exécutée échoue. Changements de comportement: connectivité réseau et HTTP(S)
NullPointerException des méthodes AbstractCollection appropriées AbstractCollection.removeAll(null) et AbstractCollection.retainAll(null) génèrent désormais toujours une NullPointerException. Auparavant, NullPointerException n'était pas généré lorsque la collection était vide. Cette modification rend le comportement cohérent avec la documentation. Changements de comportement: gestion de la collection
NullPointerException appropriée de Currency.getDisplayName(null) L'appel de Currency.getDisplayName(null) génère une erreur NullPointerException. Changements de comportement: paramètres régionaux et internationalisation

Pour obtenir une liste plus complète des changements de comportement dans Android 8.0 (niveau d'API 26), consultez également Changements de comportement d'Android 8.0.

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

Cette section explique comment assurer une compatibilité totale avec Android 8.0 (niveau d'API 26) en passant à la version 26 de targetSdkVersion 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 changements de comportement lorsque vous mettez à jour votre targetSdkVersion vers la version 26. É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 le targetSdkVersion en examinant toutes les modifications de comportement pour les applications ciblant Android 8.0.

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 8.0. Assurez-vous donc d'effectuer ces étapes au préalable.

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

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 (nous recommandons l'utilisation d'Android Studio 3.0 ou version ultérieure). Android Studio 3.0 et versions ultérieures incluent des outils pour vous aider à 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 créer votre application avec Android 8.0 et utiliser les nouvelles API.

Pour configurer les deux versions d'Android Studio, procédez comme suit:

  1. Lancez Android Studio et ouvrez SDK Manager en cliquant sur Tools > SDK Manager (Outils > SDK Manager).
  2. Dans l'onglet SDK Platforms (Plates-formes SDK), cochez Show Package Details (Afficher les détails du package). Sous Android 8.0 Preview (Preview Android 8.0), vérifiez les points suivants :
    • Android SDK Platform 26
    • Image système Intel x86 Atom des API Google (uniquement pour l'émulateur)
  3. Passez à l'onglet SDK Tools et cochez tous les éléments pour lesquels des mises à jour sont disponibles (cochez chaque case affichant un tiret ). Cela doit inclure les dernières versions requises des éléments suivants :
    • SDK Build-Tools pour Android 26.0.0
    • SDK Platform-Tools 26.0.0 pour Android
    • Android Emulator 26.0.0
  4. Cliquez sur OK pour installer tous les packages SDK sélectionnés.

Vous pouvez maintenant commencer à créer des applications avec Android 8.0.

Mettre à jour votre configuration de compilation

Mettez à jour compileSdkVersion, targetSdkVersion et la version de la bibliothèque Support vers 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'interrompent pas votre application au moment de la compilation ni de l'exécution, mais elles n'ont aucun effet lorsque votre application s'exécute sous Android 8.0.

Les annonces auxquelles seule votre application peut répondre (les intents de diffusion explicites et les annonces envoyées spécifiquement au nom du 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 annonces implicites qui fonctionnent toujours dans les applications ciblant Android 8.0, consultez Exceptions de diffusion implicite.

Tester votre application Android 8.0

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 8.0 (niveau d'API 26). 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 26, 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 8.0.

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 26.

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. Changements de comportement : confidentialité
Activation des segments accessibles en écriture et exécutables 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 le code ne doit pas être accessible en écriture. Changements de comportement : bibliothèques natives
Validation des en-têtes et des sections ELF Le linker dynamique vérifie d'autres valeurs dans l'en-tête et les en-têtes de section ELF, et échoue si elles ne sont pas valides. Changements 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 publier des notifications aux utilisateurs. Présentation de l'API : Notifications
La méthode List.sort() Les implémentations de cette méthode risquent de ne plus appeler Collections.sort(), sinon votre application générera une exception en raison d'un dépassement de pile. Changements de comportement : gestion de la collection
La méthode Collections.sort() Dans les implémentations de liste, Collections.sort() génère désormais une ConcurrentModificationException. Changements de comportement: gestion de la collection

Pour obtenir une liste plus complète des changements de comportement dans Android 8.0 (niveau d'API 26), consultez Changements de comportement d'Android 8.0.

Pour découvrir les nouvelles fonctionnalités et API disponibles avec Android 8.0 (niveau d'API 26), consultez Fonctionnalités et API d'Android 8.0.