Инструменты платформы совместимости

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

Когда вы используете инструменты платформы совместимости, платформа Android автоматически адаптирует свою внутреннюю логику, поэтому вам не нужно менять targetSDKVersion или перекомпилировать приложение для выполнения базового тестирования. Поскольку изменения можно переключать индивидуально, вы можете изолировать, тестировать и отлаживать по одному изменению поведения за раз или отключить одно изменение, вызывающее проблемы, если вам нужно сначала протестировать что-то еще.

Как определить, какие изменения включены

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

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

Рис. 1. Экран «Изменения совместимости приложений» в настройках разработчика.

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

  1. Если параметры разработчика еще не включены, включите их .
  2. Откройте приложение «Настройки» вашего устройства и перейдите в «Система» > «Дополнительно» > «Параметры разработчика» > «Изменения совместимости приложений» .
  3. Выберите свое приложение из списка.

Каждое изменение поведения обычно относится к одной из следующих двух категорий:

  • Изменения, которые влияют на все приложения, работающие в этой версии Android, независимо от targetSdkVersion приложения.

    Эти изменения включены по умолчанию в платформе совместимости и перечислены в пользовательском интерфейсе в разделе «Изменения, включенные по умолчанию» .

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

    Эти изменения включены по умолчанию в платформе совместимости, если ваше приложение предназначено для более высокой версии, чем указанная версия API. Например, изменение поведения, которое контролируется targetSDKVersion в Android 13 (уровень API 33), будет указано в пользовательском интерфейсе в разделе «Включено для targetSdkVersion >=33» . В некоторых более ранних версиях Android этот раздел вместо этого называется «Включено после SDK API_LEVEL ».

На рисунке 1 вы также заметите раздел под названием «Изменения, отключенные по умолчанию» . Изменения, попадающие в этот раздел, могут служить различным целям. Прежде чем активировать эти изменения, прочтите описание изменения в списке платформы совместимости для этой версии Android .

Определите включенные изменения с помощью logcat

Для каждого изменения поведения в первый раз в процессе работы вашего приложения, когда оно вызывает затронутый API, система выводит сообщение logcat, подобное этому:

D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED

Каждое сообщение logcat включает следующую информацию:

Изменить идентификатор
Указывает, какое изменение влияет на приложение. Это значение соответствует одному из изменений поведения, перечисленных на экране «Изменения совместимости приложений» (см. рис. 1). В этом примере 194833441 соответствует NOTIFICATION_PERM_CHANGE_ID .
UID
Указывает, на какое приложение влияет изменение.
Состояние

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

Состояние может иметь одно из следующих значений:

Состояние Значение
ENABLED Изменение включено и повлияет на поведение приложения, если приложение использует измененные API.
DISABLED

Изменение отключено и не повлияет на приложение.

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

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

Определите включенные изменения с помощью ADB

Запустите следующую команду ADB, чтобы увидеть полный набор изменений (как включенных, так и отключенных) на всем устройстве:

adb shell dumpsys platform_compat

В выходных данных для каждого изменения отображается следующая информация:

Изменить идентификатор
Уникальный идентификатор этого изменения поведения. Например, 194833441 .
Имя
Название этого поведения изменится. Например, NOTIFICATION_PERM_CHANGE_ID .
критерии targetSDKVersion

Какую targetSDKVersion контролирует изменение (если таковое имеется).

Например, если это изменение включено только для приложений, предназначенных для SDK версии 33 или выше, выводится enableAfterTargetSdk=32 . Если изменение не контролируется targetSDKVersion , выводится enableAfterTargetSdk=0 .

Переопределения пакета

Имя каждого пакета, в котором состояние изменения по умолчанию (включено или отключено) было переопределено.

Например, если это изменение включено по умолчанию, имя пакета вашего приложения будет указано, если вы отключили это изменение с помощью параметров разработчика или ADB. В этом случае вывод будет следующим:

packageOverrides={com.my.package=false}

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

packageOverrides={com.my.package=true, com.another.package=false}

Узнайте больше о конкретных изменениях

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

Когда переключать изменения

Основная цель платформы совместимости — предоставить вам контроль и гибкость при тестировании приложения с новыми версиями Android. В этом разделе описаны некоторые стратегии, которые вы можете использовать, чтобы определить, когда включать или выключать изменения во время тестирования и отладки приложения.

Когда отключать изменения

Решение о том, когда отключить изменения, обычно зависит от того, контролируется ли изменение targetSDKVersion или нет.

Изменения включены для всех приложений

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

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

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

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

Изменения, контролируемые targetSDKVersion

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

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

Когда включать изменения

Изменения, которые контролируются определенной targetSDKVersion , по умолчанию отключены, когда приложение нацелено на более низкую версию SDK, чем закрытая версия. Обычно, когда вы готовитесь к использованию нового targetSdkVersion , у вас есть список изменений поведения, которые вам нужно будет протестировать и отладить для вашего приложения.

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

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

Включить или выключить изменения

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

Переключение изменений с помощью параметров разработчика

Используйте параметры разработчика, чтобы включать или выключать изменения. Чтобы найти параметры разработчика, выполните следующие действия:

  1. Если параметры разработчика еще не включены, включите их .
  2. Откройте приложение «Настройки» вашего устройства и перейдите в «Система» > «Дополнительно» > «Параметры разработчика» > «Изменения совместимости приложений» .
  3. Выберите свое приложение из списка.
  4. В списке изменений найдите изменение, которое вы хотите включить или выключить, и коснитесь переключателя.

    Список изменений, которые можно включить или выключить

Переключить изменения с помощью ADB

Чтобы включить или выключить изменение с помощью ADB, выполните одну из следующих команд:

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Передайте либо CHANGE_ID (например, 194833441 ), либо CHANGE_NAME (например, NOTIFICATION_PERM_CHANGE_ID ) и PACKAGE_NAME вашего приложения.

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

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Ограничения на переключение изменений

По умолчанию каждое изменение поведения либо включено, либо отключено. Изменения, затрагивающие все приложения, включены по умолчанию. Другие изменения контролируются targetSdkVersion . Эти изменения включены по умолчанию, когда приложение нацелено на соответствующую версию SDK или выше, и отключены по умолчанию, когда приложение нацелено на версию SDK ниже закрытой версии. Когда вы включаете или выключаете изменение, вы переопределяете его состояние по умолчанию.

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

Тип сборки Неотлаживаемое приложение Отлаживаемое приложение
Все изменения Изменения, контролируемые targetSDKVersion Все остальные изменения
Предварительная версия для разработчиков или бета-версия Не могу переключить Можно переключать Можно переключать
Публичная пользовательская сборка Не могу переключить Можно переключать Не могу переключить
,

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

Когда вы используете инструменты платформы совместимости, платформа Android автоматически адаптирует свою внутреннюю логику, поэтому вам не нужно менять targetSDKVersion или перекомпилировать приложение для выполнения базового тестирования. Поскольку изменения можно переключать индивидуально, вы можете изолировать, тестировать и отлаживать по одному изменению поведения за раз или отключить одно изменение, вызывающее проблемы, если вам нужно сначала протестировать что-то еще.

Как определить, какие изменения включены

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

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

Рис. 1. Экран «Изменения совместимости приложений» в настройках разработчика.

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

  1. Если параметры разработчика еще не включены, включите их .
  2. Откройте приложение «Настройки» вашего устройства и перейдите в «Система» > «Дополнительно» > «Параметры разработчика» > «Изменения совместимости приложений» .
  3. Выберите свое приложение из списка.

