Changements de comportement : toutes les applications

La plate-forme Android 11 apporte des modifications de comportement qui peuvent affecter votre application. Les changements de comportement suivants 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 d'accès à 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 de 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 des fenêtres d'alerte système:certaines classes d'applications se voient automatiquement accorder l'autorisation SYSTEM_ALERT_WINDOW sur demande. En outre, 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 SIM installée sur l'appareil, utilisez plutôt la méthode getSubscriptionId(). L'ID d'abonnement fournit une valeur d'indice (commençant à 1) pour 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. Cette exception ne concerne que le système de notifications d'exposition, car 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, toutes les autres applications ne sont toujours 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 le SSLEngine de Conscrypt.

Allocateur renforcé Scudo

Android 11 utilise l'Allocateur renforcé Scudo en interne pour traiter les allocations de segments de mémoire. Scudo est capable de détecter et de limiter 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 sur le dépannage de Scudo.

Statistiques sur l'utilisation des applis

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 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é 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 de 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 une facturation à l'usage pour vérifier que votre application réagit correctement aux changements d'état de NET_CAPABILITY_TEMPORARILY_NOT_METERED.

Performances et débogage

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

Android 11 offre une assistance au débogage pour permettre aux applications d'identifier les appels potentiels d'API JobScheduler 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 débit renvoient RESULT_FAILURE. Les limites sont définies de sorte que les cas d'utilisation légitimes ne soient pas affectés.

Outil de nettoyage des descripteurs de fichier (fdsan)

Android 10 a introduit fdsan (fichier désinfectant pour le 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 pour fdsan change dans Android 11. Mise à jour de fdsan, qui s'interrompt désormais dès qu'une erreur est détectée. Le comportement précédent consistait à enregistrer un avertissement et à continuer. Si vous constatez des plantages dus à fdsan dans votre application, consultez le 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'une méthode ou d'un champ 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 des interfaces 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 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 dépendaient auparavant de 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.

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 n'est pas propriétaire de votre application.

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...

Charger la bibliothèque ICU commune avec un chemin d'accès 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.

À la place, pour charger la bibliothèque, utilisez son nom comme nom de fichier, par exemple dlopen("libicuuc.so", ...).