Изменения в системе совместимости (Android 12)

Рисунок 1. На экране «Изменения совместимости приложений» в параметрах разработчика перечислены изменения, которые можно включить.

На этой странице описывается каждое изменение поведения, которое является частью фреймворка совместимости в Android 12 (уровень API 31). Используйте этот список вместе с параметрами разработчика и командами ADB для тестирования и отладки вашего приложения при подготовке к поддержке и ориентации на Android 12.

Вот некоторые из действий, которые можно выполнить с помощью инструментов фреймворка совместимости:

  • Тестируйте целевые изменения без фактического изменения targetSdkVersion приложения . Вы можете использовать переключатели для принудительного включения определенных целевых изменений поведения, чтобы оценить влияние на ваше существующее приложение.
  • Сосредоточьте свое тестирование только на определенных изменениях . Вместо того, чтобы обрабатывать все целевые изменения одновременно, переключатели позволяют вам отключить все целевые изменения, кроме тех, которые вы хотите протестировать.
  • Управляйте переключателями через adb . Вы можете использовать команды adb для включения и отключения переключаемых изменений в вашей автоматизированной тестовой среде.
  • Ускорьте отладку, используя стандартные идентификаторы изменений . Каждое из переключаемых изменений имеет уникальный идентификатор и имя, которые можно использовать для быстрой отладки первопричины в выходных данных журнала.

Полную информацию об использовании инструментов для каждого из этих вариантов использования см. в разделе Инструменты фреймворка совместимости .

Изменения поведения, включенные в фреймворк совместимости

Список в этом разделе описывает каждое изменение поведения, включенное в структуру совместимости в Android 12.

Вы можете отфильтровать список изменений по состоянию по умолчанию .

Изменения поведения, добавленные в фреймворк совместимости в Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

Изменить идентификатор: 185004937
Состояние по умолчанию : отключено для всех приложений.

При включении применяет Display API sandboxing к пакету независимо от режима окон. Display API всегда будут предоставлять границы приложения.

Чтобы узнать больше об этом изменении, см. раздел на странице изменений поведения Android 12 о методах отображения, которые были объявлены устаревшими .

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

Изменить идентификатор: 163400105
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 32) или выше.

Начиная с Android 12, платформа может предоставлять нетекстовые предложения (например, изображения) с помощью расширенной структуры автозаполнения (см. службы автозаполнения ). Чтобы приложение могло обрабатывать эти предложения, оно обычно должно реализовывать API OnReceiveContentListener .

Чтобы сделать принятие этого API более плавным для приложений, которые ранее реализовали API InputConnection.commitContent(InputContentInfo, int, Bundle) , мы повторно используем этот API в качестве резервного варианта, если OnReceiveContentListener еще не реализован приложением. Этот резервный вариант включен только в Android 12 (уровень API 31). Этот идентификатор изменения отключает резервный вариант, так что приложения, ориентированные на Android 12 (уровень API 32) и выше, должны реализовать API OnReceiveContentListener , чтобы принимать нетекстовые предложения.

BLOCK_FLAG_SLIPPERY

Изменить идентификатор: 157929241
Состояние по умолчанию : включено для всех приложений.

Для приложений, работающих на Android 12 (API уровня 31), проверяет, используется ли FLAG_SLIPPERY с любыми окнами в приложении. Мы ожидаем, что этот флаг, скорее всего, используется только системными компонентами, поскольку это неподдерживаемое поле . Если это так, оно будет ограничено.

BLOCK_GPS_STATUS_USAGE

Изменить идентификатор: 144027538
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, все использование API GpsStatus необходимо заменить на API GnssStatus .

BLOCK_IMMUTABLE_PENDING_INTENTS

Изменить идентификатор: 171317480
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, неизменяемый Объекты PendingIntent , передаваемые в API местоположения, будут генерировать исключение IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

Изменить идентификатор: 169887240
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, системные API LocationRequest не могут использоваться с запросами местоположения PendingIntent .

BLOCK_UNTRUSTED_TOUCHES

Изменить идентификатор: 158002302
Состояние по умолчанию : включено для всех приложений.

Для сохранения безопасности системы и удобства пользователей Android 12 не позволяет приложениям обрабатывать сенсорные события , когда наложение блокирует приложение небезопасным способом.

Чтобы узнать больше об этом изменении, см. раздел Блокировка ненадежных событий касания .

CALL_ACTIVITY_RESULT_BEFORE_RESUME

Изменить идентификатор: 78294732
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 32) или выше.

Для приложений, ориентированных на Android 12 (уровень API 32) и выше, корректирует жизненный цикл результата действия, чтобы гарантировать, что действие получает результат действия непосредственно перед возобновлением.

CAMERA_MIC_INDICATORS_NOT_PRESENT

Изменить идентификатор: 162547999
Состояние по умолчанию : отключено для всех приложений.

Указывает, что это устройство поддерживает индикаторы камеры и микрофона. Будет false если присутствует, поскольку метод CompatChanges#isChangeEnabled возвращает true если Change ID отсутствует.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

Изменить идентификатор: 146211400
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 32) или выше.

Для приложений, ориентированных на Android 12 (уровень API 32) и выше, менеджер пакетов не установит пакет, если есть неправильно сформированные группы разрешений. Группы разрешений должны быть общими только между приложениями, разделяющими сертификат. Если разрешение принадлежит группе, эта группа также должна быть определена.

CHANGE_ID_AUTH_STATE_DENIED

Изменить идентификатор: 181350407
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для клиентских приложений, ориентированных на Android 12 (уровень API 31) и выше, возникает исключение SecurityException , когда они находятся в состоянии отказа в авторизации и пытаются отправить сообщение наноприложению.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

Изменить идентификатор: 136069189
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, возникает исключение SecurityException , если у них нет разрешения HIGH_SAMPLING_RATE_SENSORS , они работают в режиме отладки и запрашивают частоту дискретизации выше 200 Гц.

DELIVER_HISTORICAL_LOCATIONS

Изменить идентификатор: 73144566
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, клиенты определения местоположения могут при некоторых обстоятельствах получать исторические местоположения (до настоящего момента).

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

Изменить идентификатор: 181658987
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, обеспечивается обратная совместимость для изменений в TelephonyDisplayInfo .

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

Изменить идентификатор: 170503758
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, платформа может снизить частоту кадров приложения до делителя частоты обновления, если это более предпочтительно (например, если приложение вызвало Surface.setFrameRate(float, int) ). Приложения будут испытывать обратные вызовы Choreographer.postFrameCallback(Choreographer.FrameCallback) и обратное давление при сниженной частоте кадров. Приложения используют Display.getRefreshRate() и Display.Mode.getRefreshRate() чтобы узнать частоту обновления дисплея. Display.getRefreshRate() всегда будет возвращать частоту кадров приложения, а не физическую частоту обновления дисплея, чтобы приложения могли правильно выполнять регулировку кадров. Display.Mode.getRefreshRate() вернет частоту кадров приложения, если скомпилировано в предыдущем выпуске, а начиная с Android 12 (уровень API 31) он будет возвращать физическую частоту обновления дисплея.

DOWNSCALED

Изменить идентификатор: 168419799
Состояние по умолчанию : отключено для всех приложений.

Это изменение является привратником всех изменений масштабирования буфера per app. Включение этого изменения позволяет применять следующие коэффициенты масштабирования:

Когда это изменение включено для пакета приложения, приложение принудительно изменяет размер до самого высокого, включенного коэффициента масштабирования. Например, 80% используется, если включены и 80%, и 70% ( DOWNSCALE_80 и DOWNSCALE_70 ).

DOWNSCALE_30

Изменить идентификатор: 189970040
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с вертикальным и горизонтальным разрешением, составляющим 30% от реального дисплея.

DOWNSCALE_35

Изменить идентификатор: 189969749
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с вертикальным и горизонтальным разрешением 35% от реального дисплея.

DOWNSCALE_40

Изменить идентификатор: 189970038
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с вертикальным и горизонтальным разрешением, составляющим 40% от реального дисплея.

DOWNSCALE_45

Изменить идентификатор: 189969782
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с вертикальным и горизонтальным разрешением, составляющим 45% от реального дисплея.

DOWNSCALE_50

Изменить идентификатор: 176926741
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 50% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_55

Изменить идентификатор: 189970036
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 55% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_60

Изменить идентификатор: 176926771
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 60% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_65

Изменить идентификатор: 189969744
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 65% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_70

Изменить идентификатор: 176926829
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 70% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_75

Изменить идентификатор: 189969779
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 75% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_80

Изменить идентификатор: 176926753
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 80% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_85

Изменить идентификатор: 189969734
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 85% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_90

Изменить идентификатор: 182811243
Состояние по умолчанию : отключено для всех приложений.

Если также включен DOWNSCALED , включение этого изменения для пакета заставляет приложение предполагать, что оно работает на дисплее с 90% вертикального и горизонтального разрешения реального дисплея.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

Изменить идентификатор: 157629738
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Приложения Android TV, ориентированные на Android 12 (уровень API 31) и выше, как ожидается, будут обрабатывать любой размер окна, включая размеры окна больше 1080p. Приложения, ориентированные на более ранние версии Android, не ожидают получить Windows больше 1080p, поэтому их Windows при необходимости уменьшается до 1080p.

DROP_CLOSE_SYSTEM_DIALOGS

Изменить идентификатор: 174664120
Состояние по умолчанию : включено для всех приложений.

Для улучшения контроля пользователя при взаимодействии с приложениями и системой действие намерения ACTION_CLOSE_SYSTEM_DIALOGS устарело, начиная с Android 12.

Дополнительную информацию об этом изменении см. в разделе Приложения не могут закрывать системные диалоговые окна .

ENABLE_CHECKS_FOR_PRIVATE_FILES

Изменить идентификатор: 172100307
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Приложения, ориентированные на Android 12 (уровень API 31) и выше, не могут вставлять или обновлять личные файлы с помощью поставщика медиаданных.

ENABLE_DEFERRED_SCAN

Изменить идентификатор: 180326732
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Включите эту опцию, чтобы отложить сканирование, запускаемое как часть MediaProvider#update() .

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

Изменить идентификатор: 157233955
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, включает защиту READ_PHONE_STATE для API, запрашивающих и уведомляющих о состоянии вызова, таких как TelecomManager#getCallState , TelephonyManager.getCallStateForSubscription() и TelephonyCallback.CallStateListener .

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

Изменить идентификатор: 183407956
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, включает защиту READ_PHONE_NUMBERS или READ_PRIVILEGED_PHONE_STATE в getPhoneAccount(PhoneAccountHandle) .

ENABLE_INCLUDE_ALL_VOLUMES

Изменить идентификатор: 182734110
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Включите эту опцию, чтобы включить строки базы данных файлов из недавно размонтированного тома в MediaProvider#query .

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

Изменить идентификатор: 178209446
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Включите этот параметр, чтобы разрешить приложениям, имеющим разрешение Manifest.permission.MANAGE_EXTERNAL_STORAGE , запрашивать необработанный доступ к внешнему хранилищу.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

Изменить идентификатор: 185199076
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, все неточные сигналы тревоги должны иметь минимальный размер окна, который, как ожидается, будет порядка нескольких минут. Фактически, любые сигналы тревоги, требующие меньших окон, аналогичны точным сигналам тревоги и должны использовать соответствующие предоставленные API, такие как setExact(int, long, PendingIntent) . Неточные сигналы тревоги с указанными более короткими окнами будут иметь свои окна, удлиненные системой.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

Изменить идентификатор: 142191088
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Приложения, ориентированные на Android 12 (уровень API 31) и выше, должны объявлять зависимости от общедоступных собственных общих библиотек, которые определяются производителем устройства с помощью тега uses-native-library в его AndroidManifest.xml . Если какая-либо из зависимостей не может быть удовлетворена, например, одна из зависимостей не существует, менеджер пакетов не установит приложение. Зависимость можно указать как необязательную с помощью атрибута android:required в теге, и в этом случае невозможность удовлетворения зависимости не остановит установку.

После установки приложению предоставляются только собственные общие библиотеки, указанные в манифесте приложения. Вызов dlopen для собственной общей библиотеки, которая не отображается в манифесте приложения, завершится ошибкой, даже если она фактически существует на устройстве.

ENFORCE_STRICT_QUERY_BUILDER

Изменить идентификатор: 143231523
Состояние по умолчанию : отключено для всех приложений.

При включении SQLiteQueryBuilder проверяет все выборки запросов CalendarProvider2 на наличие вредоносных аргументов.

FGS_BG_START_RESTRICTION_CHANGE_ID

Изменить идентификатор: 170668199
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, ограничивает время, когда приложения могут запускать приоритетные службы во время работы в фоновом режиме.

