Comme les versions précédentes, Android 11 inclut des modifications de comportement qui peuvent
affecter votre application. Les modifications de comportement suivantes s'appliquent exclusivement aux applications
ciblant Android 11 ou une version ultérieure. Si votre application définit
targetSdkVersion sur 30, vous devez la modifier pour
qu'elle prenne en charge ces comportements de manière appropriée, 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 pour améliorer la confidentialité des utilisateurs, y compris les suivantes :
- Application de l'espace de stockage cloisonné: l'accès aux répertoires de stockage externe est limité à un répertoire spécifique à l'application et à des types de contenus multimédias spécifiques créés par l'application.
- Réinitialisation automatique des autorisations: si les utilisateurs n'ont pas interagi avec une application depuis quelques mois, le système réinitialise automatiquement les autorisations sensibles de l'application.
- Accès aux données de localisation en arrière-plan : les utilisateurs doivent être redirigés vers les paramètres système pour accorder l'autorisation d'accéder à la position en arrière-plan aux applications.
- Visibilité des packages: lorsqu'une application demande la liste des applications installées sur l'appareil, la liste renvoyée est filtrée.
Pour en savoir plus, consultez la page Confidentialité.
Sécurité
Ajout de tags aux pointeurs de tas
Détails de la modification
Nom de la modification : NATIVE_HEAP_POINTER_TAGGING
ID de la modification : 135754954
Comment 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_NAMEadb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
Pour en savoir plus sur le framework de compatibilité et l'activation/la désactivation des modifications, consultez Tester et déboguer les modifications de comportement de la plate-forme dans votre application.
Les pointeurs de tas ont désormais un tag non nul dans l'octet le plus significatif (MSB). Les applications qui utilisent des pointeurs de manière incorrecte, y compris celles qui modifient le MSB, peuvent désormais planter ou rencontrer d'autres problèmes. Cette modification est nécessaire pour prendre en charge le matériel futur avec l'extension de taggage de la mémoire (MTE) ARM activée. Pour en savoir plus, consultez Pointeurs avec tag.
Pour désactiver cette fonctionnalité, consultez la documentation du fichier manifeste allowNativeHeapPointerTagging.
Mises à jour des toasts
Les toasts personnalisés en arrière-plan sont bloqués
Pour des raisons de sécurité et pour maintenir 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 ciblant 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 quand même de publier un toast contenant une vue personnalisée en arrière-plan, le système n'affiche pas le message à l'utilisateur. Au lieu de cela, le système enregistre le message suivant dans logcat :
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
Rappels pour les toasts
Si vous souhaitez être averti lorsqu'un toast (texte ou personnalisé) apparaît ou disparaît,
utilisez la
addCallback()
méthode, qui a été ajoutée dans Android 11.
Modifications apportées à l'API des toasts de texte
Les applications ciblant Android 11 ou une version ultérieure présentent les effets secondaires suivants pour les toasts de texte :
- La méthode
getView()renvoienull. - Les valeurs renvoyées par les méthodes suivantes ne reflètent pas les valeurs réelles. Vous ne devez donc pas vous y fier dans votre application :
- Les méthodes suivantes sont des no-ops. Votre application ne doit donc pas les utiliser :
Connectivité
Accès en lecture restreint à la base de données APN
Détails de la modification
Nom de la modification : APN_READING_PERMISSION_CHANGE_ID
ID de la modification : 124107808
Comment 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_NAMEadb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
Pour en savoir plus sur le framework de compatibilité et l'activation/la désactivation des modifications, consultez Tester et déboguer les modifications de comportement de la plate-forme dans votre application.
Les applications ciblant Android 11 nécessitent désormais l'
Manifest.permission.WRITE_APN_SETTINGS
autorisation privilégiée pour lire ou accéder à la base de données APN du fournisseur de Telephony. 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 ciblant
Android 11 et interagissant 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étails de la modification
Nom de la modification : REQUEST_ACCESSIBILITY_BUTTON_CHANGE
ID de la modification : 136293963
Comment 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_NAMEadb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
Pour en savoir plus sur le framework de compatibilité et l'activation/la désactivation des modifications, consultez Tester et déboguer les modifications de comportement de la plate-forme dans votre application.
À partir d'Android 11, votre service d'accessibilité ne peut pas faire
une déclaration d'exécution selon laquelle il a une association avec le bouton d'accessibilité
du système. Si vous
ajoutez AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON à la
flags propriété d'un AccessibilityServiceInfo objet, le framework ne
transmet pas les événements de rappel du bouton 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 avec
le bouton d'accessibilité. Incluez la flagRequestAccessibilityButton valeur dans
votre définition de l'
accessibilityFlags
attribut. Un emplacement courant pour le fichier de métadonnées du service d'accessibilité est
res/raw/accessibilityservice.xml.
Appareil photo
Les actions d'intent multimédia 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 :
android.media.action.VIDEO_CAPTUREandroid.media.action.IMAGE_CAPTUREandroid.media.action.IMAGE_CAPTURE_SECURE
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.
Package et installation d'applications
Fichiers de ressources compressés
Détails de la modification
Nom de la modification : RESOURCES_ARSC_COMPRESSED
ID de la modification : 132742131
Comment 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_NAMEadb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
Pour en savoir plus sur le framework de compatibilité et l'activation/la désactivation des modifications, consultez Tester et déboguer les modifications de comportement de la plate-forme dans votre application.
Les applications ciblant Android 11 (niveau d'API 30) ou une version ultérieure ne peuvent pas être installées si elles
contiennent un fichier compressé resources.arsc ou si ce fichier n'est pas aligné sur
une limite de 4 octets. Le système ne peut pas mapper ce fichier en mémoire si l'une de
ces conditions est remplie. Les tables de ressources qui ne peuvent pas être mappées en mémoire doivent
être lues dans un tampon de la 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 compressé resources.arsc, essayez d'autres
stratégies, telles que la réduction des ressources
de l'application ou d'autres méthodes pour
réduire, obscurcir et optimiser votre application.
APK Signature Scheme v2 est désormais obligatoire
Les applications ciblant Android 11 (niveau d'API 30) qui ne sont actuellement signées qu'avec APK Signature Scheme v1 doivent désormais également être signées avec APK Signature Scheme v2 ou une version ultérieure. Les utilisateurs ne peuvent pas installer ni mettre à jour les applications qui ne sont signées qu'avec APK Signature Scheme v1 sur les appareils équipés d'Android 11.
Pour vérifier que votre application est signée avec APK Signature Scheme v2 ou une 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 Firebase JobDispatcher 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 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 ciblant
Android 11 et interagissant 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étails de la modification
Nom de la modification : CALLBACK_ON_CLEAR_CHANGE
ID de la modification : 119147584
Comment 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_NAMEadb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
Pour en savoir plus sur le framework de compatibilité et l'activation/la désactivation des modifications, consultez Tester et déboguer les modifications de comportement de la plate-forme dans votre application.
Pour les applications ciblant Android 11 (niveau d'API 30), chaque fois que
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 mises à jour d'interfaces hors SDK restreintes , basées sur la collaboration avec les développeurs Android et les 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 peuvent ne pas vous affecter 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 Restrictions sur les interfaces non SDK .