Modifications de comportement: applications ciblant Android 11

Comme les versions précédentes, Android 11 apporte des modifications de comportement pouvant affecter votre application. Les modifications de comportement suivantes s'appliquent exclusivement aux applications qui ciblent Android 11 ou version ultérieure. Si votre application définit targetSdkVersion sur 30, vous devez la modifier pour qu'elle prenne en charge ces comportements, le cas échéant.

Veillez également à consulter la liste des modifications de comportement qui affectent toutes les applications exécutées sur Android 11.

Confidentialité

Android 11 introduit des modifications et des restrictions visant à améliorer la confidentialité des utilisateurs, y compris les suivantes:

Pour en savoir plus, consultez la page Confidentialité.

Sécurité

Taggage du pointeur de tas

Détail des modifications

Change Name (Nom de modification) : NATIVE_HEAP_POINTER_TAGGING

ID de modification: 135754954

Activer/Désactiver

Lorsque vous testez la compatibilité de votre application avec Android 11, vous pouvez activer ou désactiver cette modification à l'aide des commandes ADB suivantes:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

Pour en savoir plus sur le framework de compatibilité et les modifications de basculement, consultez Tester et déboguer les changements de comportement de la plate-forme dans votre application.

Les pointeurs de tas disposent désormais d'une balise non nulle dans l'octet de poids fort (MSB). Les applications qui utilisent des pointeurs de manière incorrecte, y compris celles qui modifient le bit de poids le plus élevé, peuvent désormais planter ou rencontrer d'autres problèmes. Ce changement est nécessaire pour prendre en charge les futurs matériels avec l'extension MTE (Memory Tagging Extension) ARM activée. Pour en savoir plus, consultez la section Balisage des pointeurs.

Pour désactiver cette fonctionnalité, consultez la documentation du fichier manifeste allowNativeHeapPointerTagging.

Mises à jour des toasts

Les notifications toast personnalisées en arrière-plan sont bloquées

Pour des raisons de sécurité et pour garantir une bonne expérience utilisateur, le système bloque les toasts contenant des vues personnalisées s'ils sont envoyés en arrière-plan par une application qui cible Android 11 ou une version ultérieure. Notez que les toasts de texte sont toujours autorisés. Il s'agit de toasts créés à l'aide de Toast.makeText() qui n'appellent pas setView().

Si votre application tente d'afficher un toast contenant une vue personnalisée en arrière-plan, le message ne s'affiche pas à l'utilisateur. Au lieu de cela, le système consigne le message suivant dans logcat:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

Rappels de type toast

Si vous souhaitez être averti lorsqu'un toast (texte ou personnalisé) apparaît ou disparaît, utilisez la méthode addCallback(), ajoutée dans Android 11.

Modifications apportées à l'API Toast de texte

Les applications qui ciblent Android 11 ou une version ultérieure présentent les effets secondaires suivants pour les toasts de texte:

Connectivité

Accès en lecture seule à la base de données APN

Détail des modifications

Change Name (Nom de modification) : APN_READING_PERMISSION_CHANGE_ID

ID de modification: 124107808

Activer/Désactiver

Lorsque vous testez la compatibilité de votre application avec Android 11, vous pouvez activer ou désactiver cette modification à l'aide des commandes ADB suivantes:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

Pour en savoir plus sur le framework de compatibilité et les modifications de basculement, consultez Tester et déboguer les changements de comportement de la plate-forme dans votre application.

Les applications qui ciblent Android 11 nécessitent désormais l'autorisation privilégiée Manifest.permission.WRITE_APN_SETTINGS pour lire ou accéder à la base de données APN du fournisseur de téléphonie. Toute tentative d'accès à la base de données APN sans cette autorisation génère une exception de sécurité.

Accessibilité

Déclarer l'interaction avec les moteurs de synthèse vocale dans le fichier manifeste

En raison des modifications apportées à la visibilité des packages, les applications qui ciblent Android 11 et interagissent avec un moteur de synthèse vocale doivent ajouter l'élément <queries> suivant à leurs fichiers manifestes:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Déclarer l'utilisation du bouton d'accessibilité dans le fichier de métadonnées

Détail des modifications

Change Name (Nom de modification) : REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID de modification: 136293963

Activer/Désactiver

Lorsque vous testez la compatibilité de votre application avec Android 11, vous pouvez activer ou désactiver cette modification à l'aide des commandes ADB suivantes:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

Pour en savoir plus sur le framework de compatibilité et les modifications de basculement, consultez Tester et déboguer les changements de comportement de la plate-forme dans votre application.

À partir d'Android 11, votre service d'accessibilité ne peut pas déclarer au moment de l'exécution qu'il est associé au bouton d'accessibilité du système. Si vous ajoutez AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON à la propriété flags d'un objet AccessibilityServiceInfo, le framework ne transmet pas les événements de rappel des boutons d'accessibilité à votre service.

Pour recevoir des événements de rappel d'accessibilité dans votre service d'accessibilité, utilisez votre fichier de métadonnées de service d'accessibilité pour déclarer l'association de votre service au bouton d'accessibilité. Incluez la valeur flagRequestAccessibilityButton dans votre définition de l'attribut accessibilityFlags. L'emplacement courant du fichier de métadonnées du service d'accessibilité est res/raw/accessibilityservice.xml.

Appareil photo

Les actions d'intent multimédias nécessitent l'appareil photo par défaut du système