FGS_START_EXCEPTION_CHANGE_ID

Изменить идентификатор: 174041399
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, позволяет системе выдавать исключение IllegalStateException , если приложение пытается запустить службу переднего плана, работая в фоновом режиме.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Изменить идентификатор: 156215187
Состояние по умолчанию : отключено для всех приложений.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, завершите InputConnection , когда устройство станет non-interactive .

Если включен текущий input method , текущее входное соединение будет finished как только устройства станут неинтерактивными.

Если эта функция не включена, текущее входное соединение будет автоматически деактивировано, когда устройство перестанет быть интерактивным, а пара onFinishInput() и onStartInput() будет отправлена, когда устройство снова станет интерактивным.

FORCE_DISABLE_HEVC_SUPPORT

Изменить идентификатор: 174227820
Состояние по умолчанию : отключено для всех приложений.

Принудительно отключить поддержку приложением медиавозможностей HEVC. Приложения должны декларировать поддерживаемые медиавозможности в своем манифесте, но этот флаг можно использовать, чтобы заставить приложение не поддерживать HEVC, тем самым принудительно перекодируя при доступе к медиаданным, закодированным в HEVC. Установка этого флага переопределяет любые значения по умолчанию на уровне ОС для приложений. По умолчанию он отключен, что означает, что значения по умолчанию ОС имеют приоритет. Если включены и этот флаг, и FORCE_ENABLE_HEVC_SUPPORT , ОС игнорирует оба флага.

FORCE_ENABLE_HEVC_SUPPORT

Изменить идентификатор: 174228127
Состояние по умолчанию : отключено для всех приложений.

Принудительное включение поддержки приложением медиавозможностей HEVC Приложения должны декларировать поддерживаемые медиавозможности в своем манифесте, но этот флаг можно использовать, чтобы заставить приложение поддерживать HEVC, тем самым избегая перекодирования при доступе к медиаданным, закодированным в HEVC. Установка этого флага переопределяет любые значения по умолчанию на уровне ОС для приложений. По умолчанию он отключен, что означает, что значения по умолчанию ОС будут иметь приоритет. Если включены и этот флаг, и FORCE_DISABLE_HEVC_SUPPORT , ОС игнорирует оба флага.

FORCE_NON_RESIZE_APP

Изменить идентификатор: 181136395
Состояние по умолчанию : отключено для всех приложений.

Делает пакеты, к которым он применяется, неизменяемыми по размеру.

FORCE_RESIZE_APP

Изменить идентификатор: 174042936
Состояние по умолчанию : отключено для всех приложений.

Заставляет пакеты, к которым он применяется, изменять размер. Мы разрешаем изменять размер только в полноэкранном оконном режиме, но не заставляем приложение переходить в многооконный режим с возможностью изменения размера.

HIDE_PROP_ICUBINARY_DATA_PATH

Изменить идентификатор: 171979766
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, удаляет доступ к свойству android.icu.impl.ICUBinary.dataPath .

IGNORE_ALLOW_BACKUP_IN_D2D

Изменить идентификатор: 183147249
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, android:allowBackup игнорируется во время миграции с устройства на устройство (D2D).

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Изменить идентификатор: 180523564
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, правила включения и исключения, указанные с помощью android:fullBackupContent игнорируются во время передачи данных с устройства на устройство (D2D).

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

Изменить идентификатор: 169273070
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, getSupportedLocales() теперь возвращает пустой список локалей, если он не установлен, вместо системной локали по умолчанию.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Изменить идентификатор: 158482162
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, разрешение BACKUP , необходимое для isBackupServiceActive() применяется на стороне службы, а не на стороне клиента в BackupManager .

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Изменить идентификатор: 169897160
Состояние по умолчанию : отключено для всех приложений.

При включении создание операции хранилища ключей может завершиться неудачей в соответствии с новой стратегией обрезки. Хранилище ключей работало в предположении, что создание криптографических операций всегда завершается успешно. Однако бэкэнд KeyMint имеет лишь ограниченное количество слотов операций.

Чтобы поддерживать видимость «бесконечных» слотов операций, демон Keystore удалял наименее недавно использованные операции, если не было доступного слота операции. В результате хорошие операции могли быть преждевременно завершены. Это открывало AndroidKeystore для отказа в обслуживании (DoS) и непреднамеренной блокировки в реальном времени. Например, если несколько приложений одновременно просыпались из-за оптимизации управления питанием и пытались выполнить криптооперации, они начинали завершать операции друг друга, не достигая никакого прогресса.

Чтобы выйти из лайвлоков и воспрепятствовать попыткам DoS, мы изменили стратегию обрезки таким образом, что она предпочитает клиентов, которые используют несколько слотов операций на короткое время. В результате отдельные операции, которые не остаются неактивными более 5 секунд, почти всегда завершаются без помех со стороны стратегии обрезки. Есть еще некоторые операции, связанные с шифрованием файловой системы, которые могут обрезать даже эти операции, но такие случаи крайне редки. В качестве побочного эффекта этой новой операции стратегии обрезки создание теперь может не удаться, если у клиента более низкая мощность обрезки, чем у всех существующих операций.

Стратегия обрезки : чтобы найти подходящего кандидата, мы вычисляем malus для вызывающего и каждой существующей операции. Malus является обратной величиной мощности обрезки (вызывающего) или сопротивления обрезке (существующей операции). Чтобы вызывающий мог обрезать операцию, он должен найти операцию с malus выше, чем его собственный. Для получения более подробной информации о стратегии обрезки см. реализацию operation.rs . На Android 11 (уровень API 30) и ниже KeyStore2 будет опрашивать демон Keystore на предмет свободного слота операции. Для приложений, ориентированных на Android 11 (уровень API 30) и ниже, все равно будет казаться, что инициализация объекта шифрования и подписи всегда успешна, однако для получения операции может потребоваться больше времени. Все версии Android выигрывают от более справедливого планирования слотов операций и большей вероятности успешного завершения операции.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Изменить идентификатор: 174664365
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, нацеленных на Android 12 (уровень API 31) и выше, Intent.ACTION_CLOSE_SYSTEM_DIALOGS не может быть отправлен, если у приложения также нет разрешения android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS . Обратите внимание, что это более ограничительная версия #DROP_CLOSE_SYSTEM_DIALOGS , которая ожидает, что приложение прекратит отправлять намерение Intent.ACTION_CLOSE_SYSTEM_DIALOGS после запуска приложения, нацеленного на Android 12 (уровень API 31) или выше.

LOCK_DOWN_COLLAPSE_STATUS_BAR

Изменить идентификатор: 173031413
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, разрешение Manifest.permission.STATUS_BAR требуется для сворачивания панелей строки состояния по соображениям безопасности. Это использовалось вредоносным ПО, чтобы не допустить доступа пользователя к критическим уведомлениям.

LOW_POWER_EXCEPTIONS

Изменить идентификатор: 168936375
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, все объекты LocationRequest , помеченные как объекты с низким энергопотреблением, выдают исключения, если у вызывающего объекта нет разрешения LOCATION_HARDWARE , вместо того чтобы молча отбрасывать часть запроса, касающуюся низкого энергопотребления.

MISSING_EXPORTED_FLAG

Изменить идентификатор: 150232615
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, необходимо указать явное значение для атрибута android:exported всякий раз, когда определяется фильтр намерений.

Более подробную информацию об этом изменении см. в разделе Более безопасный экспорт компонентов .

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

Изменить идентификатор: 207557677
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 32) или выше.

Для приложений, ориентированных на Android 12 (уровень API 32) и выше, собственные выделения кучи в процессе AppZygote и его потомках используют ненулевой тег в старшем байте.

Чтобы узнать больше об этом изменении, см. раздел Тегированные указатели .

NATIVE_HEAP_ZERO_INIT

Изменить идентификатор: 178038272
Состояние по умолчанию : отключено для всех приложений.

Включить автоматическую нулевую инициализацию выделенной памяти кучи.

NATIVE_MEMTAG_ASYNC

Изменить идентификатор: 135772972
Состояние по умолчанию : отключено для всех приложений.

Включить асинхронную (ASYNC) проверку тегов памяти в этом процессе. Этот флаг влияет только на оборудование, поддерживающее ARM Memory Tagging Extension (MTE).

NATIVE_MEMTAG_SYNC

Изменить идентификатор: 177438394
Состояние по умолчанию : отключено для всех приложений.

Включает синхронную (SYNC) проверку тегов памяти в этом процессе. Этот флаг влияет только на оборудование, поддерживающее расширение тегирования памяти ARM (MTE). Если включены и NATIVE_MEMTAG_ASYNC , и эта опция, эта опция имеет приоритет, и MTE включается в режиме SYNC.

NEVER_SANDBOX_DISPLAY_APIS

Изменить идентификатор: 184838306
Состояние по умолчанию : отключено для всех приложений.

При включении предотвращает применение Display API sandboxing к letterbox или активности SCM. Display API будут продолжать предоставлять границы DisplayArea.

Чтобы узнать больше об этом изменении, см. раздел на странице изменений поведения Android 12 о методах отображения, которые были объявлены устаревшими .

NOTIFICATION_CANCELLATION_REASONS

Изменить идентификатор: 175319604
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Позволяет прослушивателям уведомлений понимать новые причины отмены, которые являются более конкретными.

NOTIFICATION_TRAMPOLINE_BLOCK

Изменить идентификатор: 167676448
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для повышения производительности и удобства использования приложения, предназначенные для Android 12, не могут использовать службы или широковещательные приемники в качестве батутов уведомлений.

Чтобы узнать больше об этом изменении, см. раздел Батуты уведомлений не могут быть созданы из служб или широковещательных приемников .

NULL_TELEPHONY_THROW_NO_CB

Изменить идентификатор: 182185642
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Используется для проверки того, является ли целевая версия SDK для текущего процесса Android 12 (уровень API 31) или выше.

Применимо к следующим методам:

OVERRIDE_MIN_ASPECT_RATIO

Изменить идентификатор: 174042980
Состояние по умолчанию : отключено для всех приложений.

Это изменение является привратником всех изменений, которые заставляют заданное минимальное соотношение сторон. Включение этого изменения позволяет применять следующие минимальные соотношения сторон:

Если это изменение включено для пакета приложения, минимальное соотношение сторон, указанное в манифесте приложения, переопределяется на максимальное разрешенное соотношение сторон, если только значение манифеста приложения не выше.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Изменить идентификатор: 180326787
Состояние по умолчанию : отключено для всех приложений.

Если также включено OVERRIDE_MIN_ASPECT_RATIO , включение этого изменения для пакета устанавливает минимальное соотношение сторон действия на большое значение, как определено OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE .

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Изменить идентификатор: 180326845
Состояние по умолчанию : отключено для всех приложений.

Если также включено OVERRIDE_MIN_ASPECT_RATIO , включение этого изменения для пакета устанавливает минимальное соотношение сторон действия на среднее значение, определенное OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE .

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

Изменить идентификатор: 160794467
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, необходимо указать изменчивость каждого объекта PendingIntent , создаваемого вашим приложением. Это дополнительное требование повышает безопасность вашего приложения.

Чтобы узнать больше об этом изменении, см. раздел Ожидающие намерения должны декларировать изменчивость .

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

Изменить идентификатор: 165573442
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Приложения администратора, ориентированные на Android 12 (уровень API 31) и выше, не могут использовать DevicePolicyManager.setPasswordQuality(ComponentName, int) для установки качества пароля в экземпляре DevicePolicyManager , полученном путем вызова DevicePolicyManager.getParentProfileInstance(ComponentName) . Вместо этого они должны использовать DevicePolicyManager.setRequiredPasswordComplexity(int) для установки общих требований к паролю на уровне всего устройства.

RATE_LIMIT_TOASTS

Изменить идентификатор: 174840628
Состояние по умолчанию : это изменение не может быть переключено. Оно регистрируется только фреймворком совместимости.

Включает ограничение частоты вызовов Toast.show() , чтобы не перегружать пользователя слишком большим количеством уведомлений за ограниченное время. Любая попытка показать больше уведомлений, чем разрешено за определенный промежуток времени, приводит к отмене уведомлений.

REQUIRE_EXACT_ALARM_PERMISSION

Изменить идентификатор: 171306433
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, приложения должны иметь разрешение Manifest.permission.SCHEDULE_EXACT_ALARM , чтобы использовать любые API для установки точных будильников, такие как setExactAndAllowWhileIdle(int, long, PendingIntent) и setAlarmClock(AlarmClockInfo, PendingIntent) .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

