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

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

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

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

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

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

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

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

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

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

ALWAYS_SANDBOX_DISPLAY_APIS

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

При включении применяется режим «песочницы» Display 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

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

Для приложений, ориентированных на Android 12 (уровень 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 , когда они находятся в состоянии отказа в авторизации и пытаются отправить сообщение наноприложению.

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

Изменить ID: 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
Состояние по умолчанию : отключено для всех приложений.

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

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

DOWNSCALE_30

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

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

DOWNSCALE_35

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

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

DOWNSCALE_40

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

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

DOWNSCALE_45

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

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

DOWNSCALE_50

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

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

DOWNSCALE_55

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

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

DOWNSCALE_60

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

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

DOWNSCALE_65

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

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

DOWNSCALE_70

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

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

DOWNSCALE_75

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

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

DOWNSCALE_80

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

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

DOWNSCALE_85

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

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

DOWNSCALE_90

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

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

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

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

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

DROP_CLOSE_SYSTEM_DIALOGS

Изменить ID: 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

Изменить ID: 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

Изменить ID: 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, тем самым принудительно перекодируя медиаданные, закодированные в HEVC. Установка этого флага переопределяет любые значения по умолчанию на уровне ОС для приложений. По умолчанию он отключен, то есть приоритет имеют значения по умолчанию ОС. Если включены и этот флаг, и FORCE_ENABLE_HEVC_SUPPORT , ОС игнорирует оба флага.

FORCE_ENABLE_HEVC_SUPPORT

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

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

FORCE_NON_RESIZE_APP

Изменить ID: 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 секунд, практически всегда завершаются без помех со стороны стратегии обрезки. Некоторые операции, связанные с шифрованием файловой системы, всё ещё могут обрезать даже эти операции, но такие случаи крайне редки. Побочным эффектом этой новой стратегии обрезки является то, что создание операции теперь может завершиться неудачей, если у клиента мощность обрезки ниже, чем у всех существующих операций.

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

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

Изменить ID: 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

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

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

NATIVE_MEMTAG_ASYNC

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

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

NATIVE_MEMTAG_SYNC

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

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

NEVER_SANDBOX_DISPLAY_APIS

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

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

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

NOTIFICATION_CANCELLATION_REASONS

Изменить ID: 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

Изменить ID: 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

Изменить 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

Изменить ID: 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

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

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

USE_SHORT_FGS_USAGE_INTERACTION_TIME

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

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