À partir d'Android 11, seules les applications d'appareil photo système préinstallées peuvent répondre aux actions d'intent suivantes:

Si plusieurs applications d'appareil photo système préinstallées sont disponibles, le système affiche une boîte de dialogue permettant à l'utilisateur de sélectionner une application. Si vous souhaitez que votre application utilise une application d'appareil photo tierce spécifique pour capturer des images ou des vidéos en son nom, vous pouvez rendre ces intents explicites en définissant un nom de package ou un composant pour l'intent.

Emballage et installation d'applications

Fichiers de ressources compressés

Détail des modifications

Change Name (Nom de modification) : RESOURCES_ARSC_COMPRESSED

ID de modification: 132742131

Activer/Désactiver

Lorsque vous testez la compatibilité de votre application avec Android 11, vous pouvez activer ou désactiver cette modification à l'aide des commandes ADB suivantes:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

Pour en savoir plus sur le framework de compatibilité et les modifications de basculement, consultez Tester et déboguer les changements de comportement de la plate-forme dans votre application.

Les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure ne peuvent pas être installées si elles contiennent un fichier resources.arsc compressé ou si ce fichier n'est pas aligné sur une limite de 4 octets. Ce fichier ne peut pas être mappé en mémoire par le système si l'une de ces conditions est présente. Les tables de ressources qui ne peuvent pas être mappées en mémoire doivent être lues dans un tampon de RAM, ce qui entraîne une pression de mémoire inutile sur le système et une utilisation de la RAM considérablement accrue sur l'appareil.

Si vous utilisiez auparavant un fichier resources.arsc compressé, essayez plutôt d'autres stratégies, telles que la minimisation des ressources de l'application ou d'autres méthodes pour minimiser, obscurcir et optimiser votre application.

APK Signature Scheme v2 désormais obligatoire

Les applications qui ciblent Android 11 (niveau d'API 30) et qui ne sont actuellement signées qu'avec le schéma de signature APK v1 doivent désormais également être signées avec le schéma de signature APK v2 ou une version ultérieure. Les utilisateurs ne peuvent pas installer ni mettre à jour des applications signées uniquement avec le schéma de signature APK v1 sur les appareils exécutant Android 11.

Pour vérifier que votre application est signée avec le schéma de signature d'APK v2 ou version ultérieure, vous pouvez utiliser Android Studio ou l'outil apksigner sur la ligne de commande.

Firebase

Firebase JobDispatcher et GCMNetworkManager

Si votre application cible le niveau d'API 30 ou une version ultérieure, les appels d'API FirebaseJobDispatcher et GcmNetworkManager sont désactivés sur les appareils équipés d'Android 6.0 (niveau d'API 23) ou version ultérieure. Pour en savoir plus sur la migration, consultez les pages Migrer de Firebase JobDispatcher vers WorkManager et Migrer de GCMNetworkManager vers WorkManager.

Reconnaissance vocale

En raison des modifications apportées à la visibilité des packages, les applications qui ciblent Android 11 et interagissent avec un service de reconnaissance vocale doivent ajouter l'élément <queries> suivant à leurs fichiers manifestes:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

Modifications apportées aux rappels pour OnSharedPreferenceChangeListener

Détail des modifications

Change Name (Nom de modification) : CALLBACK_ON_CLEAR_CHANGE

ID de modification: 119147584

Activer/Désactiver

Lorsque vous testez la compatibilité de votre application avec Android 11, vous pouvez activer ou désactiver cette modification à l'aide des commandes ADB suivantes:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

Pour en savoir plus sur le framework de compatibilité et les modifications de basculement, consultez Tester et déboguer les changements de comportement de la plate-forme dans votre application.

Pour les applications ciblant Android 11 (niveau d'API 30), chaque fois qu'Editor.clear est appelé, un rappel est désormais effectué vers OnSharedPreferenceChangeListener.onSharedPreferenceChanged avec une clé null.

Restrictions des interfaces hors SDK

Android 11 inclut des listes à jour d'interfaces non SDK limitées grâce à la collaboration avec les développeurs Android et aux derniers tests internes. Dans la mesure du possible, nous nous assurons que des alternatives publiques sont disponibles avant de limiter les interfaces non SDK.

Si votre application ne cible pas Android 11, certaines de ces modifications ne vous affecteront peut-être pas immédiatement. Cependant, bien que vous puissiez actuellement utiliser certaines interfaces non SDK (en fonction du niveau d'API cible de votre application), l'utilisation d'un champ ou d'une méthode non SDK présente toujours un risque élevé d'endommager votre application.

Si vous n'êtes pas sûr que votre application utilise des interfaces non SDK, vous pouvez tester votre application pour le savoir. Si votre application repose sur des interfaces non SDK, vous devriez commencer à planifier une migration vers des alternatives SDK. Nous comprenons néanmoins que certaines applications ont des cas d'utilisation valides pour utiliser des interfaces non SDK. Si vous ne trouvez pas d'alternative à l'utilisation d'une interface non SDK pour une fonctionnalité de votre application, vous devriez demander une nouvelle API publique.

Pour en savoir plus sur les modifications apportées à cette version d'Android, consultez Mises à jour des restrictions d'interface non SDK dans Android 11. Pour en savoir plus sur les interfaces non SDK en général, consultez la section Restrictions concernant les interfaces non SDK.