Изменить идентификатор: 182478738
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, приложения должны иметь разрешение Manifest.permission.READ_PHONE_STATE для вызова TelephonyCallback.ActiveDataSubscriptionIdListener .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

Изменить идентификатор: 184323934
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, приложения должны иметь разрешение Manifest.permission.READ_PHONE_STATE для вызова TelephonyCallback.CellInfoListener .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

Изменить идентификатор: 183164979
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, приложения должны иметь разрешение Manifest.permission.READ_PHONE_STATE для вызова TelephonyCallback.DisplayInfoListener .

RESTRICT_ADB_BACKUP

Изменить идентификатор: 171032338
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, adb backup автоматически включается для приложений, работающих как отлаживаемые ( android:debuggable имеет значение true ) и недоступно для других приложений.

RESTRICT_DOMAINS

Изменить идентификатор: 175408749
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, требуется обновленная форма API проверки ссылок приложений. Это требование означает, что приложение должно объявлять домены внутри фильтра намерений, который включает все следующее:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Только IntentFilter.SCHEME_HTTP и/или IntentFilter.SCHEME_HTTPS , без других схем

В предыдущих версиях Android Intent.CATEGORY_BROWSABLE не был обязательным, допускались другие схемы, а установка autoVerify в значение true в любом фильтре намерений неявно создавала видимость того, что все фильтры намерений установлены в значение autoVerify="true" .

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

Изменить идентификатор: 151105954
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, обеспечивается, чтобы все attributionTags , отправляемые в noteOp(String, int, String) , noteProxyOp(String, String) и startOp(String, int, String) были определены в манифесте пакета, который указан в качестве параметра методов.

Чтобы включить это изменение, это изменение должно быть включено как в пакете, вызывающем noteOp(String, int, String) так и в пакете, указанном в качестве параметра метода.

SELINUX_LATEST_CHANGES

Изменить идентификатор: 143539591
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, включает последние изменения SELinux. Отключение этого изменения для приложения, ориентированного на Android 12 (уровень API 31) и выше, не имеет смысла. Не влияет на приложения, использующие общий идентификатор пользователя.

SETTINGS_API_V2

Изменить идентификатор: 178111421
Состояние по умолчанию : включено для всех приложений.

Новый API пользовательских предпочтений для проверки доменов, отмеченных как autoVerify=true в фильтрах намерений AndroidManifest.xml, пока не реализован в текущей предварительной версии платформы. На данный момент можно предварительно просмотреть новые изменения пользовательских предпочтений, включив этот ChangeId и используя adb shell pm set-app-links-user-selection и аналогичные команды.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

Изменить идентификатор: 183972877
Состояние по умолчанию : включено для приложений, предназначенных для Android 12 (уровень API 31) или выше.

Для приложений, ориентированных на Android 12 (уровень API 31) и выше, определяет, следует ли использовать более короткий тайм-аут перед повышением уровня резервного контейнера до ACTIVE , когда приложения запускают службу переднего плана.

,
Рисунок 1. На экране «Изменения совместимости приложений» в параметрах разработчика перечислены изменения, которые можно включить.

На этой странице описывается каждое изменение поведения, которое является частью фреймворка совместимости в Android 12 (уровень API 31). Используйте этот список вместе с параметрами разработчика и командами ADB для тестирования и отладки вашего приложения при подготовке к поддержке и ориентации на Android 12.

Вот некоторые из действий, которые можно выполнить с помощью инструментов фреймворка совместимости:

  • Тестируйте целевые изменения без фактического изменения targetSdkVersion приложения . Вы можете использовать переключатели для принудительного включения определенных целевых изменений поведения, чтобы оценить влияние на ваше существующее приложение.
  • Сосредоточьте свое тестирование только на определенных изменениях . Вместо того, чтобы обрабатывать все целевые изменения одновременно, переключатели позволяют вам отключить все целевые изменения, кроме тех, которые вы хотите протестировать.
  • Управляйте переключателями через adb . Вы можете использовать команды adb для включения и отключения переключаемых изменений в вашей автоматизированной тестовой среде.
  • Ускорьте отладку, используя стандартные идентификаторы изменений . Каждое из переключаемых изменений имеет уникальный идентификатор и имя, которые можно использовать для быстрой отладки первопричины в выходных данных журнала.

Полную информацию об использовании инструментов для каждого из этих вариантов использования см. в разделе Инструменты фреймворка совместимости .

Изменения поведения, включенные в фреймворк совместимости

Список в этом разделе описывает каждое изменение поведения, включенное в структуру совместимости в Android 12.

Вы можете отфильтровать список изменений по состоянию по умолчанию .

Изменения поведения, добавленные в фреймворк совместимости в Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

Изменить идентификатор: 185004937
Состояние по умолчанию : отключено для всех приложений.

При включении применить песочницу API Display на пакет независимо от режима окон. API -интерфейсы дисплея всегда будут предоставлять границы приложения.

Чтобы узнать больше об этом изменении, см. Раздел на странице «Изменения в поведении Android 12 о методах отображения» .

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

Идентификатор изменения: 163400105
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 32) или выше.

Начиная с Android 12, платформа может предоставлять не текстовые предложения (например, изображения), используя дополненную структуру автозаполнения (см. Службы автозаполнения ). Чтобы приложение имело возможность обрабатывать эти предложения, оно должно обычно реализовать API OnReceiveContentListener .

Чтобы сделать принятие этого API более плавным для приложений, которые ранее реализовали API InputConnection.commitContent(InputContentInfo, int, Bundle) , мы повторно используем этот API как запасной, если OnReceiveContentListener еще не реализован приложением. Этот запасной удар включен только на Android 12 (API -уровне 31). Этот идентификатор изменения отключает отступление, так что приложения, нацеленные на Android 12 (API, уровень 32) и выше, должны реализовать API OnReceiveContentListener , чтобы принять не текстовые предложения.

BLOCK_FLAG_SLIPPERY

Идентификатор изменения: 157929241
Состояние по умолчанию : включено для всех приложений.

Для приложений, работающих на Android 12 (API -уровне 31), проверяют, используется ли FLAG_SLIPPERY с любыми окнами в приложении. Мы ожидаем, что этот флаг, вероятно, используется только компонентами системы, поскольку это неподдерживаемое поле . Если это так, это будет ограничено.

BLOCK_GPS_STATUS_USAGE

Идентификатор изменения: 144027538
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и выше, все использование API GpsStatus должно быть заменено API GnssStatus .

BLOCK_IMMUTABLE_PENDING_INTENTS

Идентификатор изменения: 171317480
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и более высокий, неподвижный PendingIntent , которые передаются в API местоположения, будут генерировать IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

Идентификатор изменения: 169887240
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и выше, API системы LocationRequest не могут использоваться с помощью запросов на PendingIntent .

BLOCK_UNTRUSTED_TOUCHES

Идентификатор изменения: 158002302
Состояние по умолчанию : включено для всех приложений.

Чтобы сохранить безопасность системы и хороший пользовательский опыт, Android 12 предотвращает приложения от потребления сенсорных событий , где наложение небезопасно блокирует приложение.

Чтобы узнать больше об этом изменении, см. Недоверенные события прикосновения заблокированы .

CALL_ACTIVITY_RESULT_BEFORE_RESUME

Идентификатор изменения: 78294732
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 32) или выше.

Для приложений, нацеленных на Android 12 (уровень 32 API 32) и выше, корректирует результат жизненного цикла активности, чтобы гарантировать, что активность получает результат деятельности непосредственно перед резюме.

CAMERA_MIC_INDICATORS_NOT_PRESENT

Идентификатор изменения: 162547999
Состояние по умолчанию : отключено для всех приложений.

Указывает, что это устройство поддерживает индикаторы камеры и микрофона. Будет false если он присутствует, потому что метод CompatChanges#isChangeEnabled возвращает true если идентификатор изменения нет.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

Идентификатор изменения: 146211400
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 32) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 32) и выше, диспетчер пакетов не будет устанавливать пакет, если существуют группы по уродливым разрешениям. Группы разрешений должны быть разделены только между приложениями, разделяющими сертификат. Если разрешение принадлежит группе, эта группа также должна быть определена.

CHANGE_ID_AUTH_STATE_DENIED

Идентификатор изменения: 181350407
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для клиентских приложений, нацеленных на Android 12 (API -уровне 31) и выше, SecurityException бросается, когда они находятся в состоянии отказа и пытаются отправить сообщение на NanoApp.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

Идентификатор изменения: 136069189
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, SecurityException отрывается, когда у них нет разрешения HIGH_SAMPLING_RATE_SENSORS , запуска в режиме отладки и запрос показателей выборки, которые быстрее 200 Гц.

DELIVER_HISTORICAL_LOCATIONS

Идентификатор изменения: 73144566
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровне 31) и выше, клиенты местоположения могут получать исторические местоположения (с настоящего времени) при некоторых обстоятельствах.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

Идентификатор изменения: 181658987
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровне 31) и выше, обеспечивает обратную совместимость для изменений в TelephonyDisplayInfo .

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

Идентификатор изменения: 170503758
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, платформа может снизить частоту кадров приложения до дивизора частоты обновления, если она более предпочтительнее (например, если приложение вызвано на Surface.setFrameRate(float, int) ). Приложения будут испытывать Choreographer.postFrameCallback(Choreographer.FrameCallback) Приложения используют Display.getRefreshRate() и Display.Mode.getRefreshRate() чтобы узнать, что такое частота обновления дисплея. Display.getRefreshRate() всегда будет возвращать частоту кадров приложения, а не на физическую частоту обновления дисплея, чтобы приложения могли правильно выполнять каркас. Display.Mode.getRefreshRate() вернет частоту кадров приложения, если он будет составлен в предыдущий выпуск, и начиная с Android 12 (уровень 31 API 31), он вернет частоту обновления физического дисплея.

DOWNSCALED

Идентификатор изменения: 168419799
Состояние по умолчанию : отключено для всех приложений.

Это изменение является привратником всех изменений буфера для приложения. Включение этого изменения позволяет применяться следующие коэффициенты масштабирования:

Когда это изменение будет включено для пакета приложений, приложение принудительно изменяется до самого высокого, включенного коэффициента масштабирования. Например, 80% используются, если включены как 80%, так и 70% ( DOWNSCALE_80 и DOWNSCALE_70 ).

DOWNSCALE_30

Идентификатор изменения: 189970040
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 30% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_35

Идентификатор изменения: 189969749
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 35% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_40

Идентификатор изменения: 189970038
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 40% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_45

Идентификатор изменения: 189969782
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 45% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_50

Идентификатор изменения: 176926741
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что позволяет этому изменению пакета заставляет приложение предположить, что оно работает на дисплее с 50% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_55

Идентификатор изменения: 189970036
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 55% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_60

Идентификатор изменения: 176926771
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 60% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_65

Идентификатор изменения: 189969744
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 65% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_70

Идентификатор изменения: 176926829
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 70% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_75

Идентификатор изменения: 189969779
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 75% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_80

Идентификатор изменения: 176926753
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 80% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_85

Идентификатор изменения: 189969734
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 85% вертикального и горизонтального разрешения реального дисплея.

DOWNSCALE_90

Идентификатор изменения: 182811243
Состояние по умолчанию : отключено для всех приложений.

При DOWNSCALED также включено, что это изменение заставляет пакет заставляет приложение предположить, что оно работает на дисплее с 90% вертикального и горизонтального разрешения реального дисплея.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

Идентификатор изменения: 157629738
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Ожидается, что приложения Android TV, нацеленные на Android 12 (уровень 31) и более высокие, будут обрабатывать любой размер окна, включая размеры окна более 1080p. Приложения, которые нацелены на более ранние версии Android, не ожидают приема Windows более 1080p, поэтому их окна снижаются до 1080p при необходимости.

DROP_CLOSE_SYSTEM_DIALOGS

Идентификатор изменения: 174664120
Состояние по умолчанию : включено для всех приложений.

Чтобы улучшить пользовательское управление при взаимодействии с приложениями и системой, действие ACTION_CLOSE_SYSTEM_DIALOGS намерение устарело на Android 12.

Чтобы узнать больше об этом изменении, см. Приложения не могут закрыть системные диалоги .

ENABLE_CHECKS_FOR_PRIVATE_FILES

Идентификатор изменения: 172100307
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Приложения, нацеленные на Android 12 (API -уровне 31) и выше, не могут вставить или обновить частные файлы с помощью медиа -провайдера.

ENABLE_DEFERRED_SCAN

Идентификатор изменения: 180326732
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Включите эту опцию, чтобы отложить сканирование, которое запускается как часть MediaProvider#update() .

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

