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

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

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

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

DELIVER_HISTORICAL_LOCATIONS

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

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

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

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

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

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% и 70 % (DOWNSCALE_80 и DOWNSCALE_70), будет использоваться 80 %.

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

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

Подробнее об этом изменении…

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 игнорируется при переносе данных с одного устройства на другое.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

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

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

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

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

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

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

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

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

NATIVE_MEMTAG_SYNC

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

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

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) или более поздней версии, для вызова TelephonyCallback.ActiveDataSubscriptionIdListener у него должно быть разрешение Manifest.permission.READ_PHONE_STATE.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

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

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

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

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

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

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, когда приложения запускают активную службу.