Изменения в системе совместимости (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). Данное изменение с этим ID отключает резервный вариант, так что приложения, ориентированные на 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 если идентификатор изменения отсутствует.

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) и выше, при попытке отправить сообщение в nanoapp в состоянии отказа в авторизации генерируется исключение 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
Состояние по умолчанию : Отключено для всех приложений.

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

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

Стратегия отсечения : Чтобы найти подходящего кандидата, мы вычисляем штраф для вызывающей стороны и каждой существующей операции. Штраф является обратной величиной силы отсечения (для вызывающей стороны) или сопротивления отсечению (для существующей операции). Чтобы вызывающая сторона могла отсечь операцию, она должна найти операцию со штрафом выше, чем у нее самой. Более подробную информацию о стратегии отсечения см. в реализации 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 Memory Tagging Extension (MTE). Если включены и NATIVE_MEMTAG_ASYNC , и этот параметр, приоритет имеет этот параметр, и MTE включается в синхронном режиме.

NEVER_SANDBOX_DISPLAY_APIS

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

При включении этой функции предотвращается применение песочницы Display API к действиям типа 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 при запуске приложения в фоновом режиме.