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

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

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

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

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

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

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

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

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

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

ALWAYS_SANDBOX_DISPLAY_APIS

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

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

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

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

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

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

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

BLOCK_FLAG_SLIPPERY

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

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

BLOCK_GPS_STATUS_USAGE

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

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

BLOCK_IMMUTABLE_PENDING_INTENTS

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

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

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

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

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

BLOCK_UNTRUSTED_TOUCHES

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

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

Дополнительные сведения об этом изменении см. в разделе Ненадежные события касания заблокированы .

CALL_ACTIVITY_RESULT_BEFORE_RESUME

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

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

CAMERA_MIC_INDICATORS_NOT_PRESENT

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

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

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

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

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

CHANGE_ID_AUTH_STATE_DENIED

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

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

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

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

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

DELIVER_HISTORICAL_LOCATIONS

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

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

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

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

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

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

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

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

DOWNSCALED

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

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

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

DOWNSCALE_30

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

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

DOWNSCALE_35

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

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

DOWNSCALE_40

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

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

DOWNSCALE_45

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

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

DOWNSCALE_50

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

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

DOWNSCALE_55

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

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

DOWNSCALE_60

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

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

DOWNSCALE_65

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

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

DOWNSCALE_70

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

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

DOWNSCALE_75

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

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

DOWNSCALE_80

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

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

DOWNSCALE_85

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

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

DOWNSCALE_90

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

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

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

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

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

DROP_CLOSE_SYSTEM_DIALOGS

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

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

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

ENABLE_CHECKS_FOR_PRIVATE_FILES

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

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

ENABLE_DEFERRED_SCAN

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

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

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

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

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

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

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

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

ENABLE_INCLUDE_ALL_VOLUMES

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

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

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

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

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

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

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

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

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

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

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

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

ENFORCE_STRICT_QUERY_BUILDER

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

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

FGS_BG_START_RESTRICTION_CHANGE_ID

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

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

FGS_START_EXCEPTION_CHANGE_ID

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

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

FINISH_INPUT_NO_FALLBACK_CONNECTION

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

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

Если это разрешено текущим input method , текущее входное соединение будет finished всякий раз, когда устройства станут неинтерактивными.

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

FORCE_DISABLE_HEVC_SUPPORT

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

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

FORCE_ENABLE_HEVC_SUPPORT

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

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

FORCE_NON_RESIZE_APP

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

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

FORCE_RESIZE_APP

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

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

HIDE_PROP_ICUBINARY_DATA_PATH

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

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

IGNORE_ALLOW_BACKUP_IN_D2D

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

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

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

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

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

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

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

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

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

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

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

KEYSTORE_OPERATION_CREATION_MAY_FAIL

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

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

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

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

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

NATIVE_MEMTAG_SYNC

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

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

NEVER_SANDBOX_DISPLAY_APIS

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

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