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

Cette page décrit chaque changement de comportement ayant une incidence sur l'application qui a été ajouté au framework de compatibilité sous 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 lorsque vous vous préparez à cibler Android 11.

AJOUTER_CONTENU_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, il existe une nouvelle surcharge d'API publique onChange(boolean, Uri, int) qui inclut un argument flags entier.

Cette nouvelle méthode est une alternative SDK publique 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, générez une erreur chaque fois qu'une application définit une exigence de mot de passe qui n'est pas adaptée à 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 une 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().

En outre, lorsqu'une application d'administration ciblant Android 11 réduit la qualité du mot de passe, toutes les exigences 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és de n'importe quelle application, quelle que soit la version du 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 la section 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 ce changement, consultez le guide Accéder à la localisation en arrière-plan sous Android 11, qui traite des changements concernant la confidentialité liés à la localisation 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 envoyé à OnSharedPreferenceChangeListener.onSharedPreferenceChanged avec une clé null.

Pour en savoir plus sur cette modification, consultez Modifications des 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 maintenant 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 de comportement subtil de startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Avant cette modification, le système rappelait l'opération commutée. Une fois la modification effectuée, le système rappellera l'opération réellement demandée ou 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 l'appareil photo et le micro pendant l'utilisation que si R.attr.foregroundServiceType est configuré en tant que ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA et ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE, respectivement dans le fichier manifeste. Sur les versions antérieures d'Android, les services de premier plan recevaient automatiquement les fonctionnalités de caméra et de micro.

Pour en savoir plus sur ce changement, consultez 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 toasts personnalisés en arrière-plan. Toutefois, les applications peuvent toujours publier des toasts en arrière-plan à l'aide de la méthode Toast.makeText(Context, CharSequence, int) et de ses variantes.

Pour en savoir plus sur cette modification, consultez la section Les affichages de toast personnalisés sont bloqués.

CHANGE_RESTRICT_SAW_INTENT

ID de modification: 135920175

État par défaut: cette modification n'est pas activable. Elles ne sont consignées que par le framework de compatibilité.

Les intents utilisant l'action android.settings.MANAGE_APP_OVERLAY_PERMISSION et le schéma d'URI de données package ne redirigent plus l'utilisateur vers un écran spécifique à l'application pour gérer l'autorisation associée. Au lieu de cela, l'utilisateur est redirigé vers un écran sur lequel il peut gérer toutes les applications qui ont 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 plutôt que dans l'application. Cela empêche les applications de contourner les restrictions concernant la publication de toasts personnalisés en arrière-plan.

STOCKAGE_PAR DÉFAUT_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 désactiver l'espace de stockage cloisonné.

Toutefois, vous pouvez tester votre application sans espace de stockage cloisonné, quelles que soient la version du SDK cible et les valeurs d'indicateur du fichier manifeste de votre application, en désactivant 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é de la page concernant les modifications apportées à l'espace de stockage Android sous 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 antérieur à Android 11 a permis à 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.

REQUÊTE_FILTRE_APPLICATION

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 ont l'intention d'utiliser avant de pouvoir obtenir des informations sur les autres applications d'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 dans Android 11, consultez la page de confidentialité package visibility (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 désactiver l'espace de stockage cloisonné.

Toutefois, si votre application cible toujours Android 10 (niveau d'API 29) ou une version antérieure, vous pouvez la tester avec un espace de stockage cloisonné, quelles que soient la version du SDK cible et les valeurs d'indicateur du 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é de la page concernant les modifications apportées à l'espace de stockage Android sous 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) ne génère 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 version 10 (niveau 29 d'API) ou 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 ce changement, 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) :

BALISE_APPLICATION_MANQUANTE

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'il manque une balise application ou instrumentation 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 segments de mémoire natives comportent désormais une balise non nulle dans l'octet le plus significatif.

Pour en savoir plus, consultez la section Balisage 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 que tout processus peut enregistrer via TelephonyManager.listen(PhoneStateListener, int) est désormais limité. La limite par défaut est de 50, qui peut être modifiée par les mises à jour de la configuration de l'appareil distant. Cette limite est appliquée à l'aide d'une IllegalStateException générée par TelephonyManager.listen(PhoneStateListener, int) lorsque le processus incriminé tente d'enregistrer un trop grand nombre d'écouteurs.

PRÉVENTION_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 de couche de réflexion supplémentaire pour accéder aux interfaces non SDK 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 des 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_BOUTON_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 cette modification, consultez la section Déclarer l'utilisation du bouton Accessibilité dans le fichier de métadonnées.

RESSOURCES_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 quatre 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 framework d'accès au stockage (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 traite des modifications de la 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.

Cette modification restreint l'accès des applications au domaine SELinux trusted_app_R-targetSDk. Il s'agit de l'une des modifications fondamentales du framework de compatibilité qui permettent aux applications d'activer ou de désactiver d'autres modifications contrôlées par targetSdkVersion sans modifier le targetSDKVersion de leur application. Par conséquent, vous ne devez pas désactiver cette modification pour une application qui cible Android 11, sinon l'application ne fonctionnera pas.

Cette modification n'a aucun effet pour les applications qui utilisent un ID utilisateur partagé.

EXCEPTIONS_SÉCURITÉ_THROW

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 erreur SecurityException n'était générée par les API setEnabled que pour une erreur d'autorisation. Dans Android 11, ce n'est plus le cas, et une SecurityException peut être générée pour plusieurs raisons, dont aucune n'est exposée à l'appelant.

Pour maintenir le comportement existant de l'API, en cas d'échec de l'ancienne autorisation ou de l'application par un acteur 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. Il doit plutôt utiliser DevicePolicyManager.setLocationEnabled(ComponentName, boolean).