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

Figure 1. L'écran "Modification de la compatibilité de l'application" dans les options pour les développeurs répertorie les modifications que vous pouvez activer.

Cette page décrit chaque changement de comportement qui fait partie du framework de compatibilité dans Android 12 (niveau d'API 31). 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 prendre en charge et de cibler Android 12.

Voici quelques exemples d'utilisation des outils du framework de compatibilité :

  • Tester les modifications ciblées sans réellement modifier la targetSdkVersion de l'application. Vous pouvez utiliser les boutons d'activation/de désactivation pour forcer l'activation de certaines modifications du comportement afin d'évaluer l'impact sur votre application.
  • Axer votre test sur des modifications spécifiques. Plutôt que d'avoir à traiter toutes les modifications ciblées en même temps, les boutons d'activation/de désactivation vous permettent de désactiver toutes les modifications ciblées, à l'exception de celles que vous souhaitez tester.
  • Gérer les boutons d'activation/de désactivation via adb. Vous pouvez utiliser les commandes adb pour activer et désactiver les modifications à activer/désactiver dans votre environnement de test automatisé.
  • Déboguer plus rapidement grâce aux ID de modification standards. Les modifications pouvant être activées/désactivées possèdent un ID et un nom uniques que vous pouvez utiliser pour déboguer rapidement l'origine du problème dans la sortie du journal.

Pour obtenir des informations complètes sur l'utilisation des outils pour chacun de ces cas d'utilisation, consultez la page sur les outils du framework de compatibilité.

Modifications de comportement inclus dans le framework de compatibilité

La liste de cette section décrit chaque changement de comportement inclus dans le framework de compatibilité d'Android 12.

Vous pouvez filtrer la liste des modifications en fonction de leur Default State (État par défaut).

Modifications de comportement ajoutées au framework de compatibilité sous Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

ID de modification: 185004937
État par défaut: Désactivé pour toutes les applications.

Lorsque cette modification est activée, le bac à sable de l'API Display est appliqué à un package, quel que soit le mode de fenêtrage. Les API Display fournissent toujours les limites de l'application.

Pour en savoir plus sur cette modification, consultez la section sur les méthodes Display obsolètes de la page dédiée aux modifications de comportement d'Android 12.

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

ID de modification: 163400105
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 32) ou version ultérieure.

À partir d'Android 12, la plate-forme peut fournir des suggestions autres que textuelles (telles que des images) à l'aide du framework de saisie automatique avancée (voir Services de saisie automatique). Pour qu'une application puisse gérer ces suggestions, elle doit normalement implémenter l'API OnReceiveContentListener.

Pour faciliter l'adoption de cette API par les applications qui ont déjà implémenté l'API InputConnection.commitContent(InputContentInfo, int, Bundle), nous réutilisons cette API en tant que solution de secours si OnReceiveContentListener n'est pas encore implémenté par l'application. Cette solution de secours n'est activée que sur Android 12 (niveau d'API 31). Cet ID de modification désactive le remplacement, de sorte que les applications ciblant Android 12 (niveau d'API 32) ou version ultérieure doivent implémenter l'API OnReceiveContentListener pour accepter les suggestions autres que textuelles.

BLOCK_FLAG_SLIPPERY

ID de modification: 157929241
État par défaut: Activé pour toutes les applications.

Pour les applications exécutées sur Android 12 (niveau d'API 31), vérifie si FLAG_SLIPPERY est utilisé avec des fenêtres de l'application. Nous nous attendons à ce que cet indicateur ne soit probablement utilisé que par les composants système, car il s'agit d'un champ non compatible. Si c'est le cas, il sera soumis à restriction.

BLOCK_GPS_STATUS_USAGE

ID de modification: 144027538
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, toute utilisation de l'API GpsStatus doit être remplacée par des API GnssStatus.

BLOCK_IMMUTABLE_PENDING_INTENTS

ID de modification: 171317480
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, les objets PendingIntent immuables transmis aux API de localisation génèrent un IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

ID de modification: 169887240
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, les API système LocationRequest ne peuvent pas être utilisées avec les requêtes de localisation PendingIntent.

BLOCK_UNTRUSTED_TOUCHES

ID de modification: 158002302
État par défaut: Activé pour toutes les applications.

Pour préserver la sécurité du système et une bonne expérience utilisateur, Android 12 empêche les applications de consommer des événements tactiles lorsqu'une superposition bloque l'application de manière non sécurisée.

Pour en savoir plus sur ce changement, consultez Les événements tactiles non approuvés sont bloqués.

CALL_ACTIVITY_RESULT_BEFORE_RESUME

ID de modification: 78294732
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 32) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 32) ou version ultérieure, corrige le cycle de vie du résultat de l'activité pour garantir qu'une activité obtient le résultat de l'activité juste avant la reprise.