Идентификатор изменения: 157233955
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, позволяет защите READ_PHONE_STATE на API -запросах и уведомление о состоянии вызова, таком как TelecomManager#getCallState , TelephonyManager.getCallStateForSubscription() и TelephonyCallback.CallStateListener .

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

Идентификатор изменения: 183407956
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, позволяет READ_PHONE_NUMBERS или READ_PRIVILEGED_PHONE_STATE Защиты на getPhoneAccount(PhoneAccountHandle) .

ENABLE_INCLUDE_ALL_VOLUMES

Идентификатор изменения: 182734110
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Включите эту опцию, чтобы включить строки базы данных файлов из недавно нерешенного тома в MediaProvider#query .

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

Идентификатор изменения: 178209446
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Включите эту опцию, чтобы позволить приложениям удерживать Manifest.permission.MANAGE_EXTERNAL_STORAGE разрешение на запрос необработанного доступного хранилища.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

Идентификатор изменения: 185199076
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и выше, все неточные сигналы тревоги должны иметь минимальный размер окна, ожидается, что будет на заказ в течение нескольких минут. Практически любые тревоги, требующие меньших окон, одинаковы, что и точные сигналы тревоги, и должны использовать соответствующие предоставленные API, такие как setExact(int, long, PendingIntent) . Неточная тревога с указанными Windows будет иметь свои окна, вытянутые системой.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

Идентификатор изменения: 142191088
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Приложения, нацеленные на Android 12 (уровень 31 API) и более высокую необходимость объявления зависимостей в общедоступных общих библиотеках, которые определяются производителем устройств, использующих теги uses-native-library в своей AndroidManifest.xml . Если какая -либо из зависимостей не может быть удовлетворена - например, одной из зависимостей не существует - диспетчер пакетов не установит приложение. Зависимость может быть указана как необязательная, используя android:required атрибут в теге, и в этом случае не удалось удовлетворить зависимость, не остановит установку.

После установки приложение предоставляется только нативные общие библиотеки, которые указаны в манифесте приложения. Вызов dlopen в местной общей библиотеке, которая не появляется в манифесте приложения, потерпит неудачу, даже если она действительно существует на устройстве.

ENFORCE_STRICT_QUERY_BUILDER

Идентификатор изменения: 143231523
Состояние по умолчанию : отключено для всех приложений.

При включении, SQLiteQueryBuilder проверяет все выборы запросов CalendarProvider2 против вредоносных аргументов.

FGS_BG_START_RESTRICTION_CHANGE_ID

Идентификатор изменения: 170668199
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровне 31) и выше, ограничивает, когда приложения могут запускать сервисы переднего плана во время работы в фоновом режиме.

FGS_START_EXCEPTION_CHANGE_ID

Идентификатор изменения: 174041399
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровне 31) и выше, позволяет системе бросить IllegalStateException если приложение пытается запустить службу переднего плана во время работы в фоновом режиме.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Идентификатор изменения: 156215187
Состояние по умолчанию : отключено для всех приложений.

Для приложений, нацеленных на Android 12 (API-уровне 31) и выше, завершите InputConnection , когда устройство становится non-interactive .

При включении текущего input method текущее подключение ввода будет finished всякий раз, когда устройства становятся неинтерактивными.

Если не включено, то текущее входное соединение вместо этого будет молча деактивировать, когда устройства становятся неинтерактивными, а пара onFinishInput() и onStartInput() отправляется, когда устройство снова станет интерактивным.

FORCE_DISABLE_HEVC_SUPPORT

Идентификатор изменения: 174227820
Состояние по умолчанию : отключено для всех приложений.

Force отключите приложение от поддержки возможности HEVC Media. Приложения должны объявлять свои поддерживаемые средства массовой информации в своем манифесте, но этот флаг может быть использован, чтобы заставить приложение не поддержать HEVC, следовательно, вызывая транкодирование при доступе к СМИ, закодированному в HEVC. Установка этого флага переопределяет любые по умолчанию на уровне ОС для приложений. Он отключен по умолчанию, что означает, что ОС по умолчанию имеет приоритет. Если этот флаг и FORCE_ENABLE_HEVC_SUPPORT включены, ОС игнорирует оба флага.

FORCE_ENABLE_HEVC_SUPPORT

Идентификатор изменения: 174228127
Состояние по умолчанию : отключено для всех приложений.

Force позволяет приложению поддержать приложения HEVC Media Paclose, чтобы объявить свои поддерживаемые средства массовой информации в своем манифесте, но этот флаг может быть использован для привязки приложения в поддержку HEVC, следовательно, избегая транкодирования при доступе к СМИ, кодируемому в HEVC. Установка этого флага переопределяет любые по умолчанию на уровне ОС для приложений. Он отключен по умолчанию, что означает, что по умолчанию ОС будет иметь приоритет. Если этот флаг и FORCE_DISABLE_HEVC_SUPPORT включены, ОС игнорирует оба флага.

FORCE_NON_RESIZE_APP

Идентификатор изменения: 181136395
Состояние по умолчанию : отключено для всех приложений.

Применяет пакеты, к которым применяются, чтобы они были нерезидентами.

FORCE_RESIZE_APP

Идентификатор изменения: 174042936
Состояние по умолчанию : отключено для всех приложений.

Применяет пакеты, к которым применяются, чтобы быть изменяемыми. Мы разрешаем изменение размера только в режиме окон полноэкранного окна, но не заставляем приложение в режиме с изменяемым использованием.

HIDE_PROP_ICUBINARY_DATA_PATH

Идентификатор изменения: 171979766
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и выше, удаляет доступ к свойству android.icu.impl.ICUBinary.dataPath .

IGNORE_ALLOW_BACKUP_IN_D2D

Идентификатор изменения: 183147249
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API-уровень 31) и выше, android:allowBackup игнорируется для приложений во время миграций устройства в установку (D2D).

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Идентификатор изменения: 180523564
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API-уровень 31) и выше, включайте и исключают правила, указанные с использованием android:fullBackupContent игнорируются во время передачи устройства в установку (D2D).

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

Идентификатор изменения: 169273070
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и выше, getSupportedLocales() теперь возвращает пустой список локалов, когда он не установлен, вместо локали системы по умолчанию.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Идентификатор изменения: 158482162
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API-уровень 31) и выше, разрешение BACKUP необходимое для isBackupServiceActive() применяется на стороне обслуживания, а не на стороне клиента в BackupManager .

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Идентификатор изменения: 169897160
Состояние по умолчанию : отключено для всех приложений.

При включении, создание операции ключа может потерпеть неудачу в соответствии с новой стратегией обрезки. Key Store, используемый для работы в предположении, что создание криптографических операций всегда достигает успеха. Тем не менее, бэкэнд Keymint имеет только ограниченное количество операционных слотов.

Чтобы сохранить появление «бесконечных» рабочих слотов, демон -хрань ключей будет обрезать наименее недавно использованные операции, если не было доступного операционного слота. В результате хорошие операции можно было бы прекратить преждевременно. Это открыло AndroidKeyStore для отказа в службе (DOS) и непреднамеренного Livelock. Например, если несколько приложений проснулись одновременно из -за оптимизации управления питанием и попытки выполнить криптографические операции, они начинают прекращать операции друг друга, не достигая никакого прогресса.

Чтобы вырваться из Livelocks и препятствовать попыткам DOS, мы изменили стратегию обрезки так, чтобы она предпочитала клиентов, которые кратко используют несколько рабочих слотов. В результате отдельные операции, которые не задерживаются неактивными в течение более 5 секунд, почти всегда завершаются стратегией обрезки. По -прежнему существуют некоторые операции, связанные с шифрованием файловой системы, которые могут обрезать даже эти операции, но эти случаи чрезвычайно редки. В качестве побочного эффекта этой новой стратегии

Стратегия обрезки : чтобы найти подходящего кандидата, мы рассчитываем Малуса для вызывающего абонента и каждой существующей операции. Малус является обратным мощности обрезки (вызывающего абонента) или сопротивления обрезки (существующая операция). Чтобы абонент мог иметь возможность обрезать операцию, он должен найти операцию с малусом выше своей собственной. Для получения более подробной информации о стратегии обрезки см. Внедрение operation.rs . На Android 11 (API -уровне 30) и ниже, KeyStore2 опросил демон хранилища клавиш для бесплатной операции. Для приложений, нацеленных на Android 11 (API -уровни 30) и ниже, все равно будет выглядеть как инициализация зашифрованного и подписного объекта всегда успешно - однако, для получения операции может потребоваться больше времени. Все версии Android выигрывают от более справедливого планирования слотов для операций и лучшего шанса успешно завершить операцию.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Идентификатор изменения: 174664365
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API) и выше, Intent.ACTION_CLOSE_SYSTEM_DIALOGS не может быть отправлено, если приложение также не имеет разрешения android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS . Обратите внимание, что это более ограничительная версия #DROP_CLOSE_SYSTEM_DIALOGS , которая ожидает, что приложение прекратит отправлять намерение отправки Intent.ACTION_CLOSE_SYSTEM_DIALOGS после того, как приложение начнет целевые цели Android 12 (API -уровень 31) или выше.

LOCK_DOWN_COLLAPSE_STATUS_BAR

Идентификатор изменения: 173031413
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, Manifest.permission.STATUS_BAR требуется для свертывания панелей стержней состояния по соображениям безопасности. Это было эксплуатировано вредоносными программами, чтобы предотвратить доступ пользователя доступа к критическим уведомлениям.

LOW_POWER_EXCEPTIONS

Идентификатор изменения: 168936375
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, все объекты LocationRequest , помеченные как исключения с низким уровнем мощности, если у вызывающего абонент нет разрешения LOCATION_HARDWARE , вместо того, чтобы молча сбросить низкую часть мощности запроса.

MISSING_EXPORTED_FLAG

Идентификатор изменения: 150232615
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, должно быть указано явное значение для android:exported атрибут всякий раз, когда определяется фильтр намерения.

Чтобы узнать больше об этом изменении, посмотрите на более безопасный экспорт компонентов .

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

Идентификатор изменения: 207557677
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 32) или выше.

Для приложений, нацеленных на Android 12 (уровень API 32) и выше, нативные распределения кучи в процессе AppZygote и его потомки используют ненулевой метку в наиболее значимом байте.

Чтобы узнать больше об этом изменении, см. Tagged Pointers .

NATIVE_HEAP_ZERO_INIT

Идентификатор изменения: 178038272
Состояние по умолчанию : отключено для всех приложений.

Включить автоматическую нулевую инициализацию нативных распределений памяти кучи.

NATIVE_MEMTAG_ASYNC

Идентификатор изменения: 135772972
Состояние по умолчанию : отключено для всех приложений.

Включите асинхронную (асинхронную) проверку тегов памяти в этом процессе. Этот флаг влияет только на аппаратное обеспечение, поддерживающее расширение тега памяти руки (MTE).

NATIVE_MEMTAG_SYNC

Идентификатор изменения: 177438394
Состояние по умолчанию : отключено для всех приложений.

Включает синхронную (синхронизационную) проверку тегов памяти в этом процессе. Этот флаг влияет только на аппаратное обеспечение, поддерживающее расширение тега памяти руки (MTE). Если оба NATIVE_MEMTAG_ASYNC и эта опция включена, эта опция имеет приоритет, а MTE включен в режим синхронизации.

NEVER_SANDBOX_DISPLAY_APIS

Идентификатор изменения: 184838306
Состояние по умолчанию : отключено для всех приложений.

При включении предотвращает применение песочницы API Display API применять на буквы или активность SCM. API -интерфейсы дисплея будут продолжать предоставлять границы Displayarea.

Чтобы узнать больше об этом изменении, см. Раздел на странице «Изменения в поведении Android 12 о методах отображения» .

NOTIFICATION_CANCELLATION_REASONS

Идентификатор изменения: 175319604
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Позволяет уведомлениям слушателям понять новые причины отмены, которые являются более конкретными.

NOTIFICATION_TRAMPOLINE_BLOCK

Идентификатор изменения: 167676448
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Чтобы повысить производительность приложений и UX, приложения, которые нацелены на Android 12, не могут использовать сервисы или вещательные приемники в качестве батутов уведомлений.

Чтобы узнать больше об этом изменении, см. Батуты уведомлений не могут быть созданы из услуг или вещательных приемников .

NULL_TELEPHONY_THROW_NO_CB

Идентификатор изменения: 182185642
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Используется для проверки, является ли целевой версией SDK для текущего процесса Android 12 (уровень 31) или выше.

Применяется к следующим методам:

OVERRIDE_MIN_ASPECT_RATIO

Идентификатор изменения: 174042980
Состояние по умолчанию : отключено для всех приложений.

