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

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

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

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

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

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

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

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

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

В Android 16 есть возможность включать и выключать изменения в системе совместимости.

CAMERA_MIC_INDICATORS_NOT_PRESENT

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

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

DOWNSCALED

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

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

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

DOWNSCALED_INVERSE

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

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

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

DOWNSCALE_30

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

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

DOWNSCALE_35

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

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

DOWNSCALE_40

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

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

DOWNSCALE_45

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

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

DOWNSCALE_50

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

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

DOWNSCALE_55

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

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

DOWNSCALE_60

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

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

DOWNSCALE_65

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

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

DOWNSCALE_70

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

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

DOWNSCALE_75

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

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

DOWNSCALE_80

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

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

DOWNSCALE_85

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

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

DOWNSCALE_90

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

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

ENFORCE_STRICT_QUERY_BUILDER

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

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

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

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

Устанавливает для пакетов, к которым применяется, запрет изменения размера.

FORCE_RESIZE_APP

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

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

GWP_ASAN

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

Обеспечивает обнаружение ошибок в собственной памяти приложений с помощью выборочного анализа.

Чтобы узнать больше об использовании GWP-ASan, ознакомьтесь с руководством по GWP-ASan .

NATIVE_HEAP_ZERO_INIT

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

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

NATIVE_MEMTAG_ASYNC

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

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

NATIVE_MEMTAG_SYNC

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

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

OVERRIDE_ANY_ORIENTATION

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

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

OVERRIDE_ANY_ORIENTATION_TO_USER

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

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

OVERRIDE_CAMERA_COMPAT_DISABLE_FREEFORM_WINDOWING_TREATMENT

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

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

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

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

OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK

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

При включении это изменение заставляет применяемые пакеты игнорировать текущее значение android:resizeableActivity , а также целевые SDK версии Android 6.0 или ниже (уровень API 23), и считать активность неизменяемой по размеру. В этом случае значения поворота камеры и обрезки зависят только от необходимой компенсации с учетом текущего поворота экрана.

OVERRIDE_CAMERA_ROTATE_AND_CROP_DEFAULTS

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

При включении это изменение заставляет применяемые к нему пакеты переопределять поведение поворота и обрезки камеры по умолчанию и всегда возвращать CaptureRequest.SCALER_ROTATE_AND_CROP_NONE .

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

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

При включении этой опции пользователям будет предоставлен выбор: захватывать одно приложение или весь экран при запуске сеанса MediaProjection , что отменяет использование MediaProjectionConfig#createConfigForDefaultDisplay .

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

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

Включает параметр SCREEN_ORIENTATION_REVERSE_LANDSCAPE для приложения, к которому он применяется. Если OVERRIDE_ANY_ORIENTATION также не включен, SCREEN_ORIENTATION_REVERSE_LANDSCAPE используется только тогда, когда в действии указана альбомная ориентация. Включение этого изменения поможет вам протестировать поведение вашего приложения на предмет различий между устройствами, где альбомная ориентация соответствует Surface.ROTATION_90 , и устройствами, где она соответствует Surface.ROTATION_270 .

OVERRIDE_LAYOUT_IN_DISPLAY_CUTOUT_MODE

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

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

OVERRIDE_MIN_ASPECT_RATIO

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

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

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

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

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

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

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 .

OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA

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

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

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

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

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

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

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

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

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

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

Включает параметр SCREEN_ORIENTATION_NOSENSOR для приложения, к которому он применяется. Если OVERRIDE_ANY_ORIENTATION также не включен, SCREEN_ORIENTATION_NOSENSOR используется только в том случае, если в описании активности не указана другая фиксированная ориентация.

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

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

Включает параметр SCREEN_ORIENTATION_PORTRAIT для приложения, к которому он применяется. Если OVERRIDE_ANY_ORIENTATION также не включен, SCREEN_ORIENTATION_PORTRAIT используется только в том случае, если в описании активности не указана другая фиксированная ориентация.

RATE_LIMIT_TOASTS

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

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

STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS

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

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

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

UNIVERSAL_RESIZABLE_BY_DEFAULT

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

При включении этой функции ограничения по ориентации, изменению размера и соотношению сторон приложения игнорируются на больших экранах (экранах шириной более 600dp).

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

USE_EXPERIMENTAL_COMPONENT_ALIAS

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

При включении этой функции система позволяет пакету "android" использовать псевдонимы компонентов.