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

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

ADD_CONTENT_OBSERVER_FLAGS

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

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

Для приложений, ориентированных на Android 11, появилась новая публичная перегрузка API onChange(boolean, Uri, int) , которая включает целочисленный аргумент flags .

Этот новый метод является альтернативой общедоступному SDK для приложений, использующих перегруженный метод onChange() не входящий в SDK, который включает целочисленный аргумент userId .

СЛОЖНОСТЬ ПАРОЛЕЙ ПРИЛОЖЕНИЙ АДМИНИСТРАТОРА

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

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

Для административных приложений, ориентированных на Android 11, следует выдавать ошибку всякий раз, когда приложение устанавливает требование к паролю, не соответствующее текущему уровню качества пароля. Например, если уровень качества пароля установлен на DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED , приложение не сможет установить минимальную длину пароля. В этом случае, прежде чем пытаться установить минимальную длину пароля, приложение должно сначала вызвать метод setPasswordQuality() , и только после этого — метод setPasswordMinimumLength() .

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

APP_DATA_DIRECTORY_ISOLATION

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

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

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

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

APN_READING_PERMISSION_CHANGE_ID

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

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

Для приложений, ориентированных на Android 11, доступ к базе данных APN теперь требует разрешения Manifest.permission.WRITE_APN_SETTINGS .

Чтобы узнать больше об этом изменении, см. раздел «Ограниченный доступ для чтения к базе данных APN» .

BACKGROUND_RATIONALE_CHANGE_ID

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

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

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

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

CALLBACK_ON_CLEAR_CHANGE

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

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

При каждом вызове Editor.clear теперь выполняется обратный вызов метода OnSharedPreferenceChangeListener.onSharedPreferenceChanged с null ключом.

Чтобы узнать больше об этом изменении, см. раздел «Изменения в функции обратного вызова для OnSharedPreferenceChangeListener» .

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

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

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

Теперь коды ошибок развернуты для updateAvailableNetworks(List, Executor, Consumer) и setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer) .

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

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

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

Это незначительное изменение в поведении метода startWatchingMode(String, String, AppOpsManager.OnOpChangedListener) . До этого изменения система вызывала метод для переключенной операции. После изменения система будет вызывать метод для фактически запрошенной операции или для всех переключенных операций, если операция не указана.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

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

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

Для приложений, ориентированных на Android 11, службы переднего плана получают доступ к камере и микрофону только во время их использования, если в файле манифеста параметр R.attr.foregroundServiceType настроен как ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA и ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE соответственно. В более ранних версиях Android службы переднего плана автоматически получали доступ к камере и микрофону.

Чтобы узнать больше об этом изменении, см. раздел «Типы служб переднего плана в Android 11» .

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

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

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

Приложения больше не могут отправлять пользовательские всплывающие уведомления в фоновом режиме. Однако приложения по-прежнему могут отправлять всплывающие уведомления, используя метод Toast.makeText(Context, CharSequence, int) и его варианты, находясь в фоновом режиме.

Чтобы узнать больше об этом изменении, см. раздел «Блокировка пользовательских всплывающих уведомлений» .

CHANGE_RESTRICT_SAW_INTENT

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

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

Интенты, использующие действие android.settings.MANAGE_APP_OVERLAY_PERMISSION и схему URI данных package , больше не перенаправляют пользователя на экран управления соответствующим разрешением для конкретного приложения. Вместо этого пользователь перенаправляется на экран, где он может управлять всеми приложениями, запросившими это разрешение.

ИЗМЕНИТЬ ВСТУПЛЕНИЯ В СИСТЕМЕ

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

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

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

DEFAULT_SCOPED_STORAGE

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

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

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

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

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

ПУСТАЯ_КАТЕГОРИЯ_ДЕЙСТВИЙ_НАМЕРЕНИЯ

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

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

В приложениях, ориентированных на Android 11, система теперь выдает ошибку, если action или category фильтра намерений являются пустой строкой. Ранее в платформе до Android 11 существовала ошибка, позволявшая пропускать этот случай без возникновения ошибки. Следует отметить, что это не включает случаи, когда атрибут равен null или отсутствует, поскольку в таких случаях ошибка всегда возникала.

FILTER_APPLICATION_QUERY

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

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

Теперь приложениям необходимо объявлять пакеты и намерения, которые они собираются использовать, прежде чем они смогут получить информацию о других приложениях на устройстве. Такие объявления должны быть сделаны с помощью тега <queries> в манифесте приложения.

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

FORCE_ENABLE_SCOPED_STORAGE

Идентификатор изменения : Значение: 132649864

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

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

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

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

GET_DATA_CONNECTION_STATE_R_VERSION

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

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