Это изменение является привратником всех изменений, которые заставляют заданное минимальное соотношение сторон. Включение этого изменения позволяет применяться следующие минимальные соотношения сторон:

Когда это изменение включено для пакета приложений, минимальное соотношение сторон, приведенное в манифесте приложения, переопределено к наибольшему соотношению сторон, если только явное значение приложения не выше.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Идентификатор изменения: 180326787
Состояние по умолчанию : отключено для всех приложений.

При включении OVERRIDE_MIN_ASPECT_RATIO , включение этого изменения для пакета устанавливает минимальное соотношение сторон активности к большому значению, как определено с помощью OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE .

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Идентификатор изменения: 180326845
Состояние по умолчанию : отключено для всех приложений.

При включении OVERRIDE_MIN_ASPECT_RATIO , включая это изменение для пакета устанавливает минимальное соотношение сторон активности к значению среднего, как определено с помощью OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE .

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

Идентификатор изменения: 160794467
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, вы должны указать измену каждого PendingIntent , которое создает ваше приложение. Это дополнительное требование улучшает безопасность вашего приложения.

Чтобы узнать больше об этом изменении, см. В ожидаемых намерениях должно быть объявлено изменчивость .

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

Идентификатор изменения: 165573442
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Приложения администратора, нацеленные на Android 12 (API -уровне 31) и выше, не могут использовать DevicePolicyManager.setPasswordQuality(ComponentName, int) для установки качества пароля в экземпляре DevicePolicyManager , полученном путем вызова DevicePolicyManager.getParentProfileInstance(ComponentName) . Вместо этого они должны использовать DevicePolicyManager.setRequiredPasswordComplexity(int) для установки крупнозернистых требований к паролям в общем.

RATE_LIMIT_TOASTS

Идентификатор изменения: 174840628
Состояние по умолчанию : это изменение не может быть переключено. Он зарегистрирован только по структуре совместимости.

Позволяет ограничить ставку на количество вызовов Toast.show() , чтобы предотвратить перегрузку пользователя слишком большим количеством тостов в ограниченное время. Любая попытка показать больше тостов, чем разрешений в определенные сроки, приводит к отброшению тоста.

REQUIRE_EXACT_ALARM_PERMISSION

Идентификатор изменения: 171306433
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, приложения должны иметь разрешение Manifest.permission.SCHEDULE_EXACT_ALARM для использования любых API для установки точных сигналов тревоги, таких как setExactAndAllowWhileIdle(int, long, PendingIntent) и setAlarmClock(AlarmClockInfo, PendingIntent) .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

Идентификатор изменения: 182478738
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, приложения должны иметь разрешение Manifest.permission.READ_PHONE_STATE , чтобы позвонить в TelephonyCallback.ActiveDataSubscriptionIdListener .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

Идентификатор изменения: 184323934
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, приложения должны иметь разрешение Manifest.permission.READ_PHONE_STATE , чтобы позвонить TelephonyCallback.CellInfoListener .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

Идентификатор изменения: 183164979
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, приложения должны иметь разрешение Manifest.permission.READ_PHONE_STATE , чтобы позвонить TelephonyCallback.DisplayInfoListener .

RESTRICT_ADB_BACKUP

Идентификатор изменения: 171032338
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровне 31) и выше, adb backup автоматически включается для приложений, работающих в качестве отладчика ( android:debuggable устанавливается true ) и недоступен для любых других приложений.

RESTRICT_DOMAINS

Идентификатор изменения: 175408749
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и выше, требуется обновленная форма проверки API ссылок приложения. Это требование означает, что приложение должно объявлять домены внутри фильтра намерения, который включает в себя все следующее:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Только IntentFilter.SCHEME_HTTP и/или IntentFilter.SCHEME_HTTPS , без других схем

В предыдущих версиях Android, Intent.CATEGORY_BROWSABLE не было требованием, были разрешены другие схемы, и установка autoVerify в true фильтре намерения косвенно притворяется, что все фильтры намерения были установлены на autoVerify="true" .

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

Идентификатор изменения: 151105954
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (уровень 31 API 31) и выше, обеспечивает соблюдение того, что все attributionTags , отправленные в noteOp(String, int, String) , noteProxyOp(String, String) и startOp(String, int, String) определены в манифесте пакета, который указан как параметр методов.

Чтобы включить это изменение, как вызов пакета noteOp(String, int, String) , а также пакет, указанный в качестве параметра метода, должен включить это изменение.

SELINUX_LATEST_CHANGES

Идентификатор изменения: 143539591
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и выше, выбирает последние изменения Selinux. Выключение этого изменения для приложения, нацеленного на Android 12 (API 31) или выше, является NO-OP. Не влияет на приложения, которые используют общий идентификатор пользователя.

SETTINGS_API_V2

Идентификатор изменения: 178111421
Состояние по умолчанию : включено для всех приложений.

Новый API предпочтения пользователя для проверки доменов, помеченных autoVerify=true в Androidmanifest.xml Filters, еще не реализован в предварительном просмотре платформы. На данный момент можно предварительно просмотреть новые изменения предпочтения пользователя, включив это изменение и используя adb shell pm set-app-links-user-selection и аналогичные команды.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

Идентификатор изменения: 183972877
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 31) или выше.

Для приложений, нацеленных на Android 12 (API -уровень 31) и выше, определяет, использовать ли более короткий тайм -аут, прежде чем поднять резервное ведро для ACTIVE , когда приложения начинают службу переднего плана.

,
Рисунок 1. Экран совместимости приложения в параметрах разработчика перечисляет изменения, которые вы можете переключить.

На этой странице описывается каждое изменение поведения, которое является частью структуры совместимости в Android 12 (API -уровне 31). Используйте этот список в сочетании с параметрами разработчика и командами ADB для тестирования и отладки вашего приложения при подготовке к поддержке и нацеливанию на Android 12.

Вот некоторые из вещей, которые вы можете сделать, используя инструменты структуры совместимости:

  • Тестируйте целевые изменения без фактического изменения targetSdkVersion приложения . Вы можете использовать переключатели для принудительного включения определенных целевых изменений поведения, чтобы оценить влияние на ваше существующее приложение.
  • Сосредоточьте свое тестирование только на определенных изменениях . Вместо того, чтобы обрабатывать все целевые изменения одновременно, переключатели позволяют вам отключить все целевые изменения, кроме тех, которые вы хотите протестировать.
  • Управляйте переключателями через adb . Вы можете использовать команды adb для включения и отключения переключаемых изменений в вашей автоматизированной тестовой среде.
  • Ускорьте отладку, используя стандартные идентификаторы изменений . Каждое из переключаемых изменений имеет уникальный идентификатор и имя, которые можно использовать для быстрой отладки первопричины в выходных данных журнала.

Для получения полной информации об использовании инструментов для каждого из этих вариантов использования см. В инструментах Framework Framework .

Изменения поведения включены в структуру совместимости

Список в этом разделе описывает каждое изменение поведения, которое включено в структуру совместимости в Android 12.

Вы можете отфильтровать список изменений по состоянию по умолчанию .

Изменения поведения добавлены в структуру совместимости в Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

Идентификатор изменения: 185004937
Состояние по умолчанию : отключено для всех приложений.

При включении применить песочницу API Display на пакет независимо от режима окон. API -интерфейсы дисплея всегда будут предоставлять границы приложения.

Чтобы узнать больше об этом изменении, см. Раздел на странице «Изменения в поведении Android 12 о методах отображения» .

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

Идентификатор изменения: 163400105
Состояние по умолчанию : включено для приложений, которые нацелены на Android 12 (API -уровень 32) или выше.

Начиная с Android 12, платформа может предоставлять не текстовые предложения (например, изображения), используя дополненную структуру автозаполнения (см. Службы автозаполнения ). Чтобы приложение имело возможность обрабатывать эти предложения, оно должно обычно реализовать API OnReceiveContentListener .

Чтобы сделать принятие этого API более плавным для приложений, которые ранее реализовали API InputConnection.commitContent(InputContentInfo, int, Bundle) , мы повторно используем этот API как запасной, если OnReceiveContentListener еще не реализован приложением. Этот запасной удар включен только на Android 12 (API -уровне 31). Этот идентификатор изменения отключает отступление, так что приложения, нацеленные на Android 12 (API, уровень 32) и выше, должны реализовать API OnReceiveContentListener , чтобы принять не текстовые предложения.

BLOCK_FLAG_SLIPPERY

Идентификатор изменения: 157929241
Состояние по умолчанию : включено для всех приложений.

For apps running on Android 12 (API level 31), checks if FLAG_SLIPPERY is being used with any windows in the app. We expect that this flag is likely only used by the system components as it is an unsupported field . If so, it will be restricted.

BLOCK_GPS_STATUS_USAGE

Change ID: 144027538
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, all GpsStatus API usage must be replaced with GnssStatus APIs.

BLOCK_IMMUTABLE_PENDING_INTENTS

Change ID: 171317480
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, immutable PendingIntent objects that are passed into location APIs will generate an IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

Change ID: 169887240
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, LocationRequest system APIs can't be used with PendingIntent location requests.

BLOCK_UNTRUSTED_TOUCHES

Change ID: 158002302
Default State : Enabled for all apps.

To preserve system security and a good user experience, Android 12 prevents apps from consuming touch events where an overlay blocks the app in an unsafe way.

To learn more about this change, see Untrusted touch events are blocked .

CALL_ACTIVITY_RESULT_BEFORE_RESUME

Change ID: 78294732
Default State : Enabled for apps that target Android 12 (API level 32) or higher.

For apps targeting Android 12 (API level 32) and higher, corrects the lifecycle of activity result to guarantee that an activity gets the activity result just before resume.

CAMERA_MIC_INDICATORS_NOT_PRESENT

Change ID: 162547999
Default State : Disabled for all apps.

Indicates that this device supports camera and microphone indicators. Will be false if present, because the CompatChanges#isChangeEnabled method returns true if the Change ID is not present.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

Change ID: 146211400
Default State : Enabled for apps that target Android 12 (API level 32) or higher.

For apps targeting Android 12 (API level 32) and higher, the package manager will not install a package if there are malformed permission groups. Permission groups should only be shared between apps sharing a certificate. If a permission belongs to a group, that group must also be defined.

CHANGE_ID_AUTH_STATE_DENIED

Change ID: 181350407
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For client apps targeting Android 12 (API level 31) and higher, a SecurityException is thrown when they are in the denied authorization state and attempt to send a message to a nanoapp.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

Change ID: 136069189
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, a SecurityException is thrown when they do not have HIGH_SAMPLING_RATE_SENSORS permission, run in debug mode, and request sampling rates that are faster than 200 Hz.

DELIVER_HISTORICAL_LOCATIONS

Change ID: 73144566
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, location clients may receive historical locations (from before the present time) under some circumstances.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

Change ID: 181658987
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, provides backward compatibility for changes in TelephonyDisplayInfo .

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

Change ID: 170503758
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the platform might throttle down an app's frame rate to a divisor of the refresh rate if it is more preferable (for example, if the app called to Surface.setFrameRate(float, int) ). Apps will experience Choreographer.postFrameCallback(Choreographer.FrameCallback) callbacks and backpressure at the throttled frame rate. Apps use Display.getRefreshRate() and Display.Mode.getRefreshRate() to know what the display refresh rate is. Display.getRefreshRate() will always return the application frame rate and not the physical display refresh rate to allow apps to do frame pacing correctly. Display.Mode.getRefreshRate() will return the app frame rate if compiled to a previous release and starting with Android 12 (API level 31) it will return the physical display refresh rate.

DOWNSCALED

Change ID: 168419799
Default State : Disabled for all apps.

This change is the gatekeeper of all per-app buffer downscaling changes. Enabling this change allows the following scaling factors to be applied:

When this change is enabled for an app package, the app is forcibly resized to the highest, enabled scaling factor. For example, 80% is used if both 80% and 70% ( DOWNSCALE_80 and DOWNSCALE_70 ) are enabled.

DOWNSCALE_30

Change ID: 189970040
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 30% of the vertical and horizontal resolution of the real display.

DOWNSCALE_35

Change ID: 189969749
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 35% of the vertical and horizontal resolution of the real display.

DOWNSCALE_40

Change ID: 189970038
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 40% of the vertical and horizontal resolution of the real display.

DOWNSCALE_45

Change ID: 189969782
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 45% of the vertical and horizontal resolution of the real display.

DOWNSCALE_50

Change ID: 176926741
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 50% of the vertical and horizontal resolution of the real display.

DOWNSCALE_55

Change ID: 189970036
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 55% of the vertical and horizontal resolution of the real display.

DOWNSCALE_60

Change ID: 176926771
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 60% of the vertical and horizontal resolution of the real display.