Каждое изменение поведения обычно относится к одной из следующих двух категорий:

  • Изменения, которые влияют на все приложения, работающие в этой версии Android, независимо от targetSdkVersion приложения.

    Эти изменения включены по умолчанию в платформе совместимости и перечислены в пользовательском интерфейсе в разделе «Изменения, включенные по умолчанию» .

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

    Эти изменения включены по умолчанию в платформе совместимости, если ваше приложение предназначено для более высокой версии, чем указанная версия API. Например, изменение поведения, которое контролируется targetSDKVersion в Android 13 (уровень API 33), будет указано в пользовательском интерфейсе в разделе «Включено для targetSdkVersion >=33» . В некоторых более ранних версиях Android этот раздел вместо этого называется «Включено после SDK API_LEVEL ».

На рисунке 1 вы также заметите раздел под названием «Изменения, отключенные по умолчанию» . Изменения, попадающие в этот раздел, могут служить различным целям. Прежде чем активировать эти изменения, прочтите описание изменения в списке платформы совместимости для этой версии Android .

Определите включенные изменения с помощью logcat

Для каждого изменения поведения в первый раз в процессе работы вашего приложения, когда оно вызывает затронутый API, система выводит сообщение logcat, подобное этому:

D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED

Каждое сообщение logcat включает следующую информацию:

Изменить идентификатор
Указывает, какое изменение влияет на приложение. Это значение соответствует одному из изменений поведения, перечисленных на экране «Изменения совместимости приложений» (см. рис. 1). В этом примере 194833441 соответствует NOTIFICATION_PERM_CHANGE_ID .
UID
Указывает, на какое приложение влияет изменение.
Состояние

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

Состояние может иметь одно из следующих значений:

Состояние Значение
ENABLED Изменение включено и повлияет на поведение приложения, если приложение использует измененные API.
DISABLED

Изменение отключено и не повлияет на приложение.

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

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

Определите включенные изменения с помощью ADB

Запустите следующую команду ADB, чтобы увидеть полный набор изменений (как включенных, так и отключенных) на всем устройстве:

adb shell dumpsys platform_compat

В выходных данных для каждого изменения отображается следующая информация:

Изменить идентификатор
Уникальный идентификатор этого изменения поведения. Например, 194833441 .
Имя
Название этого поведения изменится. Например, NOTIFICATION_PERM_CHANGE_ID .
критерии targetSDKVersion

Какую targetSDKVersion контролирует изменение (если таковое имеется).

Например, если это изменение включено только для приложений, предназначенных для SDK версии 33 или выше, выводится enableAfterTargetSdk=32 . Если изменение не контролируется targetSDKVersion , выводится enableAfterTargetSdk=0 .

Переопределения пакета

Имя каждого пакета, в котором состояние изменения по умолчанию (включено или отключено) было переопределено.

Например, если это изменение включено по умолчанию, имя пакета вашего приложения будет указано, если вы отключили это изменение с помощью параметров разработчика или ADB. В этом случае вывод будет следующим:

packageOverrides={com.my.package=false}

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

packageOverrides={com.my.package=true, com.another.package=false}

Узнайте больше о конкретных изменениях

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

Когда переключать изменения

Основная цель платформы совместимости — предоставить вам контроль и гибкость при тестировании приложения с новыми версиями Android. В этом разделе описаны некоторые стратегии, которые вы можете использовать, чтобы определить, когда включать или выключать изменения во время тестирования и отладки приложения.

Когда отключать изменения

Решение о том, когда отключить изменения, обычно зависит от того, контролируется ли изменение targetSDKVersion или нет.

Изменения включены для всех приложений

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

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

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

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

Изменения, контролируемые targetSDKVersion

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

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

Когда включать изменения

Изменения, контролируемые определенной targetSDKVersion , по умолчанию отключены, когда приложение ориентировано на более низкую версию SDK, чем закрытая версия. Обычно, когда вы готовитесь к использованию нового targetSdkVersion , у вас есть список изменений поведения, которые вам нужно будет протестировать и отладить для вашего приложения.

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

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

Включить или выключить изменения

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

