Changements de comportement : toutes les applications

La plate-forme Android 11 inclut des modifications de comportement pouvant affecter votre application. Les modifications de comportement suivantes s'appliquent à toutes les applications lorsqu'elles s'exécutent sur Android 11, quel que soit le 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 pour améliorer la confidentialité des utilisateurs, y compris les suivantes:

  • Autorisations ponctuelles:permet aux utilisateurs d'accorder un accès plus temporaire aux autorisations liées à 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: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 la fenêtre d'alerte système:l'autorisation SYSTEM_ALERT_WINDOW est automatiquement accordée à certaines classes d'applications sur demande. De plus, les intents qui incluent l'action d'intent ACTION_MANAGE_OVERLAY_PERMISSION redirigent toujours les utilisateurs vers un écran dans les paramètres système.
  • Identifiants SIM permanents:sur Android 11 ou version ultérieure, l'accès aux ICCID non réinitialisables via la méthode getIccId() est limité. La méthode renvoie une chaîne vide et non nulle. Pour identifier de manière unique une carte SIM installée sur l'appareil, utilisez plutôt la méthode getSubscriptionId(). L'ID d'abonnement fournit une valeur d'index (commençant à 1) permettant d'identifier de manière unique les cartes SIM installées, y compris physiques et électroniques. La valeur de cet identifiant est stable pour une carte SIM donnée, sauf si la configuration d'usine de l'appareil est rétablie.

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 concernant le système de notifications d'exposition uniquement, étant donné qu'il a été conçu de telle sorte que les applications qui l'utilisent ne peuvent pas déduire la position de l'appareil via la recherche Bluetooth.

Pour protéger la confidentialité des utilisateurs, il est toujours interdit d'effectuer une recherche Bluetooth avec toutes les autres applications, 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 sur les nouveautés concernant les notifications d'exposition.

Sécurité

Les sockets SSL utilisent le moteur SSL Conscrypt par défaut

L'implémentation par défaut de SSLSocket d'Android est basée sur Conscrypt. Depuis Android 11, cette implémentation est basée en interne sur le SSLEngine de Conscrypt.

Allocateur renforcé Scudo

Android 11 utilise l'outil d'allocation renforcé Scudo en interne pour traiter les allocations de segments de mémoire. Scudo est capable de détecter et d'atténuer certains types de violations de sécurité de la mémoire. Si des plantages liés à Scudo (par exemple, Scudo ERROR:) s'affichent dans les rapports d'erreur natifs, consultez la documentation de dépannage de Scudo.

Statistiques d'utilisation des applis

Pour mieux protéger les utilisateurs, Android 11 stocke les statistiques d'utilisation des applications de chaque utilisateur dans un stockage chiffré par identifiants. Par conséquent, ni le système, ni les applications 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 bascule sur 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 une fois que l'utilisateur a déverrouillé son appareil. Sinon, l'API renvoie désormais des valeurs nulles ou vides.

Compatibilité des émulateurs 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 changements de l'état NET_CAPABILITY_TEMPORARILY_NOT_METERED.

Performances et débogage

Débogage des limites d'appel de l'API JobScheduler

Android 11 propose une assistance au 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 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.

Nettoyage de descripteur de fichier (fdsan)

Android 10 a introduit fdsan (file Descriptor Sanitizer). fdsan détecte les erreurs de gestion de la propriété du descripteur de fichier, telles que "use-after-close" et "double-close". Le mode par défaut de fdsan change dans Android 11. fdsan annule désormais lors de la détection d'une erreur. Auparavant, un avertissement était consigné et continuait. Si vous constatez des plantages dus à 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. Toutefois, 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 de manière générale, consultez la section Restrictions concernant les interfaces non SDK.

Bibliothèque partagée de Maps v1 supprimée

La version 1 de la bibliothèque partagée Maps a été complètement supprimée d'Android 11. Cette bibliothèque était obsolète et a cessé de fonctionner pour les applications sous Android 10. Les applications qui utilisaient auparavant 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 du contenu. Votre application doit inclure les indicateurs d'intent même si l'URI de contenu est associé à un fournisseur de contenu qui n'est pas propriétaire de votre application.

Si votre application possède le fournisseur de contenu associé à l'URI de contenu, vérifiez que le fournisseur de contenu n'est pas exporté. Nous vous recommandons déjà cette bonne pratique de sécurité.

Chargement de la bibliothèque...

Chargement de la bibliothèque commune de la bibliothèque ICU avec un chemin absolu

Les applications ciblant l'API 28 ou une 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 handle nul.

Pour charger la bibliothèque, veuillez plutôt utiliser son nom comme nom de fichier, par exemple dlopen("libicuuc.so", ...).