Чтобы проверить версию SDK для PreciseDataConnectionState#getDataConnectionState .

GET_DATA_STATE_R_VERSION

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

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

Чтобы проверить версию SDK для getDataState() .

GET_PROVIDER_SECURITY_EXCEPTIONS

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

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

Для приложений, ориентированных на Android 11 (уровень API 30) или выше, getProvider(String) больше не вызывает исключений безопасности.

GET_TARGET_SDK_VERSION_CODE_CHANGE

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

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

Чтобы проверить версию SDK для метода SmsManager.sendResolverResult() .

GWP_ASAN

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

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

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

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

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

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

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

Для приложений, ориентированных на Android 10 (уровень API 29) или выше, удаляется доступ ко всем интерфейсам, не относящимся к SDK, которые входят в список max-target-p ( greylist-max-p ) для Android 10 (уровень API 29).

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

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

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

Для приложений, ориентированных на Android 11 (уровень API 30) или выше, удаляется доступ ко всем интерфейсам, не относящимся к SDK, которые входят в список max-target-q ( greylist-max-q ) для Android 11 (уровень API 30).

Чтобы узнать больше об этом изменении, см. раздел «Не-SDK интерфейсы, которые теперь заблокированы в Android 11» .

LISTEN_CODE_CHANGE

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

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

Чтобы проверить версию SDK для TelephonyManager.listen(PhoneStateListener, int) .

ОТСУТСТВУЕТ_ТЕГ_ПРИЛОЖЕНИЯ

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

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

Для приложений, ориентированных на Android 11, теперь выдается ошибка, если в файле манифеста приложения отсутствует тег application или instrumentation .

NATIVE_HEAP_POINTER_TAGGING

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

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

Для приложений, ориентированных на Android 11, выделение памяти в куче теперь имеет ненулевой тег в старшем байте.

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

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

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

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

Для приложений, ориентированных на Android 11, теперь существует ограничение на количество объектов PhoneStateListener , которые может зарегистрировать любой процесс с помощью TelephonyManager.listen(PhoneStateListener, int) . Ограничение по умолчанию составляет 50, и его можно изменить при удаленном обновлении конфигурации устройства. Это ограничение обеспечивается с помощью исключения IllegalStateException , выбрасываемого TelephonyManager.listen(PhoneStateListener, int) когда проблемный процесс пытается зарегистрировать на один обработчик больше, чем необходимо.

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

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

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

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

PROCESS_CAPABILITY_CHANGE_ID

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

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

Для приложений, ориентированных на Android 11, теперь можно использовать флаг Context.BIND_INCLUDE_CAPABILITIES для передачи используемых во время работы возможностей из клиентского процесса в привязанную службу.

REMOVE_ANDROID_TEST_BASE

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

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

Для приложений, ориентированных на Android 11, библиотека android.test.base была удалена, если приложение не зависит от android.test.runner (поскольку оно зависит от классов из библиотеки android.test.base ).

ЗАПРОСИТЬ ИЗМЕНЕНИЕ КНОПКИ ДОСТУПНОСТИ

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

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

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

Чтобы узнать больше об этом изменении, см. раздел «Указание на использование кнопок доступности в файле метаданных» .

RESOURCES_ARSC_COMPRESSED

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

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

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

Чтобы узнать больше об этом изменении, см. раздел «Сжатые файлы ресурсов» .

RESTRICT_STORAGE_ACCESS_FRAMEWORK

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

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

Если ваше приложение ориентировано на Android 11 и использует Storage Access Framework (SAF) , вы больше не сможете получить доступ к определенным каталогам с помощью действий интента ACTION_OPEN_DOCUMENT и ACTION_OPEN_DOCUMENT_TREE . Подробнее об этих изменениях см. в разделе «Ограничения доступа к документам» на странице, посвященной обновлениям конфиденциальности, связанным с хранилищем в Android 11.

SELINUX_LATEST_CHANGES

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

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

Это изменение ограничивает доступ приложений к домену SELinux untrusted_app_R-targetSDk. Это одно из основополагающих изменений в структуре совместимости, позволяющее приложениям переключать другие изменения, регулируемые targetSdkVersion , без изменения targetSDKVersion самого приложения. По этой причине не следует отключать это изменение для приложения, ориентированного на Android 11, иначе приложение не будет работать.

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

THROW_SECURITY_EXCEPTIONS

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

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

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

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

USE_SET_LOCATION_ENABLED

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

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

Административные приложения, ориентированные на Android 11, больше не могут использовать DevicePolicyManager.setSecureSetting(ComponentName, String, String) для изменения устаревшего параметра Settings.Secure.LOCATION_MODE . Вместо этого им следует использовать DevicePolicyManager.setLocationEnabled(ComponentName, boolean) .