DOWNSCALE_65

Change ID: 189969744
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 65% of the vertical and horizontal resolution of the real display.

DOWNSCALE_70

Change ID: 176926829
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 70% of the vertical and horizontal resolution of the real display.

DOWNSCALE_75

Change ID: 189969779
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 75% of the vertical and horizontal resolution of the real display.

DOWNSCALE_80

Change ID: 176926753
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 80% of the vertical and horizontal resolution of the real display.

DOWNSCALE_85

Change ID: 189969734
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 85% of the vertical and horizontal resolution of the real display.

DOWNSCALE_90

Change ID: 182811243
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 90% of the vertical and horizontal resolution of the real display.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

Change ID: 157629738
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Android TV apps targeting Android 12 (API level 31) and higher are expected to handle any Window size, including Window sizes greater than 1080p. Apps that target earlier versions of Android do not expect to receive Windows larger than 1080p, so their Windows are downscaled to 1080p when necessary.

DROP_CLOSE_SYSTEM_DIALOGS

Change ID: 174664120
Default State : Enabled for all apps.

To improve user control when interacting with apps and the system, the ACTION_CLOSE_SYSTEM_DIALOGS intent action is deprecated as of Android 12.

To learn more about this change, see Apps can't close system dialogs .

ENABLE_CHECKS_FOR_PRIVATE_FILES

Change ID: 172100307
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Apps targeting Android 12 (API level 31) and higher can't insert or update private files using media provider.

ENABLE_DEFERRED_SCAN

Change ID: 180326732
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Enable this option to defer the scan that is triggered as part of MediaProvider#update() .

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

Change ID: 157233955
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, enables READ_PHONE_STATE protection on APIs querying and notifying call state, such as TelecomManager#getCallState , TelephonyManager.getCallStateForSubscription() , and TelephonyCallback.CallStateListener .

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

Change ID: 183407956
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, enables READ_PHONE_NUMBERS or READ_PRIVILEGED_PHONE_STATE protections on getPhoneAccount(PhoneAccountHandle) .

ENABLE_INCLUDE_ALL_VOLUMES

Change ID: 182734110
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Enable this option to include database rows of files from a recently unmounted volume in MediaProvider#query .

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

Change ID: 178209446
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Enable this option to allow apps holding the Manifest.permission.MANAGE_EXTERNAL_STORAGE permission to request raw external storage access.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

Change ID: 185199076
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, all inexact alarms are required to have a minimum window size, expected to be on the order of a few minutes. Practically, any alarms requiring smaller windows are the same as exact alarms and should use the corresponding APIs provided, such as setExact(int, long, PendingIntent) . Inexact alarm with shorter windows specified will have their windows elongated by the system.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

Change ID: 142191088
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Apps targeting Android 12 (API level 31) and higher need to declare dependencies to the public native shared libraries that are defined by the device maker using uses-native-library tag in its AndroidManifest.xml . If any of the dependencies can't be satisfied—for example, one of the dependencies doesn't exist—the package manager won't install the app. The dependency can be specified as optional using the android:required attribute in the tag, in which case failing to satisfy the dependency won't stop the installation.

Once installed, an app is provided with only the native shared libraries that are specified in the app manifest. Calling dlopen on a native shared library that doesn't appear in the app manifest will fail even if it actually exists on the device.

ENFORCE_STRICT_QUERY_BUILDER

Change ID: 143231523
Default State : Disabled for all apps.

When enabled, the SQLiteQueryBuilder verifies all CalendarProvider2 query selections against malicious arguments.

FGS_BG_START_RESTRICTION_CHANGE_ID

Change ID: 170668199
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, restricts when apps can start foreground services while running in the background.

FGS_START_EXCEPTION_CHANGE_ID

Change ID: 174041399
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, enables the system to throw an IllegalStateException if an app attempts to start a foreground service while running in the background.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Change ID: 156215187
Default State : Disabled for all apps.

For apps targeting Android 12 (API level 31) and higher, finish the InputConnection when the device becomes non-interactive .

If enabled by the current input method , the current input connection will be finished whenever the devices becomes non-interactive.

If not enabled, the current input connection will instead be silently deactivated when the devices becomes non-interactive, and an onFinishInput() and onStartInput() pair is dispatched when the device becomes interactive again.

FORCE_DISABLE_HEVC_SUPPORT

Change ID: 174227820
Default State : Disabled for all apps.

Force disable an app from supporting the HEVC media capability. Apps should declare their supported media capabilities in their manifest but this flag can be used to force an app into not supporting HEVC, hence forcing transcoding while accessing media encoded in HEVC. Setting this flag overrides any OS level defaults for apps. It is disabled by default, meaning that the OS defaults take precedence. If both this flag and FORCE_ENABLE_HEVC_SUPPORT are enabled, the OS ignores both flags.

FORCE_ENABLE_HEVC_SUPPORT

Change ID: 174228127
Default State : Disabled for all apps.

Force enable an app to support the HEVC media capability Apps should declare their supported media capabilities in their manifest but this flag can be used to force an app into supporting HEVC, hence avoiding transcoding while accessing media encoded in HEVC. Setting this flag overrides any OS level defaults for apps. It is disabled by default, meaning that the OS defaults would take precedence. If both this flag and FORCE_DISABLE_HEVC_SUPPORT are enabled, the OS ignores both flags.

FORCE_NON_RESIZE_APP

Change ID: 181136395
Default State : Disabled for all apps.

Forces the packages it is applied to to be non-resizable.

FORCE_RESIZE_APP

Change ID: 174042936
Default State : Disabled for all apps.

Forces the packages it is applied to to be resizable. We only allow resizing in fullscreen windowing mode, but not forcing the app into resizable multi-windowing mode.

HIDE_PROP_ICUBINARY_DATA_PATH

Change ID: 171979766
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, removes access to the android.icu.impl.ICUBinary.dataPath property.

IGNORE_ALLOW_BACKUP_IN_D2D

Change ID: 183147249
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, android:allowBackup is ignored for apps during device-to-device (D2D) migrations.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Change ID: 180523564
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, include and exclude rules specified using android:fullBackupContent are ignored during device-to-device (D2D) transfers.

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

Change ID: 169273070
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, getSupportedLocales() now returns an empty locale list when it's not set, instead of the default system locale.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Change ID: 158482162
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the BACKUP permission needed for isBackupServiceActive() is enforced on the service-side rather than client-side in BackupManager .

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Change ID: 169897160
Default State : Disabled for all apps.

When enabled, keystore operation creation might fail according to the new pruning strategy. Keystore used to work under the assumption that the creation of cryptographic operations always succeeds. However, the KeyMint backend has only a limited number of operation slots.

In order to keep up the appearance of "infinite" operation slots, the Keystore daemon would prune least recently used operations if there was no available operation slot. As a result, good operations could be terminated prematurely. This opened up AndroidKeystore up to denial-of-service (DoS) and unintended livelock. For example, if multiple apps woke up at the same time due to power management optimizations and attempted to perform crypto operations, they start terminating each others operations without making any progress.

To break out of livelocks and to discourage DoS attempts, we have changed the pruning strategy for such that it prefers clients that use few operation slots briefly. As a result, single operations that don't linger inactive for more than 5 seconds will almost always conclude unhampered by the pruning strategy. There are still some operations related to file system encryption that can prune even these operations, but those cases are extremely rare. As a side effect of this new pruning strategy operation, creation can now fail if the client has a lower pruning power than all of the existing operations.

Pruning strategy : To find a suitable candidate, we compute the malus for the caller and each existing operation. The malus is the inverse of the pruning power (caller) or pruning resistance (existing operation). For the caller to be able to prune an operation, it must find an operation with a malus higher than its own. For more details on the pruning strategy, see the implementation of operation.rs . On Android 11 (API level 30) and lower, KeyStore2 will poll the Keystore daemon for a free operation slot. For apps targeting Android 11 (API level 30) and lower, it will still look like cipher and signature object initialization always succeeds—however, it may take longer to get an operation. All Android versions benefit from fairer operation slot scheduling and a better chance to successfully conclude an operation.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Change ID: 174664365
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the Intent.ACTION_CLOSE_SYSTEM_DIALOGS can't be sent unless the app also has the android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS permission. Note that this is the more restrictive version of #DROP_CLOSE_SYSTEM_DIALOGS that expects the app to stop sending the Intent.ACTION_CLOSE_SYSTEM_DIALOGS intent once the app starts targets Android 12 (API level 31) or higher.

LOCK_DOWN_COLLAPSE_STATUS_BAR

Change ID: 173031413
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the Manifest.permission.STATUS_BAR permission is required to collapse the status bar panels due to security reasons. This was being exploited by malware to prevent the user from accessing critical notifications.

LOW_POWER_EXCEPTIONS

Change ID: 168936375
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, all LocationRequest objects marked as low power throw exceptions if the caller does not have the LOCATION_HARDWARE permission, instead of silently dropping the low power part of the request.

MISSING_EXPORTED_FLAG

Change ID: 150232615
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, an explicit value must be specified for the android:exported attribute whenever an intent filter is defined.

To learn more about this change, see Safer exporting of components .

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

Change ID: 207557677
Default State : Enabled for apps that target Android 12 (API level 32) or higher.

For apps targeting Android 12 (API level 32) and higher, native heap allocations in AppZygote process and its descendants use a non-zero tag in the most significant byte.

To learn more about this change, see Tagged Pointers .

NATIVE_HEAP_ZERO_INIT

Change ID: 178038272
Default State : Disabled for all apps.

Enable automatic zero-initialization of native heap memory allocations.

NATIVE_MEMTAG_ASYNC

Change ID: 135772972
Default State : Disabled for all apps.

Enable asynchronous (ASYNC) memory tag checking in this process. This flag only affects hardware supporting the ARM Memory Tagging Extension (MTE).

NATIVE_MEMTAG_SYNC

Change ID: 177438394
Default State : Disabled for all apps.

Enables synchronous (SYNC) memory tag checking in this process. This flag only affects hardware supporting the ARM Memory Tagging Extension (MTE). If both NATIVE_MEMTAG_ASYNC and this option are enabled, this option takes precedence and MTE is enabled in SYNC mode.

NEVER_SANDBOX_DISPLAY_APIS

Change ID: 184838306
Default State : Disabled for all apps.

When enabled, prevents Display API sandboxing from applying to a letterbox or SCM activity. The Display APIs will continue to provide DisplayArea bounds.

To learn more about this change, see the section in the Android 12 behavior changes page about Display methods that were deprecated .

NOTIFICATION_CANCELLATION_REASONS

Change ID: 175319604
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Allows notification listeners to understand new cancellation reasons that are more specific.

NOTIFICATION_TRAMPOLINE_BLOCK

Change ID: 167676448
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

To improve app performance and UX, apps that target Android 12 cannot use services or broadcast receivers as notification trampolines.

To learn more about this change, see Notification trampolines cannot be created from services or broadcast receivers .

NULL_TELEPHONY_THROW_NO_CB

Change ID: 182185642
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Used for checking if the target SDK version for the current process is Android 12 (API level 31) or higher.

Applies to the following methods:

OVERRIDE_MIN_ASPECT_RATIO

Change ID: 174042980
Default State : Disabled for all apps.

This change is the gatekeeper of all changes that force a given minimum aspect ratio. Enabling this change allows the following minimum aspect ratios to be applied:

When this change is enabled for an app package, the minimum aspect ratio given in the app's manifest is overridden to the largest enabled aspect ratio unless the app's manifest value is higher.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Change ID: 180326787
Default State : Disabled for all apps.

When OVERRIDE_MIN_ASPECT_RATIO is also enabled, enabling this change for a package sets the activity's minimum aspect ratio to a large value as defined by OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE .

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Change ID: 180326845
Default State : Disabled for all apps.

When OVERRIDE_MIN_ASPECT_RATIO is also enabled, enabling this change for a package sets the activity's minimum aspect ratio to a medium value as defined by OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE .

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

Change ID: 160794467
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, you must specify the mutability of each PendingIntent object that your app creates. This additional requirement improves your app's security.

To learn more about this change, see Pending intents must declare mutability .

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

Change ID: 165573442
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Admin apps targeting Android 12 (API level 31) and higher can't use DevicePolicyManager.setPasswordQuality(ComponentName, int) to set password quality on the DevicePolicyManager instance obtained by calling DevicePolicyManager.getParentProfileInstance(ComponentName) . Instead, they should use DevicePolicyManager.setRequiredPasswordComplexity(int) to set coarse-grained password requirements device-wide.

RATE_LIMIT_TOASTS

Change ID: 174840628
Default State : This change can't be toggled. It is only logged by the compatibility framework.

