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ès à la position, au micro et à l'appareil photo.
- 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 : découvrez où votre application accède à des données privées, à la fois dans son propre code et dans celui des bibliothèques dépendantes.
- Autorisations de fenêtre d'alerte système : certaines classes d'applications se voient automatiquement accorder l'autorisation
SYSTEM_ALERT_WINDOWsur demande. De plus, les intents qui incluent l'action d'intentACTION_MANAGE_OVERLAY_PERMISSIONredirigent toujours les utilisateurs vers un écran des 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 cartes SIM installées, qu'elles soient physiques ou électroniques. La valeur de cet identifiant est stable pour une carte SIM donnée, sauf si l'appareil est réinitialisé.
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 pas autorisées à effectuer une recherche 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 article 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.
Allocateur renforcé Scudo
Android 11 utilise l'allocateur renforcé Scudo en interne pour gérer les allocations de segments de mémoire. 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 de plantages natifs, consultez la documentation sur le dépannage de Scudo.
Statistiques d'utilisation de l'appli
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 identifiants. 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 est déjà liée à 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 à mesure que vous les ajoutez, vous pouvez utiliser les nouvelles fonctionnalités de l'émulateur du SDK Android. La nouvelle fonctionnalité a été ajoutée dans la version 30.0.22 de l'émulateur. La sélection du paramètre de réseau 5G définit TelephonyDisplayInfo sur OVERRIDE_NETWORK_TYPE_NR_NSA, modifie la bande passante estimée et vous permet de définir la facturation à l'usage 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
Débogage des limites d'appels d'API JobScheduler
Android 11 propose une compatibilité avec le débogage pour les applications afin d'identifier les appels d'API JobScheduler potentiels 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 fichier manifeste debuggable est défini sur "true", les appels d'API JobScheduler au-delà des limites de limitation du débit renvoient RESULT_FAILURE.
Les limites sont définies de manière à ne pas affecter les cas d'utilisation légitimes.
Nettoyeur de descripteurs de fichiers (fdsan)
Android 10 a introduit fdsan (file descriptor sanitizer).
fdsan détecte une mauvaise gestion de la propriété des descripteurs de fichiers, comme l'utilisation après fermeture et la double fermeture. Le mode par défaut de fdsan change dans Android 11. fdsan s'interrompt désormais lorsqu'une erreur est détectée. Le comportement précédent consistait à consigner un avertissement et à continuer. Si vous constatez des plantages dus à fdsan dans votre application, consultez la section 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 Restrictions concernant les interfaces non SDK.
Bibliothèque partagée Maps v1 supprimée
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 sous 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.
Ainsi, si l'autre application cible Android 11, elle peut toujours accéder à l'URI de contenu. Votre application doit inclure les indicateurs d'intent même lorsque l'URI de contenu est associé à un fournisseur de contenu qui ne vous 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 recommandons déjà cette bonne pratique de sécurité.
Chargement de la bibliothèque…
Chargement de la bibliothèque commune ICU avec un chemin absolu
Les applications ciblant le niveau d'API 28 ou inférieur 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 handle nul.
Pour charger la bibliothèque, utilisez plutôt le nom de la bibliothèque comme nom de fichier, par exemple dlopen("libicuuc.so", ...).