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

Cette page décrit chaque modification de comportement ayant un impact sur 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 lorsque vous vous préparez à 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, 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 à un 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, générez une erreur 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ée. 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 pour le 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 baisse la qualité du mot de passe, toutes les exigences de mot de passe existantes qui ne s'appliquent plus sont réinitialisées aux 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 cette modification, consultez le guide Accéder à la localisation en arrière-plan dans 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 effectué vers OnSharedPreferenceChangeListener.onSharedPreferenceChanged avec une touche null.

Pour en savoir plus sur cette modification, consultez la section Modifications du rappel pour OnSharedPreferenceChangeListener.

APPELBACK_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 (changement de liste)

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 de startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Avant cette modification, le système rappelait l'opération commutée. Après la modification, 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 des fonctionnalités de caméra et de micro que lorsque R.attr.foregroundServiceType est configuré respectivement en tant que ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA et ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE dans le fichier manifeste. Sur 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 cette modification, consultez la section Types de services de premier plan dans Android 11.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOQUER

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 à 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 la section Les affichages de toast personnalisés sont bloqués.

CHANGE_RESTRICT_SAW_INTENT (CHANGE_RESTRICT_INTENTION)

ID de modification: 135920175

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

Les intents qui utilisent 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 de texte sont désormais affichés par SystemUI au lieu d'être intégrés à 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

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 désactiver cette modification pour tester votre application sans espace de stockage cloisonné, quelles que soient la version du SDK cible et les valeurs des indicateurs de fichier manifeste.

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 permettait de transmettre ce cas sans générer d'erreur. Notez que cela n'inclut pas les cas où l'attribut est nul ou manquant, car cela génère toujours une erreur.

FILTRER_APPLICATION_REQUÊTE

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 d'autres applications installées sur un appareil. Ces déclarations doivent être effectuées à l'aide de la balise <queries> dans le fichier manifeste de l'application.

Pour savoir comment interroger et interagir avec d'autres applications installées dans Android 11, consultez la page sur la confidentialité concernant 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 désactiver l'espace de stockage cloisonné.

Toutefois, si votre application cible toujours Android 10 (niveau d'API 29) ou une version antérieure, activez cette modification pour pouvoir la tester avec un espace de stockage cloisonné, quelles que soient la version du SDK cible et les valeurs des indicateurs dans le fichier manifeste.

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 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 (Balise d'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.

TAGGAGE_NATIVE_HEAP_POINTER

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 natifs comportent désormais une balise non nulle dans l'octet le plus significatif.

Pour en savoir plus, consultez la section Taggage du pointeur 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. Elle peut être modifiée par les mises à jour de la configuration d'appareil à distance. Cette limite est appliquée à l'aide d'un IllegalStateException généré par TelephonyManager.listen(PhoneStateListener, int) lorsque le processus incriminé tente d'enregistrer un trop grand nombre d'écouteurs.

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

SUPPRIMER LA BASE DE TEST_ANDROID

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'option FLAG_REQUEST_ACCESSIBILITY_BUTTON doit désormais être spécifiée dans le fichier de métadonnées du service d'accessibilité. Sinon, cet indicateur est ignoré.

Pour en savoir plus sur cette modification, consultez Déclarer l'utilisation des boutons Accessibilité dans le fichier de métadonnées.

RESSOURCES_ARSC_COMPRESSÉE

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.

STRUCTURE D'ACCÈS_RESTRICT_STORAGE

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 sur la page qui traite des mises à jour de confidentialité liées au stockage sur 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 "untrusted_app_R-targetSDk". Il s'agit de l'une des modifications fondamentales du framework de compatibilité. Elles permettent aux applications d'activer/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é.

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 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 SecurityException peut être générée pour un certain nombre de raisons, dont aucune n'est exposée à l'appelant.

Pour maintenir le comportement existant de l'API, si un ancien échec d'autorisation ou d'application d'un acteur se produit pour une application qui ne cible pas Android 11, l'exception est convertie de force 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. Utilisez plutôt DevicePolicyManager.setLocationEnabled(ComponentName, boolean).