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 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:

  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 peut être nécessaire.

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

Assurer la compatibilité étape par étape avec Android 8.0

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.

Mettre à jour la version cible et utiliser les fonctionnalités d&#39;Android 8.0 étape par étape

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:

  1. Lancez Android Studio et ouvrez SDK Manager en cliquant sur Outils > SDK Manager.
  2. 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)
  3. 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
  4. 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 liste 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é
Segments accessibles 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