Переключение изменений с помощью параметров разработчика

Используйте параметры разработчика, чтобы включать или выключать изменения. Чтобы найти параметры разработчика, выполните следующие действия:

  1. Если параметры разработчика еще не включены, включите их .
  2. Откройте приложение «Настройки» вашего устройства и перейдите в «Система» > «Дополнительно» > «Параметры разработчика» > «Изменения совместимости приложений» .
  3. Выберите свое приложение из списка.
  4. В списке изменений найдите изменение, которое вы хотите включить или выключить, и коснитесь переключателя.

    Список изменений, которые можно включить или выключить

Переключить изменения с помощью ADB

Чтобы включить или отключить изменение с помощью ADB, выполните одну из следующих команд:

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Передайте либо CHANGE_ID (например, 194833441 ), либо CHANGE_NAME (например, NOTIFICATION_PERM_CHANGE_ID ) и PACKAGE_NAME вашего приложения.

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

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Ограничения на переключение изменений

По умолчанию каждое изменение поведения либо включено, либо отключено. Изменения, затрагивающие все приложения, включены по умолчанию. Другие изменения контролируются targetSdkVersion . Эти изменения включены по умолчанию, когда приложение нацелено на соответствующую версию SDK или выше, и отключены по умолчанию, когда приложение нацелено на версию SDK ниже закрытой версии. Когда вы включаете или выключаете изменение, вы переопределяете его состояние по умолчанию.

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

Тип сборки Неотлаживаемое приложение Отлаживаемое приложение
Все изменения Изменения, контролируемые targetSDKVersion Все остальные изменения
Предварительная версия для разработчиков или бета-версия Не могу переключить Можно переключать Можно переключать
Публичная пользовательская сборка Не могу переключить Можно переключать Не могу переключить
,

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

Когда вы используете инструменты платформы совместимости, платформа Android автоматически адаптирует свою внутреннюю логику, поэтому вам не нужно менять targetSDKVersion или перекомпилировать приложение для выполнения базового тестирования. Поскольку изменения можно переключать индивидуально, вы можете изолировать, тестировать и отлаживать по одному изменению поведения за раз или отключить одно изменение, вызывающее проблемы, если вам нужно сначала протестировать что-то еще.

Как определить, какие изменения включены

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

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

Рис. 1. Экран «Изменения совместимости приложений» в настройках разработчика.

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

  1. Если параметры разработчика еще не включены, включите их .
  2. Откройте приложение «Настройки» вашего устройства и перейдите в «Система» > «Дополнительно» > «Параметры разработчика» > «Изменения совместимости приложений» .
  3. Выберите свое приложение из списка.

Каждое изменение поведения обычно относится к одной из следующих двух категорий:

  • Изменения, которые влияют на все приложения, работающие в этой версии Android, независимо от targetSdkVersion приложения.

    Эти изменения включены по умолчанию в платформе совместимости и перечислены в пользовательском интерфейсе в разделе «Изменения, включенные по умолчанию» .

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

    Эти изменения включены по умолчанию в платформе совместимости, если ваше приложение предназначено для более высокой версии, чем указанная версия API. Например, изменение поведения, которое контролируется targetSDKVersion в Android 13 (уровень API 33), будет указано в пользовательском интерфейсе в разделе «Включено для targetSdkVersion >=33» . В некоторых более ранних версиях Android этот раздел называется «Включено после SDK API_LEVEL ».

Вы также заметите раздел на рисунке 1, который называется «Изменения, отключенные по умолчанию» . Изменения, попадающие в этот раздел, могут служить различным целям. Прежде чем активировать эти изменения, прочтите описание изменения в списке платформы совместимости для этой версии Android .

Определите включенные изменения с помощью logcat

Для каждого изменения поведения в первый раз в процессе работы вашего приложения, когда оно вызывает затронутый API, система выводит сообщение logcat, подобное этому:

D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED

Каждое сообщение logcat включает следующую информацию:

Изменить идентификатор
Указывает, какое изменение влияет на приложение. Это значение соответствует одному из изменений поведения, перечисленных на экране «Изменения совместимости приложений» (см. рис. 1). В этом примере 194833441 соответствует NOTIFICATION_PERM_CHANGE_ID .
UID
Указывает, на какое приложение влияет изменение.
Состояние

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

Состояние может иметь одно из следующих значений:

Состояние Значение
ENABLED Изменение включено и повлияет на поведение приложения, если приложение использует измененные API.
DISABLED

Изменение отключено и не повлияет на приложение.

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

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

Определите включенные изменения с помощью ADB

Запустите следующую команду ADB, чтобы увидеть полный набор изменений (как включенных, так и отключенных) на всем устройстве:

adb shell dumpsys platform_compat

В выходных данных для каждого изменения отображается следующая информация:

Изменить идентификатор
Уникальный идентификатор этого изменения поведения. Например, 194833441 .
Имя
Название этого поведения изменится. Например, NOTIFICATION_PERM_CHANGE_ID .
критерии targetSDKVersion

Какую targetSDKVersion контролирует изменение (если таковое имеется).

Например, если это изменение включено только для приложений, предназначенных для SDK версии 33 или выше, выводится enableAfterTargetSdk=32 . Если изменение не контролируется targetSDKVersion , выводится enableAfterTargetSdk=0 .

Переопределения пакета

Имя каждого пакета, в котором состояние изменения по умолчанию (включено или отключено) было переопределено.

Например, если это изменение включено по умолчанию, имя пакета вашего приложения будет указано, если вы отключили это изменение с помощью параметров разработчика или ADB. В этом случае вывод будет следующим:

packageOverrides={com.my.package=false}

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

packageOverrides={com.my.package=true, com.another.package=false}

Узнайте больше о конкретных изменениях

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

Когда переключать изменения

Основная цель платформы совместимости — предоставить вам контроль и гибкость при тестировании приложения с новыми версиями Android. В этом разделе описаны некоторые стратегии, которые вы можете использовать, чтобы определить, когда включать или выключать изменения во время тестирования и отладки приложения.

Когда отключать изменения

Решение о том, когда отключить изменения, обычно зависит от того, контролируется ли изменение targetSDKVersion или нет.

Изменения включены для всех приложений

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

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

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

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

Изменения в Грубке targetSDKVersion

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

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

Когда переключать изменения на

Изменения, которые управляются определенным targetSDKVersion отключены по умолчанию, когда приложение нацелено на более низкую версию SDK, чем закрытая версия. Как правило, по мере того, как вы готовитесь нацелиться на новую targetSdkVersion , у вас будет список изменений поведения, которые вам понадобится для проверки и отладки вашего приложения.

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

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

Переключать изменения или выключения

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

Переключить изменения с использованием вариантов разработчика

Используйте параметры разработчика, чтобы включить или выключить изменения. Чтобы найти варианты разработчика, выполните следующие действия:

  1. Если параметры разработчика еще не включены, включите их .
  2. Откройте приложение настроек вашего устройства и перейдите к системе> Advanced> Параметры разработчика> Изменения совместимости приложений .
  3. Выберите приложение из списка.
  4. Из списка изменений найдите изменение, которое вы хотите включить или выключить или нажмите на выключатель.

    Список изменений, которые можно переключать или выключить

Переключение изменений с использованием ADB

Чтобы включить или выключить изменение, используя ADB, запустите одну из следующих команд:

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Передайте либо CHANGE_ID (например, 194833441 ), либо CHANGE_NAME (например, NOTIFICATION_PERM_CHANGE_ID ) и вашего приложения PACKAGE_NAME .

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

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Ограничения на переключение изменений