Enables rate limiting on the number of Toast.show() calls to prevent overburdening the user with too many toasts in a limited time. Any attempt to show more toasts than allowed in a certain timeframe results in the toast being discarded.

REQUIRE_EXACT_ALARM_PERMISSION

Change ID: 171306433
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, apps must have the Manifest.permission.SCHEDULE_EXACT_ALARM permission in order to use any APIs for setting exact alarms, such as setExactAndAllowWhileIdle(int, long, PendingIntent) and setAlarmClock(AlarmClockInfo, PendingIntent) .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

Change ID: 182478738
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, apps must have the Manifest.permission.READ_PHONE_STATE permission in order to call TelephonyCallback.ActiveDataSubscriptionIdListener .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

Change ID: 184323934
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, apps must have the Manifest.permission.READ_PHONE_STATE permission in order to call TelephonyCallback.CellInfoListener .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

Change ID: 183164979
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, apps must have the Manifest.permission.READ_PHONE_STATE permission in order to call TelephonyCallback.DisplayInfoListener .

RESTRICT_ADB_BACKUP

Change ID: 171032338
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, adb backup is automatically turned on for apps running as debuggable ( android:debuggable set to true ) and unavailable to any other apps.

RESTRICT_DOMAINS

Change ID: 175408749
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the updated form of the app links verification API is required. This requirement means an app must declare domains inside an intent filter that includes all of the following:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Only IntentFilter.SCHEME_HTTP and/or IntentFilter.SCHEME_HTTPS , with no other schemes

On prior versions of Android, Intent.CATEGORY_BROWSABLE was not a requirement, other schemes were allowed, and setting autoVerify to true in any intent filter would implicitly pretend that all intent filters were set to autoVerify="true" .

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

Change ID: 151105954
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, enforces that all attributionTags sent to noteOp(String, int, String) , noteProxyOp(String, String) , and startOp(String, int, String) are defined in the manifest of the package that is specified as a parameter of the methods.

To enable this change, both the package calling noteOp(String, int, String) as well as the package specified as a parameter of the method must have this change enabled.

SELINUX_LATEST_CHANGES

Change ID: 143539591
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, opts in to the latest SELinux changes. Turning this change off for an app targeting Android 12 (API level 31) or higher is a no-op. Has no effect for apps that use a shared user id.

SETTINGS_API_V2

Change ID: 178111421
Default State : Enabled for all apps.

The new user preference API for verifying domains marked autoVerify=true in AndroidManifest.xml intent filters is not yet implemented in the current platform preview. For now, it is possible to preview the new user preference changes by enabling this ChangeId and using the adb shell pm set-app-links-user-selection and similar commands.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

Change ID: 183972877
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, determines whether to use a shorter timeout before elevating the standby bucket to ACTIVE when apps start a foreground service.

,
Figure 1 . The App Compatibility Changes screen in developer options lists the changes that you can toggle.

This page describes each behavior change that is part of the compatibility framework in Android 12 (API level 31). Use this list in conjunction with the developer options and ADB commands to test and debug your app as you prepare to support and target Android 12.

Here are some of the things you can do using the compatibility framework tools:

  • Тестируйте целевые изменения без фактического изменения targetSdkVersion приложения . Вы можете использовать переключатели для принудительного включения определенных целевых изменений поведения, чтобы оценить влияние на ваше существующее приложение.
  • Сосредоточьте свое тестирование только на определенных изменениях . Вместо того, чтобы обрабатывать все целевые изменения одновременно, переключатели позволяют вам отключить все целевые изменения, кроме тех, которые вы хотите протестировать.
  • Управляйте переключателями через adb . Вы можете использовать команды adb для включения и отключения переключаемых изменений в вашей автоматизированной тестовой среде.
  • Ускорьте отладку, используя стандартные идентификаторы изменений . Каждое из переключаемых изменений имеет уникальный идентификатор и имя, которые можно использовать для быстрой отладки первопричины в выходных данных журнала.

For complete details on using the tools for each of these use cases, see Compatibility framework tools .

Behavior changes included in the compatibility framework

The list in this section describes each behavior change that is included in the compatibility framework in Android 12.

You can filter the list of changes by Default State .

Behavior changes added to the compatibility framework in Android 12

ALWAYS_SANDBOX_DISPLAY_APIS

Change ID: 185004937
Default State : Disabled for all apps.

When enabled, applies Display API sandboxing to a package regardless of windowing mode. The Display APIs will always provide the app bounds.

To learn more about this change, see the section in the Android 12 behavior changes page about Display methods that were deprecated .

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

Change ID: 163400105
Default State : Enabled for apps that target Android 12 (API level 32) or higher.

Starting in Android 12, the platform can provide non-text suggestions (such as images) using the augmented autofill framework (see autofill services ). In order for an app to be able to handle these suggestions, it must normally implement the OnReceiveContentListener API.

To make the adoption of this API smoother for apps that have previously implemented the InputConnection.commitContent(InputContentInfo, int, Bundle) API, we reuse that API as a fallback if OnReceiveContentListener is not yet implemented by the app. This fallback is only enabled on Android 12 (API level 31). This change ID disables the fallback, such that apps targeting Android 12 (API level 32) and above must implement the OnReceiveContentListener API in order to accept non-text suggestions.

BLOCK_FLAG_SLIPPERY

Change ID: 157929241
Default State : Enabled for all apps.

For apps running on Android 12 (API level 31), checks if FLAG_SLIPPERY is being used with any windows in the app. We expect that this flag is likely only used by the system components as it is an unsupported field . If so, it will be restricted.

BLOCK_GPS_STATUS_USAGE

Change ID: 144027538
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, all GpsStatus API usage must be replaced with GnssStatus APIs.

BLOCK_IMMUTABLE_PENDING_INTENTS

Change ID: 171317480
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, immutable PendingIntent objects that are passed into location APIs will generate an IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

Change ID: 169887240
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, LocationRequest system APIs can't be used with PendingIntent location requests.

BLOCK_UNTRUSTED_TOUCHES

Change ID: 158002302
Default State : Enabled for all apps.

To preserve system security and a good user experience, Android 12 prevents apps from consuming touch events where an overlay blocks the app in an unsafe way.

To learn more about this change, see Untrusted touch events are blocked .

CALL_ACTIVITY_RESULT_BEFORE_RESUME

Change ID: 78294732
Default State : Enabled for apps that target Android 12 (API level 32) or higher.

For apps targeting Android 12 (API level 32) and higher, corrects the lifecycle of activity result to guarantee that an activity gets the activity result just before resume.

CAMERA_MIC_INDICATORS_NOT_PRESENT

Change ID: 162547999
Default State : Disabled for all apps.

Indicates that this device supports camera and microphone indicators. Will be false if present, because the CompatChanges#isChangeEnabled method returns true if the Change ID is not present.

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

Change ID: 146211400
Default State : Enabled for apps that target Android 12 (API level 32) or higher.

For apps targeting Android 12 (API level 32) and higher, the package manager will not install a package if there are malformed permission groups. Permission groups should only be shared between apps sharing a certificate. If a permission belongs to a group, that group must also be defined.

CHANGE_ID_AUTH_STATE_DENIED

Change ID: 181350407
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For client apps targeting Android 12 (API level 31) and higher, a SecurityException is thrown when they are in the denied authorization state and attempt to send a message to a nanoapp.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

Change ID: 136069189
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, a SecurityException is thrown when they do not have HIGH_SAMPLING_RATE_SENSORS permission, run in debug mode, and request sampling rates that are faster than 200 Hz.

DELIVER_HISTORICAL_LOCATIONS

Change ID: 73144566
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, location clients may receive historical locations (from before the present time) under some circumstances.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

Change ID: 181658987
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, provides backward compatibility for changes in TelephonyDisplayInfo .

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

Change ID: 170503758
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the platform might throttle down an app's frame rate to a divisor of the refresh rate if it is more preferable (for example, if the app called to Surface.setFrameRate(float, int) ). Apps will experience Choreographer.postFrameCallback(Choreographer.FrameCallback) callbacks and backpressure at the throttled frame rate. Apps use Display.getRefreshRate() and Display.Mode.getRefreshRate() to know what the display refresh rate is. Display.getRefreshRate() will always return the application frame rate and not the physical display refresh rate to allow apps to do frame pacing correctly. Display.Mode.getRefreshRate() will return the app frame rate if compiled to a previous release and starting with Android 12 (API level 31) it will return the physical display refresh rate.

DOWNSCALED

Change ID: 168419799
Default State : Disabled for all apps.

This change is the gatekeeper of all per-app buffer downscaling changes. Enabling this change allows the following scaling factors to be applied:

When this change is enabled for an app package, the app is forcibly resized to the highest, enabled scaling factor. For example, 80% is used if both 80% and 70% ( DOWNSCALE_80 and DOWNSCALE_70 ) are enabled.

DOWNSCALE_30

Change ID: 189970040
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 30% of the vertical and horizontal resolution of the real display.

DOWNSCALE_35

Change ID: 189969749
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 35% of the vertical and horizontal resolution of the real display.

DOWNSCALE_40

Change ID: 189970038
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 40% of the vertical and horizontal resolution of the real display.

DOWNSCALE_45

Change ID: 189969782
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 45% of the vertical and horizontal resolution of the real display.

DOWNSCALE_50

Change ID: 176926741
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 50% of the vertical and horizontal resolution of the real display.

DOWNSCALE_55

Change ID: 189970036
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 55% of the vertical and horizontal resolution of the real display.

DOWNSCALE_60

Change ID: 176926771
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 60% of the vertical and horizontal resolution of the real display.

DOWNSCALE_65

Change ID: 189969744
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 65% of the vertical and horizontal resolution of the real display.

DOWNSCALE_70

Change ID: 176926829
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 70% of the vertical and horizontal resolution of the real display.

DOWNSCALE_75

Change ID: 189969779
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 75% of the vertical and horizontal resolution of the real display.

DOWNSCALE_80

Change ID: 176926753
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 80% of the vertical and horizontal resolution of the real display.

DOWNSCALE_85

Change ID: 189969734
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 85% of the vertical and horizontal resolution of the real display.

DOWNSCALE_90

Change ID: 182811243
Default State : Disabled for all apps.

When DOWNSCALED is also enabled, enabling this change for a package forces the app to assume it's running on a display with 90% of the vertical and horizontal resolution of the real display.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

Change ID: 157629738
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Android TV apps targeting Android 12 (API level 31) and higher are expected to handle any Window size, including Window sizes greater than 1080p. Apps that target earlier versions of Android do not expect to receive Windows larger than 1080p, so their Windows are downscaled to 1080p when necessary.

DROP_CLOSE_SYSTEM_DIALOGS

Change ID: 174664120
Default State : Enabled for all apps.

To improve user control when interacting with apps and the system, the ACTION_CLOSE_SYSTEM_DIALOGS intent action is deprecated as of Android 12.

To learn more about this change, see Apps can't close system dialogs .

ENABLE_CHECKS_FOR_PRIVATE_FILES

Change ID: 172100307
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Apps targeting Android 12 (API level 31) and higher can't insert or update private files using media provider.

ENABLE_DEFERRED_SCAN

Change ID: 180326732
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Enable this option to defer the scan that is triggered as part of MediaProvider#update() .

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

Change ID: 157233955
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, enables READ_PHONE_STATE protection on APIs querying and notifying call state, such as TelecomManager#getCallState , TelephonyManager.getCallStateForSubscription() , and TelephonyCallback.CallStateListener .

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

Change ID: 183407956
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, enables READ_PHONE_NUMBERS or READ_PRIVILEGED_PHONE_STATE protections on getPhoneAccount(PhoneAccountHandle) .

ENABLE_INCLUDE_ALL_VOLUMES

Change ID: 182734110
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Enable this option to include database rows of files from a recently unmounted volume in MediaProvider#query .

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

Change ID: 178209446
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Enable this option to allow apps holding the Manifest.permission.MANAGE_EXTERNAL_STORAGE permission to request raw external storage access.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

Change ID: 185199076
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, all inexact alarms are required to have a minimum window size, expected to be on the order of a few minutes. Practically, any alarms requiring smaller windows are the same as exact alarms and should use the corresponding APIs provided, such as setExact(int, long, PendingIntent) . Inexact alarm with shorter windows specified will have their windows elongated by the system.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

Change ID: 142191088
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Apps targeting Android 12 (API level 31) and higher need to declare dependencies to the public native shared libraries that are defined by the device maker using uses-native-library tag in its AndroidManifest.xml . If any of the dependencies can't be satisfied—for example, one of the dependencies doesn't exist—the package manager won't install the app. The dependency can be specified as optional using the android:required attribute in the tag, in which case failing to satisfy the dependency won't stop the installation.

