Изменения в системе совместимости (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 .

ADMIN_APP_PASSWORD_COMPLEXITY

Изменить идентификатор : 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) или выше.

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

DEFAULT_SCOPED_STORAGE

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

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

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

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

Дополнительную информацию об изменениях в хранилище Scoped в Android 11 см. в разделе «Хранилище Scoped» на странице об изменениях в хранилище Android в Android 11.

EMPTY_INTENT_ACTION_CATEGORY

Изменить идентификатор : 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 вашего приложения и значений флага манифеста, включив это изменение.

Дополнительную информацию об изменениях в хранилище Scoped в Android 11 см. в разделе «Хранилище Scoped» на странице об изменениях в хранилище 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) .

MISSING_APP_TAG

Изменить идентификатор : 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) .