Изменения в поведении: приложения, ориентированные на Android 11.

Как и в предыдущих версиях, Android 11 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения в поведении применяются исключительно к приложениям, ориентированным на Android 11 или более поздние версии. Если в вашем приложении установлено targetSdkVersion равное 30 , вам следует внести изменения, чтобы обеспечить корректную поддержку этих изменений, где это применимо.

Обязательно ознакомьтесь также со списком изменений в поведении, затрагивающих все приложения, работающие на Android 11 .

Конфиденциальность

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

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

Для получения более подробной информации посетите страницу «Политика конфиденциальности» .

Безопасность

маркировка указателей кучи

Изменить детали

Изменить имя : NATIVE_HEAP_POINTER_TAGGING

Идентификатор изменения : 135754954

Как переключить

При тестировании совместимости вашего приложения с Android 11 вы можете включать или выключать это изменение с помощью следующих команд ADB:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

Для получения дополнительной информации о системе совместимости и переключении изменений см. раздел «Тестирование и отладка изменений поведения платформы в вашем приложении» .

Указатели кучи теперь имеют ненулевой тег в старшем байте (MSB). Приложения, которые некорректно используют указатели, в том числе те, которые изменяют MSB, теперь могут аварийно завершать работу или сталкиваться с другими проблемами. Это изменение необходимо для поддержки будущего оборудования с включенным расширением ARM Memory Tagging Extension (MTE). Для получения дополнительной информации см. Tagged Pointers .

Чтобы отключить эту функцию, см. документацию манифеста allowNativeHeapPointerTagging .

Обновления для тостов

Фоновые всплывающие уведомления заблокированы.

В целях безопасности и для обеспечения удобства использования система блокирует всплывающие уведомления, содержащие пользовательские представления, если эти уведомления отправляются из фонового режима приложением, ориентированным на Android 11 или выше. Обратите внимание, что текстовые уведомления по-прежнему разрешены; это уведомления, созданные с помощью Toast.makeText() , которые не вызывают setView() .

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

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

Всплывающие уведомления об обратных вызовах

Чтобы получать уведомления о появлении или исчезновении всплывающих уведомлений (текстовых или пользовательских), используйте метод addCallback() , добавленный в Android 11.

Изменения в API текстовых уведомлений

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

  • Метод getView() возвращает null .
  • Возвращаемые значения следующих методов не соответствуют фактическим значениям, поэтому не следует полагаться на них в вашем приложении:
  • Следующие методы не выполняют никаких действий, поэтому вашему приложению не следует их использовать:

Подключение

Ограниченный доступ для чтения к базе данных APN.

Изменить детали

Изменить имя : APN_READING_PERMISSION_CHANGE_ID

Идентификатор изменения : 124107808

Как переключить

При тестировании совместимости вашего приложения с Android 11 вы можете включать или выключать это изменение с помощью следующих команд ADB:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

Для получения дополнительной информации о системе совместимости и переключении изменений см. раздел «Тестирование и отладка изменений поведения платформы в вашем приложении» .

Приложениям, ориентированным на Android 11, теперь требуется привилегированное разрешение Manifest.permission.WRITE_APN_SETTINGS для чтения или доступа к базе данных APN поставщика телефонии . Попытка доступа к базе данных APN без этого разрешения приводит к исключению безопасности.

Доступность

Объявите взаимодействие с механизмами преобразования текста в речь в файле манифеста.

В связи с изменениями в видимости пакетов , приложениям, ориентированным на Android 11 и взаимодействующим с механизмом преобразования текста в речь (TTS), необходимо добавить следующий элемент <queries> в свои файлы манифеста:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Укажите использование кнопок доступности в файле метаданных.

Изменить детали

Название изменения : REQUEST_ACCESSIBILITY_BUTTON_CHANGE

Идентификатор изменения : 136293963

Как переключить

При тестировании совместимости вашего приложения с Android 11 вы можете включать или выключать это изменение с помощью следующих команд ADB:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

