На этой странице описаны все изменения в поведении, влияющие на приложения, которые были добавлены в тестирование на совместимость в 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) или более поздней версии.
Для доступа к базе данных APN в приложениях, предназначенных для Android 11, теперь требуется разрешение 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, больше не направляют пользователя на экран приложения для управления связанным разрешением. Вместо этого пользователь перенаправляется на экран, где он может управлять всеми приложениями, которые запросили разрешение.
CHANGE_TEXT_TOASTS_IN_THE_SYSTEM
Идентификатор изменения: 147798919.
Состояние по умолчанию. Включено для приложений, предназначенных для Android 11 (уровень API 30) или более поздней версии.
Теперь всплывающие подсказки отображаются в системном интерфейсе, а не в приложении. Это не позволяет приложениям обходить ограничения на показ собственных всплывающих подсказок в фоновом режиме.
DEFAULT_SCOPED_STORAGE
Идентификатор изменения: 149924527.
Состояние по умолчанию: включено для всех приложений.
Все приложения, предназначенные для Android 11, теперь по умолчанию используют области хранения данных. Отключить эту функцию больше нельзя.
Однако вы можете протестировать приложение без областей хранения данных, независимо от целевой версии SDK и значений флагов манифеста, отключив это изменение.
Подробнее об изменениях в областях хранения данных в 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 и значений флагов манифеста, включив это изменение.
Подробнее об изменениях в областях хранения данных в 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.runner, библиотека android.test.base удаляется, поскольку она зависит от классов из библиотеки android.test.base.
REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Идентификатор изменения: 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), вы больше не сможете получать доступ к некоторым каталогам с помощью действий intent 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).