Платформа 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.
Реализация SSLSocket
в Android по умолчанию основана на Conscrypt . Начиная с Android 11, эта реализация построена на основе SSLEngine
от Conscrypt.
Усиленный распределитель Scudo
Android 11 использует внутренний защищенный распределитель Scudo для обслуживания распределения кучи. Scudo способен обнаруживать и устранять некоторые типы нарушений безопасности памяти. Если вы видите сбои, связанные со Scudo (например, Scudo ERROR:
) в собственных отчетах о сбоях, обратитесь к документации по устранению неполадок Scudo .
Статистика использования приложения
Чтобы лучше защитить пользователей, Android 11 хранит статистику использования приложений каждым пользователем в зашифрованном хранилище учетных данных . Таким образом, ни система, ни какие-либо приложения не смогут получить доступ к этим данным, если isUserUnlocked()
не вернет true
, что происходит после одного из следующих событий:
- Пользователь впервые разблокирует свое устройство после запуска системы.
- Пользователь переключается на свою учетную запись на устройстве.
Если ваше приложение уже привязано к экземпляру UsageStatsManager
, убедитесь, что вы вызываете методы этого объекта после того, как пользователь разблокирует свое устройство. В противном случае API теперь возвращает нулевые или пустые значения.
Поддержка эмулятора 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 удалена.
Версия 1 общей библиотеки Карт была полностью удалена в 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", ...)
.