По умолчанию каждое изменение поведения включено или отключено. Изменения, которые влияют на все приложения, включены по умолчанию. Другие изменения закрыты с помощью targetSdkVersion . Эти изменения включены по умолчанию, когда приложение нацелена на соответствующую версию SDK или выше и отключено по умолчанию, когда приложение нацелено на версию SDK ниже, чем версия с закрытой. Когда вы включаете изменение или выключение, вы переопределяете его состояние по умолчанию.

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

Тип сборки Необогательное приложение Отзываемое приложение
Все изменения Изменения в Грубке TargetSdkversion Все остальные изменения
Предварительный просмотр разработчика или бета -сборка Не могу переключиться Может переключиться Может переключиться
Общественная сборка пользователя Не могу переключиться Может переключиться Не могу переключиться
,

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

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

Как определить, какие изменения включены

Когда изменение поведения включено, оно может повлиять на то, как ваше приложение обращается к API платформы, которые влияют на это изменение. Вы можете проверить, какие изменения поведения включены с помощью параметров разработчика, LogCat или ADB.

Определите включенные изменения с использованием параметров разработчика

Рисунок 1. Экран совместимости приложения изменяет в параметрах разработчика.

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

  1. Если параметры разработчика еще не включены, включите их .
  2. Откройте приложение настроек вашего устройства и перейдите к системе> Advanced> Параметры разработчика> Изменения совместимости приложений .
  3. Выберите приложение из списка.

Каждое изменение поведения обычно принадлежит одной из следующих двух категорий:

  • Изменения, которые влияют на все приложения, которые работают на этой версии Android, независимо от targetSdkVersion приложения.

    Эти изменения включены по умолчанию в рамках совместимости и перечислены в пользовательском интерфейсе в разделе «Разрешение по умолчанию» .

  • Изменения, которые влияют только на приложения, которые нацелены на определенные версии Android. Поскольку эти изменения влияют только на приложения, которые нацелены на конкретную версию Android, они также называются изменениями, которые управляются targetSDKVersion .

    Эти изменения включены по умолчанию в рамках совместимости, если ваше приложение нацелено на более высокую версию, чем перечисленная версия API. Например, изменение поведения, которое управляется targetSDKVersion в Android 13 (API -уровне 33), будет перечислено в разделе пользовательского интерфейса A, под названием «TargetSdkversion»> = 33 . На некоторых нижних версиях Android этот раздел называется «включенным после SDK API_LEVEL ».

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

Определите включенные изменения с использованием logCat

Для каждого изменения поведения, впервые во время процесса вашего приложения, когда ваше приложение вызывает пораженный API, система выводит сообщение LogCat, подобное этому:

D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED

Каждое сообщение LogCat включает в себя следующую информацию:

Изменить идентификатор
Указывает, какое изменение влияет на приложение. Это значение отображается в одном из изменений поведения, которые перечислены на экране изменений совместимости приложения (см. Рисунок 1). В этом примере 194833441 карты с NOTIFICATION_PERM_CHANGE_ID .
UID
Указывает, на какое приложение влияет изменение.
Состояние

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

Государство может быть одним из этих ценностей:

Состояние Значение
ENABLED Изменение включено и повлияет на поведение приложения, если приложение использует API, которые были изменены.
DISABLED

Изменение отключено и не повлияет на приложение.

ПРИМЕЧАНИЕ. Если это изменение отключено, потому что targetSDKVersion приложений ниже требуемого порога, изменение будет включено по умолчанию, когда приложение увеличивает свою targetSDKVersion для нацеливания на более высокую версию.

LOGGED Изменение регистрируется через структуру совместимости, но не может быть включено или выключено. Хотя это изменение не может быть переключено, оно может все равно повлиять на поведение вашего приложения. См. Описание изменения в списке структуры совместимости для этой версии Android для получения дополнительной информации. Во многих случаях эти типы изменений являются экспериментальными и могут быть проигнорированы.

Определите включенные изменения с использованием ADB

Запустите следующую команду ADB, чтобы увидеть полный набор изменений (как включенных, так и отключенных) на всем устройстве:

