Платформа 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-сокеты по умолчанию используют механизм шифрования Conscrypt SSL.
В Android стандартная реализация SSLSocket основана на Conscrypt . Начиная с Android 11, эта реализация внутренне построена на основе SSLEngine от Conscrypt.
Scudo Hardened Allocator
В Android 11 для обработки выделения памяти в куче используется внутренний механизм Scudo Hardened Allocator . 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 обнаруживает некорректную обработку прав собственности на дескрипторы файлов, например, использование после закрытия и двойное закрытие. В Android 11 режим работы fdsan по умолчанию меняется. Теперь 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» .
Удалена общая библиотека карт версии 1.
В Android 11 полностью удалена первая версия общей библиотеки карт. Ранее эта библиотека считалась устаревшей и перестала функционировать для приложений в Android 10. Приложениям, которые ранее использовали эту общую библиотеку на устройствах под управлением Android 9 (уровень API 28) или ниже, следует использовать вместо неё 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", ...) .