Once installed, an app is provided with only the native shared libraries that are specified in the app manifest. Calling dlopen on a native shared library that doesn't appear in the app manifest will fail even if it actually exists on the device.

ENFORCE_STRICT_QUERY_BUILDER

Change ID: 143231523
Default State : Disabled for all apps.

When enabled, the SQLiteQueryBuilder verifies all CalendarProvider2 query selections against malicious arguments.

FGS_BG_START_RESTRICTION_CHANGE_ID

Change ID: 170668199
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, restricts when apps can start foreground services while running in the background.

FGS_START_EXCEPTION_CHANGE_ID

Change ID: 174041399
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, enables the system to throw an IllegalStateException if an app attempts to start a foreground service while running in the background.

FINISH_INPUT_NO_FALLBACK_CONNECTION

Change ID: 156215187
Default State : Disabled for all apps.

For apps targeting Android 12 (API level 31) and higher, finish the InputConnection when the device becomes non-interactive .

If enabled by the current input method , the current input connection will be finished whenever the devices becomes non-interactive.

If not enabled, the current input connection will instead be silently deactivated when the devices becomes non-interactive, and an onFinishInput() and onStartInput() pair is dispatched when the device becomes interactive again.

FORCE_DISABLE_HEVC_SUPPORT

Change ID: 174227820
Default State : Disabled for all apps.

Force disable an app from supporting the HEVC media capability. Apps should declare their supported media capabilities in their manifest but this flag can be used to force an app into not supporting HEVC, hence forcing transcoding while accessing media encoded in HEVC. Setting this flag overrides any OS level defaults for apps. It is disabled by default, meaning that the OS defaults take precedence. If both this flag and FORCE_ENABLE_HEVC_SUPPORT are enabled, the OS ignores both flags.

FORCE_ENABLE_HEVC_SUPPORT

Change ID: 174228127
Default State : Disabled for all apps.

Force enable an app to support the HEVC media capability Apps should declare their supported media capabilities in their manifest but this flag can be used to force an app into supporting HEVC, hence avoiding transcoding while accessing media encoded in HEVC. Setting this flag overrides any OS level defaults for apps. It is disabled by default, meaning that the OS defaults would take precedence. If both this flag and FORCE_DISABLE_HEVC_SUPPORT are enabled, the OS ignores both flags.

FORCE_NON_RESIZE_APP

Change ID: 181136395
Default State : Disabled for all apps.

Forces the packages it is applied to to be non-resizable.

FORCE_RESIZE_APP

Change ID: 174042936
Default State : Disabled for all apps.

Forces the packages it is applied to to be resizable. We only allow resizing in fullscreen windowing mode, but not forcing the app into resizable multi-windowing mode.

HIDE_PROP_ICUBINARY_DATA_PATH

Change ID: 171979766
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, removes access to the android.icu.impl.ICUBinary.dataPath property.

IGNORE_ALLOW_BACKUP_IN_D2D

Change ID: 183147249
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, android:allowBackup is ignored for apps during device-to-device (D2D) migrations.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

Change ID: 180523564
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, include and exclude rules specified using android:fullBackupContent are ignored during device-to-device (D2D) transfers.

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

Change ID: 169273070
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, getSupportedLocales() now returns an empty locale list when it's not set, instead of the default system locale.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Change ID: 158482162
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the BACKUP permission needed for isBackupServiceActive() is enforced on the service-side rather than client-side in BackupManager .

KEYSTORE_OPERATION_CREATION_MAY_FAIL

Change ID: 169897160
Default State : Disabled for all apps.

When enabled, keystore operation creation might fail according to the new pruning strategy. Keystore used to work under the assumption that the creation of cryptographic operations always succeeds. However, the KeyMint backend has only a limited number of operation slots.

In order to keep up the appearance of "infinite" operation slots, the Keystore daemon would prune least recently used operations if there was no available operation slot. As a result, good operations could be terminated prematurely. This opened up AndroidKeystore up to denial-of-service (DoS) and unintended livelock. For example, if multiple apps woke up at the same time due to power management optimizations and attempted to perform crypto operations, they start terminating each others operations without making any progress.

To break out of livelocks and to discourage DoS attempts, we have changed the pruning strategy for such that it prefers clients that use few operation slots briefly. As a result, single operations that don't linger inactive for more than 5 seconds will almost always conclude unhampered by the pruning strategy. There are still some operations related to file system encryption that can prune even these operations, but those cases are extremely rare. As a side effect of this new pruning strategy operation, creation can now fail if the client has a lower pruning power than all of the existing operations.

Pruning strategy : To find a suitable candidate, we compute the malus for the caller and each existing operation. The malus is the inverse of the pruning power (caller) or pruning resistance (existing operation). For the caller to be able to prune an operation, it must find an operation with a malus higher than its own. For more details on the pruning strategy, see the implementation of operation.rs . On Android 11 (API level 30) and lower, KeyStore2 will poll the Keystore daemon for a free operation slot. For apps targeting Android 11 (API level 30) and lower, it will still look like cipher and signature object initialization always succeeds—however, it may take longer to get an operation. All Android versions benefit from fairer operation slot scheduling and a better chance to successfully conclude an operation.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Change ID: 174664365
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the Intent.ACTION_CLOSE_SYSTEM_DIALOGS can't be sent unless the app also has the android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS permission. Note that this is the more restrictive version of #DROP_CLOSE_SYSTEM_DIALOGS that expects the app to stop sending the Intent.ACTION_CLOSE_SYSTEM_DIALOGS intent once the app starts targets Android 12 (API level 31) or higher.

LOCK_DOWN_COLLAPSE_STATUS_BAR

Change ID: 173031413
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the Manifest.permission.STATUS_BAR permission is required to collapse the status bar panels due to security reasons. This was being exploited by malware to prevent the user from accessing critical notifications.

LOW_POWER_EXCEPTIONS

Change ID: 168936375
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, all LocationRequest objects marked as low power throw exceptions if the caller does not have the LOCATION_HARDWARE permission, instead of silently dropping the low power part of the request.

MISSING_EXPORTED_FLAG

Change ID: 150232615
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, an explicit value must be specified for the android:exported attribute whenever an intent filter is defined.

To learn more about this change, see Safer exporting of components .

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

Change ID: 207557677
Default State : Enabled for apps that target Android 12 (API level 32) or higher.

For apps targeting Android 12 (API level 32) and higher, native heap allocations in AppZygote process and its descendants use a non-zero tag in the most significant byte.

To learn more about this change, see Tagged Pointers .

NATIVE_HEAP_ZERO_INIT

Change ID: 178038272
Default State : Disabled for all apps.

Enable automatic zero-initialization of native heap memory allocations.

NATIVE_MEMTAG_ASYNC

Change ID: 135772972
Default State : Disabled for all apps.

Enable asynchronous (ASYNC) memory tag checking in this process. This flag only affects hardware supporting the ARM Memory Tagging Extension (MTE).

NATIVE_MEMTAG_SYNC

Change ID: 177438394
Default State : Disabled for all apps.

Enables synchronous (SYNC) memory tag checking in this process. This flag only affects hardware supporting the ARM Memory Tagging Extension (MTE). If both NATIVE_MEMTAG_ASYNC and this option are enabled, this option takes precedence and MTE is enabled in SYNC mode.

NEVER_SANDBOX_DISPLAY_APIS

Change ID: 184838306
Default State : Disabled for all apps.

When enabled, prevents Display API sandboxing from applying to a letterbox or SCM activity. The Display APIs will continue to provide DisplayArea bounds.

To learn more about this change, see the section in the Android 12 behavior changes page about Display methods that were deprecated .

NOTIFICATION_CANCELLATION_REASONS

Change ID: 175319604
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Allows notification listeners to understand new cancellation reasons that are more specific.

NOTIFICATION_TRAMPOLINE_BLOCK

Change ID: 167676448
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

To improve app performance and UX, apps that target Android 12 cannot use services or broadcast receivers as notification trampolines.

To learn more about this change, see Notification trampolines cannot be created from services or broadcast receivers .

NULL_TELEPHONY_THROW_NO_CB

Change ID: 182185642
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Used for checking if the target SDK version for the current process is Android 12 (API level 31) or higher.

Applies to the following methods:

OVERRIDE_MIN_ASPECT_RATIO

Change ID: 174042980
Default State : Disabled for all apps.

This change is the gatekeeper of all changes that force a given minimum aspect ratio. Enabling this change allows the following minimum aspect ratios to be applied:

When this change is enabled for an app package, the minimum aspect ratio given in the app's manifest is overridden to the largest enabled aspect ratio unless the app's manifest value is higher.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Change ID: 180326787
Default State : Disabled for all apps.

When OVERRIDE_MIN_ASPECT_RATIO is also enabled, enabling this change for a package sets the activity's minimum aspect ratio to a large value as defined by OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE .

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Change ID: 180326845
Default State : Disabled for all apps.

When OVERRIDE_MIN_ASPECT_RATIO is also enabled, enabling this change for a package sets the activity's minimum aspect ratio to a medium value as defined by OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE .

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

Change ID: 160794467
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, you must specify the mutability of each PendingIntent object that your app creates. This additional requirement improves your app's security.

To learn more about this change, see Pending intents must declare mutability .

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

Change ID: 165573442
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

Admin apps targeting Android 12 (API level 31) and higher can't use DevicePolicyManager.setPasswordQuality(ComponentName, int) to set password quality on the DevicePolicyManager instance obtained by calling DevicePolicyManager.getParentProfileInstance(ComponentName) . Instead, they should use DevicePolicyManager.setRequiredPasswordComplexity(int) to set coarse-grained password requirements device-wide.

RATE_LIMIT_TOASTS

Change ID: 174840628
Default State : This change can't be toggled. It is only logged by the compatibility framework.

Enables rate limiting on the number of Toast.show() calls to prevent overburdening the user with too many toasts in a limited time. Any attempt to show more toasts than allowed in a certain timeframe results in the toast being discarded.

REQUIRE_EXACT_ALARM_PERMISSION

Change ID: 171306433
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, apps must have the Manifest.permission.SCHEDULE_EXACT_ALARM permission in order to use any APIs for setting exact alarms, such as setExactAndAllowWhileIdle(int, long, PendingIntent) and setAlarmClock(AlarmClockInfo, PendingIntent) .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

Change ID: 182478738
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, apps must have the Manifest.permission.READ_PHONE_STATE permission in order to call TelephonyCallback.ActiveDataSubscriptionIdListener .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

Change ID: 184323934
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, apps must have the Manifest.permission.READ_PHONE_STATE permission in order to call TelephonyCallback.CellInfoListener .

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

Change ID: 183164979
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, apps must have the Manifest.permission.READ_PHONE_STATE permission in order to call TelephonyCallback.DisplayInfoListener .

RESTRICT_ADB_BACKUP

Change ID: 171032338
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, adb backup is automatically turned on for apps running as debuggable ( android:debuggable set to true ) and unavailable to any other apps.

RESTRICT_DOMAINS

Change ID: 175408749
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, the updated form of the app links verification API is required. This requirement means an app must declare domains inside an intent filter that includes all of the following:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • Only IntentFilter.SCHEME_HTTP and/or IntentFilter.SCHEME_HTTPS , with no other schemes

On prior versions of Android, Intent.CATEGORY_BROWSABLE was not a requirement, other schemes were allowed, and setting autoVerify to true in any intent filter would implicitly pretend that all intent filters were set to autoVerify="true" .

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

Change ID: 151105954
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, enforces that all attributionTags sent to noteOp(String, int, String) , noteProxyOp(String, String) , and startOp(String, int, String) are defined in the manifest of the package that is specified as a parameter of the methods.

To enable this change, both the package calling noteOp(String, int, String) as well as the package specified as a parameter of the method must have this change enabled.

SELINUX_LATEST_CHANGES

Change ID: 143539591
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, opts in to the latest SELinux changes. Turning this change off for an app targeting Android 12 (API level 31) or higher is a no-op. Has no effect for apps that use a shared user id.

SETTINGS_API_V2

Change ID: 178111421
Default State : Enabled for all apps.

The new user preference API for verifying domains marked autoVerify=true in AndroidManifest.xml intent filters is not yet implemented in the current platform preview. For now, it is possible to preview the new user preference changes by enabling this ChangeId and using the adb shell pm set-app-links-user-selection and similar commands.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

Change ID: 183972877
Default State : Enabled for apps that target Android 12 (API level 31) or higher.

For apps targeting Android 12 (API level 31) and higher, determines whether to use a shorter timeout before elevating the standby bucket to ACTIVE when apps start a foreground service.