adb shell dumpsys platform_compat

В выводе перечислены следующая информация для каждого изменения:

Изменить идентификатор
Уникальный идентификатор для этого изменения поведения. Например, 194833441 .
Имя
Имя этого поведения изменение. Например, NOTIFICATION_PERM_CHANGE_ID .
Критерии TargetSdkversion

Какой targetSDKVersion изменение управляется (если таковое имеется).

Например, если это изменение включено только для приложений, нацеленных на SDK версию 33 или выше, enableAfterTargetSdk=32 выводится. Если изменение не является гибелью targetSDKVersion , enableAfterTargetSdk=0 выводится.

Переопределение пакета

Имя каждого пакета, где состояние по умолчанию изменения (либо включено, либо отключено) было переопределено.

Например, если это изменение, которое включено по умолчанию, имя пакета вашего приложения будет указано, если вы переключите изменение с помощью вариантов разработчика или ADB. В этом случае вывод будет:

packageOverrides={com.my.package=false}

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

packageOverrides={com.my.package=true, com.another.package=false}

Узнайте больше о конкретных изменениях

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

Когда переключать изменения

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

Когда переключаться

Решение, когда переключать изменения обычно зависит от того, является ли изменение закрыто в targetSDKVersion или нет.

Изменения включены для всех приложений

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

Например, если вы готовитесь к Target Android 15 (уровень API 35), вы можете начать с установки приложения на устройство под управлением Android 15 и протестировать ваше приложение, используя ваши типичные рабочие процессы тестирования. Если вы столкнетесь с проблемами, вы можете отключить изменение, которое вызывает проблему, чтобы вы могли продолжить тестирование на другие проблемы.

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

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

Изменения в Грубке targetSDKVersion

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

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

Когда переключать изменения на

Изменения, которые управляются определенным targetSDKVersion отключены по умолчанию, когда приложение нацелено на более низкую версию SDK, чем закрытая версия. Как правило, по мере того, как вы готовитесь нацелиться на новую targetSdkVersion , у вас будет список изменений поведения, которые вам понадобится для проверки и отладки вашего приложения.

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

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

Переключать изменения или выключения

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

Переключить изменения с использованием вариантов разработчика

Используйте параметры разработчика, чтобы включить или выключить изменения. Чтобы найти варианты разработчика, выполните следующие действия:

  1. Если параметры разработчика еще не включены, включите их .
  2. Откройте приложение настроек вашего устройства и перейдите к системе> Advanced> Параметры разработчика> Изменения совместимости приложений .
  3. Выберите приложение из списка.
  4. Из списка изменений найдите изменение, которое вы хотите включить или выключить или нажмите на выключатель.

    Список изменений, которые можно переключать или выключить

Переключение изменений с использованием ADB

Чтобы включить или выключить изменение, используя ADB, запустите одну из следующих команд:

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Передайте либо CHANGE_ID (например, 194833441 ), либо CHANGE_NAME (например, NOTIFICATION_PERM_CHANGE_ID ) и вашего приложения PACKAGE_NAME .

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

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Ограничения на переключение изменений

По умолчанию каждое изменение поведения включено или отключено. Изменения, которые влияют на все приложения, включены по умолчанию. Другие изменения закрыты с помощью targetSdkVersion . Эти изменения включены по умолчанию, когда приложение нацелена на соответствующую версию SDK или выше и отключено по умолчанию, когда приложение нацелено на версию SDK ниже, чем версия с закрытой. Когда вы включаете изменение или выключение, вы переопределяете его состояние по умолчанию.

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

Тип сборки Необогательное приложение Отзываемое приложение
Все изменения Изменения в Грубке TargetSdkversion Все остальные изменения
Предварительный просмотр разработчика или бета -сборка Не могу переключиться Может переключиться Может переключиться
Общественная сборка пользователя Не могу переключиться Может переключиться Не могу переключиться