Changements de comportement : toutes les applications

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'intent ACTION_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 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 (à 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 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'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 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 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 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 à consigner 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. 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 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 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. 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à 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 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 gestionnaire nul.

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