Изменения поведения: все приложения

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

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

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

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

  • Одноразовые разрешения : дают пользователям возможность предоставлять больше временных разрешений на доступ к местоположению, микрофону и камере.
  • Видимость диалогового окна разрешений : повторные отказы в предоставлении разрешения подразумевают «больше не спрашивайте».
  • Аудит доступа к данным : получите представление о том, где ваше приложение обращается к личным данным, как в коде вашего приложения, так и в коде зависимых библиотек.
  • Разрешения для окна системного оповещения : некоторым классам приложений автоматически предоставляется разрешение SYSTEM_ALERT_WINDOW по запросу. Кроме того, намерения, включающие действие намерения ACTION_MANAGE_OVERLAY_PERMISSION , всегда перенаправляют пользователей на экран в системных настройках.
  • Постоянные идентификаторы SIM-карт : в Android 11 и более поздних версиях доступ к несбрасываемым ICCID через метод getIccId() ограничен. Этот метод возвращает ненулевую пустую строку. Для уникальной идентификации установленной SIM-карты на устройстве используйте метод getSubscriptionId() . Идентификатор подписки представляет собой индексное значение (начинающееся с 1) для уникальной идентификации установленных SIM-карт, включая физические и электронные. Значение этого идентификатора остается неизменным для данной SIM-карты, пока устройство не будет сброшено до заводских настроек.

Более подробную информацию см. на странице «Конфиденциальность» .

Уведомления о воздействии

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

Для защиты конфиденциальности пользователей всем остальным приложениям по-прежнему запрещено выполнять сканирование Bluetooth, если только не включена настройка определения местоположения устройства и пользователь не предоставил им разрешение на определение местоположения. Подробнее об этом можно узнать в нашей публикации «Обновление системы уведомлений о риске инфицирования» .

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

SSL-сокеты по умолчанию используют SSL-движок Conscrypt.

Реализация SSLSocket в Android по умолчанию основана на Conscrypt . Начиная с Android 11, эта реализация построена на основе SSLEngine от Conscrypt.

Scudo Hardened Allocator

В Android 11 используется встроенный аллокатор Scudo Hardened Allocator для обслуживания выделения кучи. Scudo способен обнаруживать и устранять некоторые нарушения безопасности памяти. Если в отчётах о сбоях Scudo вы видите сбои, связанные со Scudo (например, Scudo ERROR: , обратитесь к документации по устранению неполадок Scudo .

Статистика использования приложения

Для лучшей защиты пользователей Android 11 хранит статистику использования приложений каждым пользователем в зашифрованном хранилище с учётными данными . Таким образом, ни система, ни приложения не смогут получить доступ к этим данным, если только isUserUnlocked() не вернёт true , что происходит после одного из следующих событий:

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

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

Поддержка эмулятора 5G

В Android 11 добавлены API 5G , позволяющие вашим приложениям добавлять передовые функции. Для тестирования функций по мере их добавления вы можете использовать новые возможности эмулятора Android SDK . Новая функциональность была добавлена в версии эмулятора 30.0.22. Выбор настройки сети 5G устанавливает для параметра TelephonyDisplayInfo значение OVERRIDE_NETWORK_TYPE_NR_NSA , изменяет предполагаемую пропускную способность и позволяет настроить тарифицируемость, чтобы убедиться, что ваше приложение правильно реагирует на изменения статуса NET_CAPABILITY_TEMPORARILY_NOT_METERED .

Производительность и отладка

Отладка ограничений вызовов API JobScheduler

В Android 11 реализована поддержка отладки приложений для выявления потенциальных вызовов API JobScheduler , превысивших определённые ограничения. Разработчики могут использовать эту возможность для выявления потенциальных проблем с производительностью. Для приложений с атрибутом манифеста debuggable , установленным в значение true, вызовы API JobScheduler , превышающие ограничения, будут возвращать RESULT_FAILURE . Ограничения установлены таким образом, чтобы не влиять на допустимые сценарии использования.

Санитайзер файловых дескрипторов (fdsan)

В Android 10 появился fdsan (дезинфектор файловых дескрипторов). fdsan обнаруживает неправильное обращение с владением файловыми дескрипторами, например, использование после закрытия и двойное закрытие. Режим по умолчанию для fdsan меняется в Android 11. Теперь fdsan прерывает работу при обнаружении ошибки; ранее он регистрировал предупреждение и продолжал работу. Если в вашем приложении наблюдаются сбои из-за fdsan , обратитесь к fdsan documentation .

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

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

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

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

Подробнее об изменениях в этой версии Android см. в разделе Обновления ограничений интерфейсов, не относящихся к SDK, в Android 11. Подробнее об интерфейсах, не относящихся к SDK, в целом см. в разделе Ограничения интерфейсов, не относящихся к SDK .

Удалена общая библиотека Maps v1

Первая версия общей библиотеки Карт была полностью удалена в Android 11. Ранее эта библиотека была объявлена устаревшей и перестала функционировать для приложений в Android 10. Приложения, которые ранее использовали эту общую библиотеку для устройств под управлением Android 9 (уровень API 28) или ниже, должны вместо этого использовать Maps SDK для Android .

Взаимодействие с другими приложениями

URI общего доступа к контенту

Если ваше приложение использует общий URI контента с другим приложением, намерение должно предоставить разрешения на доступ к URI , установив хотя бы один из следующих флагов намерения: FLAG_GRANT_READ_URI_PERMISSION и FLAG_GRANT_WRITE_URI_PERMISSION . Таким образом, если другое приложение предназначено для Android 11, оно по-прежнему сможет получить доступ к URI контента. Ваше приложение должно включать флаги намерения, даже если URI контента связан с поставщиком контента, которым ваше приложение не владеет.

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

Загрузка библиотеки

Загрузка общей библиотеки ICU по абсолютному пути

Приложения, ориентированные на API 28 и ниже, не могут использовать dlopen(3) для загрузки libicuuc по абсолютному пути "/system/lib/libicuuc.so". Для таких приложений dlopen("/system/lib/libicuuc.so", ...) вернёт нулевой дескриптор.

Вместо этого, чтобы загрузить библиотеку, используйте имя библиотеки в качестве имени файла, например dlopen("libicuuc.so", ...) .