La plate-forme Android 11 apporte des modifications de comportement susceptibles d'affecter votre application. Les modifications de comportement suivantes s'appliquent à toutes les applications lorsqu'elles s'exécutent sur Android 11, peu importe la targetSdkVersion
. Vous devez tester votre application, puis la modifier si nécessaire afin de prendre en charge ces modifications, le cas échéant.
Veillez également à consulter la liste des modifications de comportement qui n'affectent que les applications ciblant Android 11.
Confidentialité
Android 11 introduit des modifications et des restrictions visant à améliorer la confidentialité des utilisateurs, y compris les suivantes:
- Autorisations ponctuelles:permet aux utilisateurs d'accorder un accès plus temporaire aux autorisations d'accéder à la position, au micro et à la caméra.
- Visibilité de la boîte de dialogue d'autorisation:les refus répétés d'une autorisation impliquent l'option "Ne plus demander".
- Audit des accès aux données:obtenez des insights sur les endroits où votre application accède à des données privées, à la fois dans le code de votre application et dans celui des bibliothèques dépendantes.
- Autorisations de fenêtre d'alerte système:certaines classes d'applications reçoivent automatiquement l'autorisation
SYSTEM_ALERT_WINDOW
sur demande. De plus, les intents qui incluent l'action d'intentACTION_MANAGE_OVERLAY_PERMISSION
redirigent toujours les utilisateurs vers un écran dans les paramètres système. - Identifiants SIM permanents:sur Android 11 et versions ultérieures, l'accès aux ICCID non réinitialisables via la méthode
getIccId()
est limité. La méthode renvoie une chaîne vide non nulle. Pour identifier de manière unique une carte SIM installée sur l'appareil, utilisez plutôt la méthodegetSubscriptionId()
. L'ID d'abonnement fournit une valeur d'index (à partir de 1) pour identifier de manière unique les SIM installées, y compris les SIM physiques et électroniques. La valeur de cet identifiant est stable pour une carte SIM donnée, sauf si l'appareil est réinitialisé en usine.
Pour en savoir plus, consultez la page Confidentialité.
Notifications d'exposition
Android 11 met à jour la plate-forme en tenant compte du système de notifications d'exposition. Les utilisateurs peuvent désormais exécuter des applications de notifications d'exposition sur Android 11 sans avoir à activer le paramètre de localisation de l'appareil. Il s'agit d'une exception pour le système de notifications d'exposition uniquement, car il a été conçu de manière à ce que les applications qui l'utilisent ne puissent pas déduire la position de l'appareil via la recherche Bluetooth.
Pour protéger la confidentialité des utilisateurs, toutes les autres applications ne sont toujours pas autorisées à effectuer de balayage Bluetooth, sauf si le paramètre de localisation de l'appareil est activé et que l'utilisateur leur a accordé l'autorisation d'accéder à la position. Pour en savoir plus, consultez notre post Informations sur les notifications d'exposition.
Sécurité
Les sockets SSL utilisent le moteur SSL Conscrypt par défaut
L'implémentation SSLSocket
par défaut d'Android est basée sur Conscrypt.
Depuis Android 11, cette implémentation est basée en interne sur SSLEngine
de Conscrypt.
Allocator renforcé Scudo
Android 11 utilise l'allocateur renforcé Scudo en interne pour gérer les allocations de tas. Scudo est capable de détecter et d'atténuer certains types de violations de la sécurité de la mémoire. Si vous constatez des plantages liés à Scudo (par exemple, Scudo ERROR:
) dans les rapports d'erreur natifs, consultez la documentation de dépannage de Scudo.
Statistiques d'utilisation des applications
Pour mieux protéger les utilisateurs, Android 11 stocke les statistiques d'utilisation des applications de chaque utilisateur dans un espace de stockage chiffré par identifiant. Par conséquent, ni le système ni aucune application ne peuvent accéder à ces données, sauf si isUserUnlocked()
renvoie true
, ce qui se produit après l'un des événements suivants:
- L'utilisateur déverrouille son appareil pour la première fois après le démarrage du système.
- L'utilisateur passe à son compte sur l'appareil.
Si votre application se lie déjà à une instance de UsageStatsManager
, vérifiez que vous appelez des méthodes sur cet objet après que l'utilisateur a déverrouillé son appareil.
Sinon, l'API renvoie désormais des valeurs nulles ou vides.
Compatibilité de l'émulateur avec la 5G
Android 11 ajoute des API 5G pour permettre à vos applications d'ajouter des fonctionnalités de pointe. Pour tester les fonctionnalités au fur et à mesure que vous les ajoutez, vous pouvez utiliser les nouvelles fonctionnalités de l'émulateur du SDK Android. Cette nouvelle fonctionnalité a été ajoutée dans la version 30.0.22 de l'émulateur. Si vous sélectionnez le paramètre de réseau 5G, TelephonyDisplayInfo
est défini sur OVERRIDE_NETWORK_TYPE_NR_NSA
, la bande passante estimée est modifiée et vous pouvez définir la facturation pour vérifier que votre application répond de manière appropriée aux modifications de l'état de NET_CAPABILITY_TEMPORARILY_NOT_METERED
.
Performances et débogage
L'appel d'API JobScheduler limite le débogage
Android 11 propose une fonctionnalité de débogage pour les applications afin d'identifier les invocations d'API JobScheduler
potentielles qui ont dépassé certaines limites de débit.
Les développeurs peuvent utiliser cette fonctionnalité pour identifier d'éventuels problèmes de performances. Pour les applications dont l'attribut de manifeste debuggable
est défini sur "true", les invocations d'API JobScheduler
dépassant les limites de débit renvoient RESULT_FAILURE
.
Les limites sont définies de sorte que les cas d'utilisation légitimes ne soient pas affectés.
Désinfectant de descripteur de fichier (fdsan)
Android 10 a introduit fdsan
(sanitizer de descripteur de fichier).
fdsan
détecte une mauvaise gestion de la propriété du descripteur de fichier, comme l'utilisation après fermeture et la double fermeture. Le mode par défaut de fdsan
change dans Android 11. fdsan
s'arrête désormais lorsqu'une erreur est détectée. Le comportement précédent consistait à enregistrer un avertissement et à continuer. Si des plantages se produisent en raison de fdsan
dans votre application, consultez fdsan documentation
.
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.
Suppression de la bibliothèque partagée Maps v1
La version 1 de la bibliothèque partagée Maps a été complètement supprimée dans Android 11. Cette bibliothèque était auparavant obsolète et a cessé de fonctionner pour les applications dans Android 10. Les applications qui s'appuyaient auparavant sur cette bibliothèque partagée pour les appareils équipés d'Android 9 (niveau d'API 28) ou version antérieure doivent utiliser le SDK Maps pour Android à la place.
Interaction avec d'autres applications
Partager des URI de contenu
Si votre application partage un URI de contenu avec une autre application, l'intent doit accorder des autorisations d'accès à l'URI en définissant au moins l'un des indicateurs d'intent suivants : FLAG_GRANT_READ_URI_PERMISSION
et FLAG_GRANT_WRITE_URI_PERMISSION
.
De cette manière, si l'autre application cible Android 11, elle peut toujours accéder à l'URI du contenu. Votre application doit inclure les indicateurs d'intent, même lorsque l'URI de contenu est associé à un fournisseur de contenu qui ne lui appartient pas.
Si votre application est propriétaire du fournisseur de contenu associé à l'URI de contenu, vérifiez que le fournisseur de contenu n'est pas exporté. Nous vous recommandons déjà de suivre cette bonne pratique de sécurité.
Chargement de la bibliothèque
Charger la bibliothèque commune ICU avec un chemin absolu
Les applications ciblant l'API 28 ou version antérieure ne peuvent pas utiliser dlopen(3)
pour charger libicuuc
avec le chemin absolu "/system/lib/libicuuc.so". Pour ces applications, dlopen("/system/lib/libicuuc.so", ...)
renvoie un gestionnaire nul.
Pour charger la bibliothèque, veuillez utiliser le nom de la bibliothèque comme nom de fichier, par exemple dlopen("libicuuc.so", ...)
.