Modifications apportées au framework de compatibilité (Android 11)

Cette page décrit chaque modification de comportement affectant les applications qui a été ajoutée au framework de compatibilité dans Android 11 (niveau d'API 30). Utilisez cette liste conjointement avec les options pour les développeurs et les commandes ADB pour tester et déboguer votre application en vue de cibler Android 11.

ADD_CONTENT_OBSERVER_FLAGS

ID de modification: 150939131

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11, une nouvelle surcharge d'API publique onChange(boolean, Uri, int) est disponible, qui inclut un argument flags entier.

Cette nouvelle méthode est une alternative de SDK public pour les applications qui utilisent la méthode surchargée onChange() non SDK qui inclut un argument userId entier.

ADMIN_APP_PASSWORD_COMPLEXITY

ID de modification: 123562444

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications d'administration ciblant Android 11, une erreur est générée chaque fois qu'une application définit une exigence de mot de passe qui n'est pas pertinente pour la qualité du mot de passe actuellement attribué. Par exemple, lorsque la qualité du mot de passe est définie sur DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, une application ne peut pas définir de longueur minimale de mot de passe. Dans ce cas, avant d'essayer de définir la longueur minimale du mot de passe, l'application doit d'abord appeler la méthode setPasswordQuality(), puis la méthode setPasswordMinimumLength().

De plus, lorsqu'une application d'administration ciblant Android 11 réduit la qualité du mot de passe, toutes les exigences de mot de passe existantes qui ne s'appliquent plus sont réinitialisées à leurs valeurs par défaut.

APP_DATA_DIRECTORY_ISOLATION

ID de modification: 143937733

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les applications qui ciblent Android 11 ne peuvent plus accéder aux fichiers des répertoires de données privées de n'importe quelle application, quelle que soit la version de SDK cible de l'autre application.

Pour en savoir plus, consultez la section Accès aux répertoires privés.

APN_READING_PERMISSION_CHANGE_ID

ID de modification: 124107808

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11, l'accès à la base de données APN nécessite désormais l'autorisation Manifest.permission.WRITE_APN_SETTINGS.

Pour en savoir plus sur cette modification, consultez Accès en lecture limité à la base de données APN.

BACKGROUND_RATIONALE_CHANGE_ID

ID de modification: 147316723

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les applications doivent désormais fournir une justification valide chaque fois qu'elles demandent à accéder à la position de l'appareil en arrière-plan.

Pour en savoir plus sur cette modification, consultez le guide sur l'accès à la position en arrière-plan dans Android 11, qui décrit les modifications apportées à la confidentialité liées à la position dans Android 11.

CALLBACK_ON_CLEAR_CHANGE

ID de modification: 119147584

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Chaque fois que Editor.clear est appelé, un rappel est désormais effectué sur OnSharedPreferenceChangeListener.onSharedPreferenceChanged avec une clé null.

Pour en savoir plus sur ce changement, consultez la section Modifications apportées aux rappels pour OnSharedPreferenceChangeListener.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

ID de modification: 130595455

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les codes d'erreur sont désormais développés pour updateAvailableNetworks(List, Executor, Consumer) et setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer).

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

ID de modification: 148180766

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Il s'agit d'un changement subtil de comportement pour startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Avant ce changement, le système était appelé pour l'opération commutée. Après ce changement, le système sera appelé pour l'opération réellement demandée ou pour toutes les opérations commutées si aucune opération n'est spécifiée.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

ID de modification: 136219221

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11, les services de premier plan ne reçoivent les fonctionnalités de la caméra et du micro en cours d'utilisation que lorsque R.attr.foregroundServiceType est configuré en tant que ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA et ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE, respectivement, dans le fichier manifeste. Dans les versions antérieures d'Android, les services de premier plan recevaient automatiquement les fonctionnalités de la caméra et du micro.

Pour en savoir plus sur ce changement, consultez la section Types de services de premier plan dans Android 11.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

ID de modification: 128611929

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les applications ne peuvent plus publier de notifications toast personnalisées en arrière-plan. Toutefois, les applications peuvent toujours publier des toasts à l'aide de la méthode Toast.makeText(Context, CharSequence, int) et de ses variantes en arrière-plan.

Pour en savoir plus sur cette modification, consultez Les vues de notification toast personnalisées sont bloquées.

CHANGE_RESTRICT_SAW_INTENT

ID de modification: 135920175

État par défaut: cette modification ne peut pas être activée/désactivée. Il n'est enregistré que par le framework de compatibilité.

Les intents utilisant l'action android.settings.MANAGE_APP_OVERLAY_PERMISSION et le schéma URI de données package ne redirigent plus l'utilisateur vers un écran spécifique à l'application pour gérer l'autorisation associée. À la place, l'utilisateur est redirigé vers un écran où il peut gérer toutes les applications ayant demandé l'autorisation.

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

ID de modification: 147798919

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les toasts textuels sont désormais affichés par SystemUI au lieu de l'application. Cela empêche les applications de contourner les restrictions concernant la publication de toasts personnalisés en arrière-plan.

DEFAULT_SCOPED_STORAGE

ID de modification: 149924527

État par défaut: Activé pour toutes les applications.

Toutes les applications ciblant Android 11 utilisent désormais l'espace de stockage cloisonné par défaut et ne peuvent plus le désactiver.

Toutefois, vous pouvez tester votre application sans stockage ciblé, quelle que soit la version du SDK cible et les valeurs des indicateurs de fichier manifeste de votre application, en désactivant ce changement.

Pour en savoir plus sur les modifications apportées à l'espace de stockage cloisonné dans Android 11, consultez la section Espace de stockage cloisonné sur la page dédiée aux modifications apportées au stockage Android dans Android 11.

EMPTY_INTENT_ACTION_CATEGORY

ID de modification: 151163173

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11, le système génère désormais une erreur si action ou category d'un filtre d'intent est une chaîne vide. Un bug de la plate-forme avant Android 11 permettait à ce cas de passer sans générer d'erreur. Notez que cela n'inclut pas les cas où l'attribut est nul ou manquant, car cela a toujours généré une erreur.

FILTER_APPLICATION_QUERY

ID de modification: 135549675

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les applications doivent désormais déclarer les packages et les intents qu'elles prévoient d'utiliser avant de pouvoir obtenir des informations sur d'autres applications sur un appareil. Ces déclarations doivent être effectuées à l'aide de la balise <queries> dans le fichier manifeste de l'application.

Pour en savoir plus sur l'interrogation et l'interaction avec d'autres applications installées sous Android 11, consultez la page de confidentialité sur la visibilité des packages.

FORCE_ENABLE_SCOPED_STORAGE

ID de modification: Valeur: 132649864

État par défaut: Désactivé pour toutes les applications.

Toutes les applications ciblant Android 11 utilisent désormais l'espace de stockage cloisonné par défaut et ne peuvent plus le désactiver.

Toutefois, si votre application cible toujours Android 10 (niveau d'API 29) ou version antérieure, vous pouvez la tester avec l'espace de stockage cloisonné, quelle que soit la version du SDK cible et les valeurs des indicateurs de fichier manifeste de votre application, en activant cette modification.

Pour en savoir plus sur les modifications apportées à l'espace de stockage cloisonné dans Android 11, consultez la section Espace de stockage cloisonné sur la page dédiée aux modifications apportées à l'espace de stockage Android dans Android 11.

GET_DATA_CONNECTION_STATE_R_VERSION

ID de modification: 148535736

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour vérifier la version du SDK pour PreciseDataConnectionState#getDataConnectionState.

GET_DATA_STATE_R_VERSION

ID de modification: 148534348

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour vérifier la version du SDK pour getDataState().

GET_PROVIDER_SECURITY_EXCEPTIONS

ID de modification: 150935354

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11 (niveau d'API 30) ou version ultérieure, getProvider(String) n'affiche plus d'exceptions de sécurité.

GET_TARGET_SDK_VERSION_CODE_CHANGE

ID de modification: 145147528

État par défaut: Activé pour les applications qui ciblent Android 10 (niveau d'API 29) ou version ultérieure.

Pour vérifier la version du SDK pour la méthode SmsManager.sendResolverResult().

GWP_ASAN

ID de modification: 135634846

État par défaut: Désactivé pour toutes les applications.

Active la détection de bugs dans la mémoire native échantillonnée dans les applications.

Pour en savoir plus sur ce changement, consultez le guide GWP-ASan.

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

ID de modification: 149997251

État par défaut: Activé pour les applications qui ciblent Android 10 (niveau d'API 29) ou version ultérieure.

Pour les applications ciblant Android 10 (niveau d'API 29) ou version ultérieure, supprime l'accès à toutes les interfaces non SDK qui font partie de la liste max-target-p (greylist-max-p) pour Android 10 (niveau d'API 29).

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

ID de modification: 149994052

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11 (niveau d'API 30) ou version ultérieure, supprime l'accès à toutes les interfaces non SDK qui font partie de la liste max-target-q (greylist-max-q) pour Android 11 (niveau d'API 30).

Pour en savoir plus sur cette modification, consultez la section Interfaces non SDK désormais bloquées dans Android 11.

LISTEN_CODE_CHANGE

ID de modification: 147600208

État par défaut: Activé pour les applications qui ciblent Android 10 (niveau d'API 29) ou version ultérieure.

Pour vérifier la version du SDK pour TelephonyManager.listen(PhoneStateListener, int) :

MISSING_APP_TAG

ID de modification: 150776642

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11, une erreur est désormais générée lorsqu'une balise application ou instrumentation est manquante dans le fichier manifeste d'une application.

NATIVE_HEAP_POINTER_TAGGING

ID de modification: 135754954

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11, les allocations de tas natives comportent désormais une balise non nulle dans l'octet le plus significatif.

Pour en savoir plus, consultez la section Taggage des pointeurs de tas de mémoire.

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

ID de modification: 150880553

État par défaut: Activé pour toutes les applications.

Pour les applications ciblant Android 11, le nombre d'objets PhoneStateListener qu'un processus peut enregistrer via TelephonyManager.listen(PhoneStateListener, int) est désormais limité. La limite par défaut est de 50, mais elle peut être modifiée par des mises à jour de la configuration de l'appareil à distance. Cette limite est appliquée à l'aide d'une exception IllegalStateException générée par TelephonyManager.listen(PhoneStateListener, int) lorsque le processus en cause tente d'enregistrer un écouteur de trop.

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

ID de modification: 142365358

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les applications ciblant Android 11 ne peuvent plus utiliser une couche de réflexion supplémentaire pour accéder aux interfaces non SDK qui sont limitées.

PROCESS_CAPABILITY_CHANGE_ID

ID de modification: 136274596

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11, l'indicateur Context.BIND_INCLUDE_CAPABILITIES peut désormais être utilisé pour transmettre les fonctionnalités en cours d'utilisation du processus client à un service lié.

REMOVE_ANDROID_TEST_BASE

ID de modification: 133396946

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les applications ciblant Android 11, la bibliothèque android.test.base a été supprimée si l'application ne dépend pas de android.test.runner (car elle dépend des classes de la bibliothèque android.test.base).

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID de modification: 136293963

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Pour les services d'accessibilité ciblant Android 11, l'indicateur FLAG_REQUEST_ACCESSIBILITY_BUTTON doit désormais être spécifié dans le fichier de métadonnées du service d'accessibilité. Sinon, l'indicateur est ignoré.

Pour en savoir plus sur ce changement, consultez la section Déclarer l'utilisation du bouton d'accessibilité dans le fichier de métadonnées.

RESOURCES_ARSC_COMPRESSED

ID de modification: 132742131

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les applications ciblant Android 11 (niveau d'API 30) ne peuvent pas être installées si elles contiennent un fichier resources.arsc compressé ou si ce fichier n'est pas aligné sur une limite de 4 octets.

Pour en savoir plus sur cette modification, consultez la section Fichiers de ressources compressés.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

ID de modification: 141600225

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Si votre application cible Android 11 et utilise le Storage Access Framework (SAF), vous ne pouvez plus accéder à certains répertoires à l'aide des actions d'intent ACTION_OPEN_DOCUMENT et ACTION_OPEN_DOCUMENT_TREE. Pour en savoir plus sur ces modifications, consultez la section Restrictions d'accès aux documents de la page qui décrit les mises à jour de confidentialité liées au stockage dans Android 11.

SELINUX_LATEST_CHANGES

ID de modification: 143539591

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Ce changement limite l'accès des applications au domaine SELinux untrusted_app_R-targetSDk. Il s'agit de l'une des modifications fondamentales du framework de compatibilité qui permet aux applications d'activer ou de désactiver d'autres modifications contrôlées par targetSdkVersion sans modifier le targetSDKVersion de leur application. C'est pourquoi vous ne devez pas désactiver cette modification pour une application qui cible Android 11, sinon elle ne fonctionnera pas.

Ce changement n'a aucune incidence sur les applications qui utilisent un ID utilisateur partagé.

THROW_SECURITY_EXCEPTIONS

ID de modification: 147340954

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Avant Android 11, une exception SecurityException n'était générée que par les API setEnabled en cas d'erreur d'autorisation. Dans Android 11, ce n'est plus le cas, et une exception SecurityException peut être générée pour un certain nombre de raisons, aucune d'entre elles n'étant exposée à l'appelant.

Pour conserver le comportement existant de l'API, si un échec d'autorisation héritée ou un échec d'application de l'acteur se produit pour une application qui ne cible pas Android 11, l'exception est forcée dans un IllegalStateException qui existait dans la source avant Android 11.

USE_SET_LOCATION_ENABLED

ID de modification: 117835097

État par défaut: Activé pour les applications qui ciblent Android 11 (niveau d'API 30) ou version ultérieure.

Les applications d'administration ciblant Android 11 ne peuvent plus utiliser DevicePolicyManager.setSecureSetting(ComponentName, String, String) pour modifier le paramètre Settings.Secure.LOCATION_MODE obsolète. Ils doivent utiliser DevicePolicyManager.setLocationEnabled(ComponentName, boolean) à la place.