Для получения дополнительной информации о системе совместимости и переключении изменений см. раздел «Тестирование и отладка изменений поведения платформы в вашем приложении» .

Начиная с Android 11, ваша служба специальных возможностей не может объявлять во время выполнения, что она связана с системной кнопкой специальных возможностей . Если вы добавите AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON к свойству flags объекта AccessibilityServiceInfo , платформа не будет передавать события обратного вызова кнопки специальных возможностей вашей службе.

Чтобы получать события обратного вызова специальных возможностей в вашей службе специальных возможностей, используйте файл метаданных службы специальных возможностей, чтобы объявить о связи вашей службы с кнопкой специальных возможностей. Включите значение flagRequestAccessibilityButton в определение атрибута accessibilityFlags . Обычно файл метаданных службы специальных возможностей находится res/raw/accessibilityservice.xml .

Камера

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

Начиная с Android 11, только предустановленные системные приложения камеры могут реагировать на следующие действия Intent:

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

Упаковка и установка приложения

Сжатые файлы ресурсов

Изменить детали

Изменить имя : RESOURCES_ARSC_COMPRESSED

Идентификатор изменения : 132742131

Как переключить

При тестировании совместимости вашего приложения с Android 11 вы можете включать или выключать это изменение с помощью следующих команд ADB:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

Для получения дополнительной информации о системе совместимости и переключении изменений см. раздел «Тестирование и отладка изменений поведения платформы в вашем приложении» .

Приложения, предназначенные для Android 11 (уровень API 30) или выше, не могут быть установлены, если они содержат сжатый файл resources.arsc или если этот файл не выровнен по 4-байтовой границе. При наличии любого из этих условий система не может отобразить этот файл в память. Таблицы ресурсов, которые не могут быть отображены в память, должны считываться в буфер в оперативной памяти, что приводит к излишней нагрузке на память системы и значительному увеличению использования оперативной памяти на устройстве.

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

Теперь требуется схема подписи APK версии 2.

Приложения, предназначенные для Android 11 (уровень API 30), которые в настоящее время подписаны только с использованием схемы подписи APK v1, теперь должны также подписываться с использованием схемы подписи APK v2 или выше. Пользователи не могут устанавливать или обновлять приложения, подписанные только с использованием схемы подписи APK v1, на устройствах под управлением Android 11.

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

Firebase

Firebase JobDispatcher и GCMNetworkManager

Если ваше приложение ориентировано на API уровня 30 или выше, вызовы API Firebase JobDispatcher и GcmNetworkManager будут отключены на устройствах под управлением Android 6.0 (API уровня 23) или выше. Информацию о миграции см. в разделах «Миграция с Firebase JobDispatcher на WorkManager» и «Миграция с GCMNetworkManager на WorkManager» .

Распознавание речи

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

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

Изменения в обработчике событий OnSharedPreferenceChangeListener

Изменить детали

Название изменения : CALLBACK_ON_CLEAR_CHANGE

Идентификатор изменения : 119147584

Как переключить

При тестировании совместимости вашего приложения с Android 11 вы можете включать или выключать это изменение с помощью следующих команд ADB:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

Для получения дополнительной информации о системе совместимости и переключении изменений см. раздел «Тестирование и отладка изменений поведения платформы в вашем приложении» .

Для приложений, ориентированных на Android 11 (уровень API 30), при каждом вызове Editor.clear теперь выполняется обратный вызов метода OnSharedPreferenceChangeListener.onSharedPreferenceChanged с null ключом.

Ограничения интерфейса, не относящиеся к SDK

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

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

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

Чтобы узнать больше об изменениях в этом выпуске Android, см. раздел «Обновления ограничений интерфейсов, не относящихся к SDK, в Android 11» . Чтобы узнать больше об интерфейсах, не относящихся к SDK, в целом, см. раздел «Ограничения на интерфейсы, не относящиеся к SDK» .