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

Figure 1. L'écran "Modifications de 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 intégré au framework de compatibilité sous 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 lorsque vous préparez la prise en charge et le ciblage d'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 modification de comportement incluse dans le framework de compatibilité sous Android 12.

Vous pouvez filtrer la liste des modifications par É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 non textuelles (telles que des images) à l'aide du framework de saisie automatique augmenté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 pour les applications ayant déjà implémenté l'API InputConnection.commitContent(InputContentInfo, int, Bundle), nous réutilisons cette API en remplacement si OnReceiveContentListener n'est pas encore implémenté par l'application. Cette API de remplacement n'est activée que sur Android 12 (niveau d'API 31). Cet ID de modification désactive la création de 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 non 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 n'importe quelle fenêtre de l'application. Cet indicateur n'est probablement utilisé que par les composants système, car il s'agit d'un champ non compatible. Si c'est le cas, elles seront soumises à des restrictions.

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 une exception 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é l'obtient juste avant sa 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 packages n'installe pas de package si des groupes d'autorisations sont incorrects. Les groupes d'autorisations ne doivent être partagés qu'entre des applications partageant 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 erreur SecurityException est générée lorsque l'état d'autorisation est refusé et que l'utilisateur tente d'envoyer un message à une nanoapplication.

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 erreur 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 que les taux d'échantillonnage des requêtes sont infé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 ciblant Android 12 (niveau d'API 31) ou version ultérieure, les clients de localisation peuvent, dans certaines circonstances, recevoir des positions antérieures (antérieures à aujourd'hui).

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, permet d'assurer la rétrocompatibilité pour les modifications apportées dans 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 limiter 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 est appelée Surface.setFrameRate(float, int)). Les applications rencontreront des rappels Choreographer.postFrameCallback(Choreographer.FrameCallback) et 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 d'effectuer correctement le frame pacing. Display.Mode.getRefreshRate() renvoie la fréquence d'images de l'application s'il est compilé avec une version précédente. À partir d'Android 12 (niveau d'API 31), il 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 réduction de la 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 la résolution verticale et horizontale de l'écran 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 ciblant Android 12 (niveau d'API 31) ou version ultérieure sont censées pouvoir gérer n'importe quelle taille de fenêtre, y compris les tailles de fenêtre supérieures à 1080p. Les applications qui ciblent des versions antérieures d'Android ne s'attendent pas à recevoir une version de Windows supérieure à 1080p. Leur Windows est donc réduit à 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 depuis Android 12.

Pour en savoir plus sur ce changement, consultez Les applications ne peuvent pas 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 des fichiers privés via le 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 des appels, 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 contenant les fichiers d'un volume récemment désinstallé 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 permettre aux applications disposant de l'autorisation Manifest.permission.MANAGE_EXTERNAL_STORAGE de demander l'accès brut au stockage externe.

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, de l'ordre de quelques minutes. Dans la pratique, 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). Une alarme inexacte associée à des fenêtres plus courtes sera allongée 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 aux bibliothèques partagées natives publiques définies par le fabricant de l'appareil à l'aide de la balise uses-native-library dans son fichier AndroidManifest.xml. Si l'une des dépendances ne peut pas être satisfaite (par exemple, si l'une des dépendances n'existe pas), le gestionnaire de packages 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, si vous ne respectez pas la dépendance, l'installation ne sera pas interrompue.

Une fois installée, l'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 option 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, cette règle limite le moment où les applications peuvent lancer 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, le système peut générer une erreur IllegalStateException si une application tente de démarrer un service de premier plan alors qu'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 le InputConnection lorsque l'appareil passe à l'état non-interactive.

Si l'option input method est activée, la connexion d'entrée actuelle est finished dès que les appareils deviennent non interactifs.

Si cette option n'est pas activée, la connexion d'entrée actuelle est désactivée silencieusement lorsque les appareils deviennent non interactifs, et une paire onFinishInput()/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 leurs fonctionnalités multimédias compatibles dans leur fichier manifeste, mais cet indicateur peut être utilisé pour forcer une application à ne pas prendre en charge HEVC, forçant ainsi le transcodage tout en accédant aux contenus 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_ENABLE_HEVC_SUPPORT sont tous deux activés, le système d'exploitation 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 qu'elle soit compatible 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 HEVC, évitant ainsi le transcodage lors de l'accès aux contenus multimédias encodés en HEVC. L'utilisation de cette option 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 tous deux activés, le système d'exploitation 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être 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, l'accès à la propriété android.icu.impl.ICUBinary.dataPath est supprimé.

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é pour les applications 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, à la place des paramètres régionaux par défaut du système.

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 option 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 cryptographiques aboutissait toujours. Toutefois, le backend KeyMint ne dispose que d'un nombre limité d'emplacements d'opérations.

Afin de conserver 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 mutuellement sans progresser.

Pour échapper aux verrouillages et décourager les tentatives d'attaque DoS, nous avons modifié la stratégie d'élagage de façon à privilégier les clients qui utilisent brièvement quelques emplacements d'opérations. 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. Certaines opérations liées au chiffrement du système de fichiers peuvent malgré tout élaguer ces opérations, mais dans des cas extrêmement rares. Du fait de cette nouvelle stratégie d'élagage, la création peut maintenant échouer si la puissance d'élagage du client est 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) ou version antérieure, il semble que l'algorithme de chiffrement et l'initialisation des objets de signature réussissent toujours. 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, le Intent.ACTION_CLOSE_SYSTEM_DIALOGS ne peut être envoyé que 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 a démarré. 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é. Elle a été exploitée par un logiciel malveillant 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 étant à faible consommation d'énergie 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 la section Exportation plus sécurisée des composants.

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 segments de mémoire natives dans le processus AppZygote et ses descendants utilisent une balise non nulle dans l'octet le plus significatif.

Pour en savoir plus sur cette modification, consultez 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 d'identifier de 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 les 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 ce changement, consultez Impossible de créer des trampolines de notification à partir de services ou 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 du SDK cible pour le processus en cours est Android 12 (niveau d'API 31) ou 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 créé par votre application. Cette exigence supplémentaire renforce la sécurité de votre application.

Pour en savoir plus sur cette modification, 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). Utilisez plutôt DevicePolicyManager.setRequiredPasswordComplexity(int) pour définir des exigences de mot de passe sommaires à l'échelle 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 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 afin d'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 pouvoir 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, les applications doivent disposer de l'autorisation Manifest.permission.READ_PHONE_STATE pour pouvoir 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, les applications doivent disposer de l'autorisation Manifest.permission.READ_PHONE_STATE pour pouvoir 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 pouvant être déboguées (android:debuggable défini sur true) et indisponible 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, le format mis à jour de l'API App Links Verification est requis. 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
  • Uniquement 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. Les autres schémas étaient autorisés, et définir autoVerify sur true dans un filtre d'intent prétendrait 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, toutes les attributionTags envoyées à noteOp(String, int, String), noteProxyOp(String, String) et startOp(String, int, String) sont définies dans le fichier manifeste du package spécifié en tant que paramètre des méthodes.

Pour permettre cette modification, elle doit être activée pour le package qui appelle noteOp(String, int, String) et pour le package spécifié en tant que paramètre de la méthode.

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, les dernières modifications de SELinux sont activées. Désactiver cette modification pour une application ciblant Android 12 (niveau d'API 31) ou version ultérieure est sans effet. Cela 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 User Preference pour la validation des domaines marqués autoVerify=true dans les filtres d'intent AndroidManifest.xml n'est pas encore implémentée dans l'aperçu de la plate-forme actuelle. Pour l'instant, il est possible de prévisualiser les nouvelles modifications des préférences utilisateur en activant ce ChangeId et en utilisant adb shell pm set-app-links-user-selection et des commandes 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 s'il faut utiliser un délai d'inactivité plus court avant d'élever le bucket de secours à ACTIVE lorsque les applications démarrent un service de premier plan.