CAMERA_MIC_INDICATORS_NOT_PRESENT

ID de modification: 162547999
État par défaut: Désactivé pour toutes les applications.

Indique que cet appareil est compatible avec les indicateurs d'appareil photo et de micro. La valeur est false si présente, car la méthode CompatChanges#isChangeEnabled renvoie true si l'ID de modification n'est pas présent.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

ID de modification: 146211400
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 32) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 32) ou version ultérieure, le gestionnaire de paquets n'installe pas de paquet si des groupes d'autorisations sont mal formés. Les groupes d'autorisations ne doivent être partagés que par les applications qui partagent un certificat. Si une autorisation appartient à un groupe, ce groupe doit également être défini.

CHANGE_ID_AUTH_STATE_DENIED

ID de modification: 181350407
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications clientes ciblant Android 12 (niveau d'API 31) ou version ultérieure, une exception SecurityException est générée lorsqu'elles sont dans l'état d'autorisation refusée et tentent d'envoyer un message à une nano-application.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

ID de modification: 136069189
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, une exception SecurityException est générée lorsqu'elles ne disposent pas de l'autorisation HIGH_SAMPLING_RATE_SENSORS, qu'elles s'exécutent en mode débogage et qu'elles demandent des taux d'échantillonnage supérieurs à 200 Hz.

DELIVER_HISTORICAL_LOCATIONS

ID de modification: 73144566
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure, les clients de position peuvent recevoir des positions historiques (antérieures à l'heure actuelle) dans certains cas.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

ID de modification: 181658987
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, assure la rétrocompatibilité des modifications apportées à TelephonyDisplayInfo.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

ID de modification: 170503758
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, la plate-forme peut réduire la fréquence d'images d'une application à un diviseur de la fréquence d'actualisation si cela est préférable (par exemple, si l'application a appelé Surface.setFrameRate(float, int)). Les applications bénéficieront de rappels Choreographer.postFrameCallback(Choreographer.FrameCallback) et d'une contre-pression à la fréquence d'images limitée. Les applications utilisent Display.getRefreshRate() et Display.Mode.getRefreshRate() pour connaître la fréquence d'actualisation de l'écran. Display.getRefreshRate() renvoie toujours la fréquence d'images de l'application et non la fréquence d'actualisation de l'écran physique pour permettre aux applications de gérer correctement la fréquence d'images. Display.Mode.getRefreshRate() renvoie la fréquence d'images de l'application si elle est compilée vers une version précédente. À partir d'Android 12 (niveau d'API 31), elle renvoie la fréquence d'actualisation de l'écran physique.

DOWNSCALED

ID de modification: 168419799
État par défaut: Désactivé pour toutes les applications.

Cette modification contrôle toutes les modifications de taille de la mémoire tampon par application. L'activation de cette modification permet d'appliquer les facteurs de scaling suivants:

Lorsque cette modification est activée pour un package d'application, l'application est automatiquement redimensionnée au facteur de scaling le plus élevé et activé. Par exemple, la valeur 80% est utilisée si les valeurs 80% et 70 % (DOWNSCALE_80 et DOWNSCALE_70) sont activées.

DOWNSCALE_30

ID de modification: 189970040
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 30% de l'affichage réel.

DOWNSCALE_35

ID de modification: 189969749
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 35% de l'affichage réel.

DOWNSCALE_40

ID de modification: 189970038
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 40% de l'affichage réel.

DOWNSCALE_45

ID de modification: 189969782
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 45% de l'affichage réel.

DOWNSCALE_50

ID de modification: 176926741
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 50% de l'affichage réel.

DOWNSCALE_55

ID de modification: 189970036
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 55% de l'affichage réel.

DOWNSCALE_60

ID de modification: 176926771
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 60% de l'affichage réel.

DOWNSCALE_65

ID de modification: 189969744
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 65% de l'affichage réel.

DOWNSCALE_70

ID de modification: 176926829
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 70% de l'affichage réel.

DOWNSCALE_75

ID de modification: 189969779
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 75% de l'affichage réel.

DOWNSCALE_80

ID de modification: 176926753
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 80% de l'affichage réel.

DOWNSCALE_85

ID de modification: 189969734
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 85% de l'affichage réel.

DOWNSCALE_90

ID de modification: 182811243
État par défaut: Désactivé pour toutes les applications.

Lorsque DOWNSCALED est également activé, l'activation de cette modification pour un package oblige l'application à supposer qu'elle s'exécute sur un écran dont la résolution verticale et horizontale correspond à 90% de l'affichage réel.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

ID de modification: 157629738
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Les applications Android TV qui ciblent Android 12 (niveau d'API 31) ou version ultérieure doivent gérer toutes les tailles de fenêtre, y compris celles supérieures à 1080p. Les applications qui ciblent des versions antérieures d'Android ne s'attendent pas à recevoir des fenêtres de plus de 1080p. Par conséquent, elles sont redimensionnées à 1080p si nécessaire.

DROP_CLOSE_SYSTEM_DIALOGS

ID de modification: 174664120
État par défaut: Activé pour toutes les applications.

Pour améliorer le contrôle des utilisateurs lorsqu'ils interagissent avec les applications et le système, l'action d'intent ACTION_CLOSE_SYSTEM_DIALOGS est obsolète à partir d'Android 12.

Pour en savoir plus sur cette modification, consultez Les applications ne peuvent plus fermer les boîtes de dialogue système.

ENABLE_CHECKS_FOR_PRIVATE_FILES

ID de modification: 172100307
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure ne peuvent pas insérer ni mettre à jour de fichiers privés à l'aide du fournisseur multimédia.

ENABLE_DEFERRED_SCAN

ID de modification: 180326732
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Activez cette option pour différer l'analyse déclenchée dans le cadre de MediaProvider#update().

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

ID de modification: 157233955
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, active la protection READ_PHONE_STATE sur les API qui interrogent et notifient l'état de l'appel, telles que TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription() et TelephonyCallback.CallStateListener.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

ID de modification: 183407956
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, active les protections READ_PHONE_NUMBERS ou READ_PRIVILEGED_PHONE_STATE sur getPhoneAccount(PhoneAccountHandle).

ENABLE_INCLUDE_ALL_VOLUMES

ID de modification: 182734110
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Activez cette option pour inclure les lignes de base de données des fichiers d'un volume récemment démonté dans MediaProvider#query.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

ID de modification: 178209446
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Activez cette option pour autoriser les applications disposant de l'autorisation Manifest.permission.MANAGE_EXTERNAL_STORAGE à demander l'accès au stockage externe brut.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

ID de modification: 185199076
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, toutes les alarmes inexactes doivent avoir une taille de fenêtre minimale, qui devrait être de l'ordre de quelques minutes. En pratique, toutes les alarmes nécessitant des fenêtres plus petites sont identiques aux alarmes exactes et doivent utiliser les API correspondantes fournies, telles que setExact(int, long, PendingIntent). Les fenêtres d'une alarme inexacte avec des fenêtres plus courtes spécifiées seront allongées par le système.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

ID de modification: 142191088
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure doivent déclarer des dépendances envers les bibliothèques partagées natives publiques définies par le fabricant de l'appareil à l'aide de la balise uses-native-library dans son AndroidManifest.xml. Si l'une des dépendances ne peut pas être satisfaite (par exemple, si l'une d'elles n'existe pas), le gestionnaire de paquets n'installe pas l'application. La dépendance peut être spécifiée comme facultative à l'aide de l'attribut android:required dans la balise. Dans ce cas, l'échec de la satisfaction de la dépendance n'arrête pas l'installation.

Une fois installée, une application n'est fournie qu'avec les bibliothèques partagées natives spécifiées dans le fichier manifeste de l'application. L'appel de dlopen sur une bibliothèque partagée native qui n'apparaît pas dans le fichier manifeste de l'application échouera, même si elle existe réellement sur l'appareil.

ENFORCE_STRICT_QUERY_BUILDER

ID de modification: 143231523
État par défaut: Désactivé pour toutes les applications.

Lorsque cette modification est activée, SQLiteQueryBuilder vérifie toutes les sélections de requêtes CalendarProvider2 par rapport à des arguments malveillants.

FGS_BG_START_RESTRICTION_CHANGE_ID

ID de modification: 170668199
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, limite le moment où les applications peuvent démarrer des services de premier plan lorsqu'elles s'exécutent en arrière-plan.

FGS_START_EXCEPTION_CHANGE_ID

ID de modification: 174041399
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, permet au système de générer une IllegalStateException si une application tente de démarrer un service de premier plan lorsqu'elle s'exécute en arrière-plan.

FINISH_INPUT_NO_FALLBACK_CONNECTION

ID de modification: 156215187
État par défaut: Désactivé pour toutes les applications.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, terminez la InputConnection lorsque l'appareil devient non-interactive.

Si elle est activée par l'input method actuelle, la connexion d'entrée actuelle sera finished chaque fois que les appareils ne seront plus interactifs.

Si cette option n'est pas activée, la connexion d'entrée actuelle est désactivée de manière silencieuse lorsque les appareils ne sont plus interactifs, et une paire onFinishInput() et onStartInput() est envoyée lorsque l'appareil redevient interactif.

FORCE_DISABLE_HEVC_SUPPORT

ID de modification: 174227820
État par défaut: Désactivé pour toutes les applications.

Forcer la désactivation de la compatibilité d'une application avec les fonctionnalités multimédias HEVC. Les applications doivent déclarer les fonctionnalités multimédias compatibles dans leur fichier manifeste, mais vous pouvez utiliser cet indicateur pour forcer une application à ne pas prendre en charge HEVC, forçant ainsi le transcodage lorsque cette dernière accède à des médias encodés en HEVC. L'utilisation de cet indicateur remplace toutes les valeurs par défaut au niveau de l'OS pour les applications. Il est désactivé par défaut, ce qui signifie que les valeurs par défaut de l'OS prévalent. Si cet indicateur et FORCE_ENABLE_HEVC_SUPPORT sont activés, l'OS ignore les deux indicateurs.

FORCE_ENABLE_HEVC_SUPPORT

ID de modification: 174228127
État par défaut: Désactivé pour toutes les applications.

Forcer l'activation d'une application pour la compatibilité avec les fonctionnalités multimédias HEVC. Les applications doivent déclarer leurs fonctionnalités multimédias compatibles dans leur fichier manifeste, mais cet indicateur peut être utilisé pour forcer une application à prendre en charge le format HEVC, évitant ainsi le transcodage pour accéder aux fichiers multimédias encodés en HEVC. L'utilisation de cet indicateur remplace toutes les valeurs par défaut au niveau de l'OS pour les applications. Il est désactivé par défaut, ce qui signifie que les valeurs par défaut de l'OS prévalent. Si cet indicateur et FORCE_DISABLE_HEVC_SUPPORT sont activés, l'OS ignore les deux indicateurs.

FORCE_NON_RESIZE_APP

ID de modification: 181136395
État par défaut: Désactivé pour toutes les applications.

Empêche le non-redimensionnement des packages auxquels il est appliqué.

FORCE_RESIZE_APP

ID de modification: 174042936
État par défaut: Désactivé pour toutes les applications.

Force le redimensionnement des packages auxquels il est appliqué. Nous n'autorisons le redimensionnement qu'en mode fenêtrage plein écran, sans forcer l'application à passer en mode multifenêtrage redimensionnable.

HIDE_PROP_ICUBINARY_DATA_PATH

ID de modification: 171979766
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, supprime l'accès à la propriété android.icu.impl.ICUBinary.dataPath.

IGNORE_ALLOW_BACKUP_IN_D2D

ID de modification: 183147249
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, android:allowBackup est ignoré lors des migrations d'appareil à appareil (D2D).

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

ID de modification: 180523564
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, les règles d'inclusion et d'exclusion spécifiées à l'aide de android:fullBackupContent sont ignorées lors des transferts d'appareil à appareil (D2D).

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

ID de modification: 169273070
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, getSupportedLocales() renvoie désormais une liste de paramètres régionaux vide lorsqu'elle n'est pas définie, au lieu des paramètres régionaux système par défaut.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

ID de modification: 158482162
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, l'autorisation BACKUP requise pour isBackupServiceActive() est appliquée côté service plutôt que côté client dans BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

ID de modification: 169897160
État par défaut: Désactivé pour toutes les applications.

Lorsque cette modification est activée, la création d'opérations keystore peut échouer en fonction de la nouvelle stratégie d'élagage. Auparavant, le keystore partait du principe que la création d'opérations de chiffrement aboutissait toujours. Toutefois, le backend KeyMint ne dispose que d'un nombre limité d'emplacements d'opérations.

Afin de maintenir l'apparence des emplacements d'opérations "infinis", le daemon Keystore élague les opérations les moins récemment utilisées si aucun emplacement d'opération n'est disponible. Par conséquent, toute opération de qualité peut être interrompue prématurément. Cela a permis à AndroidKeystore de s'intéresser au déni de service (DoS) et au verrouillage intempestif. Par exemple, si plusieurs applications s'activent en même temps en raison d'optimisations de la gestion de l'alimentation et tentent d'effectuer des opérations de cryptographie, elles s'arrêtent les unes les autres sans progresser.

Pour échapper aux verrouillages et décourager les tentatives d'attaque DoS, nous avons modifié la stratégie d'élagage pour que les clients qui utilisent peu d'emplacements d'opérations soient privilégiés. Par conséquent, les opérations uniques qui ne restent pas inactives pendant plus de cinq secondes se terminent presque toujours sans entrave par la stratégie d'élagage. Dans des cas extrêmement rares, certaines opérations liées au chiffrement du système de fichiers peuvent malgré tout élaguer ces opérations. En raison de cette nouvelle stratégie d'élagage, la création peut maintenant échouer si le client dispose d'une puissance d'élagage inférieure à toutes les opérations existantes.

Stratégie d'élagage: pour trouver un candidat approprié, nous calculons le malus pour l'appelant et chaque opération existante. Le malus est l'inverse du pouvoir d'élagage (appelant) ou de la résistance d'élagage (opération existante). Pour que l'appelant puisse élaguer une opération, il doit trouver une opération dont le malus est supérieur au sien. Pour en savoir plus sur la stratégie d'élagage, consultez la section concernant l'implémentation de operation.rs. Sur Android 11 (niveau d'API 30) ou version antérieure, KeyStore2 interroge le daemon Keystore pour obtenir un emplacement d'opération libre. Pour les applications ciblant Android 11 (niveau d'API 30) et versions antérieures, l'algorithme de chiffrement et l'initialisation des objets de signature pourront toujours fonctionner. Toutefois, l'opération peut prendre plus de temps. Toutes les versions d'Android bénéficient d'une planification plus équitable des emplacements d'opérations et d'une meilleure chance de terminer une opération.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

ID de modification: 174664365
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, Intent.ACTION_CLOSE_SYSTEM_DIALOGS ne peut pas être envoyé, sauf si l'application dispose également de l'autorisation android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS. Notez qu'il s'agit de la version la plus restrictive de #DROP_CLOSE_SYSTEM_DIALOGS, qui s'attend à ce que l'application cesse d'envoyer l'intent Intent.ACTION_CLOSE_SYSTEM_DIALOGS une fois qu'elle cible Android 12 (niveau d'API 31) ou version ultérieure.

LOCK_DOWN_COLLAPSE_STATUS_BAR

ID de modification: 173031413
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, l'autorisation Manifest.permission.STATUS_BAR est requise pour réduire les panneaux de la barre d'état pour des raisons de sécurité. Un logiciel malveillant exploitait cette faille pour empêcher l'utilisateur d'accéder aux notifications critiques.

LOW_POWER_EXCEPTIONS

ID de modification: 168936375
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, tous les objets LocationRequest marqués comme basse consommation génèrent des exceptions si l'appelant ne dispose pas de l'autorisation LOCATION_HARDWARE, au lieu de supprimer silencieusement la partie basse consommation de la requête.

MISSING_EXPORTED_FLAG

ID de modification: 150232615
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, une valeur explicite doit être spécifiée pour l'attribut android:exported chaque fois qu'un filtre d'intent est défini.

Pour en savoir plus sur ce changement, consultez Exportation de composants plus sécurisée.

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

ID de modification: 207557677
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 32) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 32) ou version ultérieure, les allocations de tas natives dans le processus AppZygote et ses descendants utilisent une balise non nulle dans l'octet le plus significatif.

Pour en savoir plus sur ce changement, consultez la section Balisage des pointeurs.

NATIVE_HEAP_ZERO_INIT

ID de modification: 178038272
État par défaut: Désactivé pour toutes les applications.

Active l'initialisation automatique à zéro des allocations de mémoire du tas de mémoire natif.

NATIVE_MEMTAG_ASYNC

ID de modification: 135772972
État par défaut: Désactivé pour toutes les applications.

Active la vérification asynchrone (ASYNC) des tags de mémoire dans ce processus. Cet indicateur n'affecte que le matériel compatible avec la Memory Tagging Extension (MTE) ARM.

NATIVE_MEMTAG_SYNC

ID de modification: 177438394
État par défaut: Désactivé pour toutes les applications.

Active la vérification synchrone (SYNC) des tags de mémoire dans ce processus. Cet indicateur n'affecte que le matériel compatible avec la Memory Tagging Extension (MTE) ARM. Si NATIVE_MEMTAG_ASYNC et cette option sont activés, cette option est prioritaire et la MTE est activée en mode SYNC.

NEVER_SANDBOX_DISPLAY_APIS

ID de modification: 184838306
État par défaut: Désactivé pour toutes les applications.

Lorsque cette modification est activée, le bac à sable de l'API Display ne peut pas être appliqué à une activité de boîte aux lettres ou SCM. Les API Display continueront de définir des limites pour DisplayArea.

Pour en savoir plus sur cette modification, consultez la section sur les méthodes Display obsolètes de la page dédiée aux modifications de comportement d'Android 12.

NOTIFICATION_CANCELLATION_REASONS

ID de modification: 175319604
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Permet aux écouteurs de notifications de comprendre les nouveaux motifs d'annulation plus spécifiques.

NOTIFICATION_TRAMPOLINE_BLOCK

ID de modification: 167676448
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour améliorer leurs performances et l'expérience utilisateur, les applications qui ciblent Android 12 ne peuvent pas utiliser de services ni de broadcast receivers comme trampolines de notification.

Pour en savoir plus sur cette modification, consultez Les trampolines de notification ne peuvent pas être créés à partir de services ni de broadcast receivers.

NULL_TELEPHONY_THROW_NO_CB

ID de modification: 182185642
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Permet de vérifier si la version de SDK cible du processus en cours est Android 12 (niveau d'API 31) ou une version ultérieure.

S'applique aux méthodes suivantes:

OVERRIDE_MIN_ASPECT_RATIO

ID de modification: 174042980
État par défaut: Désactivé pour toutes les applications.

Cette modification contrôle toutes les modifications qui forcent un format minimal donné. L'activation de cette modification permet d'appliquer les formats minimaux suivants :

Lorsque cette modification est activée pour un package d'application, le format minimal indiqué dans le fichier manifeste de l'application est remplacé par le plus grand format activé, sauf si la valeur du fichier manifeste de l'application est plus élevée.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

ID de modification: 180326787
État par défaut: Désactivé pour toutes les applications.

Lorsque OVERRIDE_MIN_ASPECT_RATIO est également activé, l'activation de cette modification pour un package définit le format minimal de l'activité sur une valeur élevée, telle que définie par OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

ID de modification: 180326845
État par défaut: Désactivé pour toutes les applications.

Lorsque OVERRIDE_MIN_ASPECT_RATIO est également activé, l'activation de cette modification pour un package définit le format minimal de l'activité sur une valeur moyenne telle que définie par OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

ID de modification: 160794467
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, vous devez spécifier la mutabilité de chaque objet PendingIntent que votre application crée. Cette exigence supplémentaire améliore la sécurité de votre application.

Pour en savoir plus sur ce changement, consultez Les intents en attente doivent déclarer la mutabilité.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

ID de modification: 165573442
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Les applications d'administration ciblant Android 12 (niveau d'API 31) ou version ultérieure ne peuvent pas utiliser DevicePolicyManager.setPasswordQuality(ComponentName, int) pour définir la qualité du mot de passe sur l'instance DevicePolicyManager obtenue en appelant DevicePolicyManager.getParentProfileInstance(ComponentName). Ils doivent plutôt utiliser DevicePolicyManager.setRequiredPasswordComplexity(int) pour définir des exigences de mot de passe à grain fin au niveau de l'appareil.

RATE_LIMIT_TOASTS

ID de modification: 174840628
É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é.

Active la limitation du nombre d'appels de Toast.show() pour éviter de surcharger l'utilisateur avec trop de toasts en peu de temps. Toute tentative d'affichage d'un nombre de toasts supérieur à celui autorisé sur une période donnée entraîne la suppression du toast.

REQUIRE_EXACT_ALARM_PERMISSION

ID de modification: 171306433
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, les applications doivent disposer de l'autorisation Manifest.permission.SCHEDULE_EXACT_ALARM pour pouvoir utiliser des API permettant de définir des alarmes exactes, telles que setExactAndAllowWhileIdle(int, long, PendingIntent) et setAlarmClock(AlarmClockInfo, PendingIntent).

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

ID de modification: 182478738
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, les applications doivent disposer de l'autorisation Manifest.permission.READ_PHONE_STATE pour appeler TelephonyCallback.ActiveDataSubscriptionIdListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

ID de modification: 184323934
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, elles doivent disposer de l'autorisation Manifest.permission.READ_PHONE_STATE pour appeler TelephonyCallback.CellInfoListener.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

ID de modification: 183164979
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, elles doivent disposer de l'autorisation Manifest.permission.READ_PHONE_STATE pour appeler TelephonyCallback.DisplayInfoListener.

RESTRICT_ADB_BACKUP

ID de modification: 171032338
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, adb backup est automatiquement activé pour les applications exécutées en mode débogage (android:debuggable défini sur true) et n'est pas disponible pour les autres applications.

RESTRICT_DOMAINS

ID de modification: 175408749
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, la forme mise à jour de l'API de validation des liens d'application est requise. Cette exigence signifie qu'une application doit déclarer des domaines dans un filtre d'intent qui inclut tous les éléments suivants:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Seuls IntentFilter.SCHEME_HTTP et/ou IntentFilter.SCHEME_HTTPS, sans autre schéma

Dans les versions précédentes d'Android, Intent.CATEGORY_BROWSABLE n'était pas obligatoire, d'autres schémas étaient autorisés, et définir autoVerify sur true dans un filtre d'intent impliquait implicitement que tous les filtres d'intent étaient définis sur autoVerify="true".

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

ID de modification: 151105954
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, applique le fait que tous les attributionTags envoyés à noteOp(String, int, String), noteProxyOp(String, String) et startOp(String, int, String) sont définis dans le fichier manifeste du package spécifié comme paramètre des méthodes.

Pour activer cette modification, le package appelant noteOp(String, int, String) et le package spécifié comme paramètre de la méthode doivent être activés.

SELINUX_LATEST_CHANGES

ID de modification: 143539591
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, active les dernières modifications de SELinux. Désactiver cette modification pour une application ciblant Android 12 (niveau d'API 31) ou version ultérieure n'a aucun effet. N'a aucun effet pour les applications qui utilisent un ID utilisateur partagé.

SETTINGS_API_V2

ID de modification: 178111421
État par défaut: Activé pour toutes les applications.

La nouvelle API de préférences utilisateur pour valider les domaines marqués autoVerify=true dans les filtres d'intent AndroidManifest.xml n'est pas encore implémentée dans l'aperçu actuel de la plate-forme. Pour le moment, il est possible d'afficher un aperçu des nouvelles modifications des préférences utilisateur en activant ce ChangeId et en utilisant les commandes adb shell pm set-app-links-user-selection et similaires.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

ID de modification: 183972877
État par défaut: Activé pour les applications qui ciblent Android 12 (niveau d'API 31) ou version ultérieure.

Pour les applications ciblant Android 12 (niveau d'API 31) ou version ultérieure, détermine si un délai plus court doit être utilisé avant d'élever le bucket de veille à ACTIVE lorsque les applications lancent un service de premier plan.