Модуль PermissionController Mainline содержит политики конфиденциальности и интерфейс, связанный с предоставлением и управлением разрешениями (например, политики и интерфейс для предоставления и управления разрешениями).
О PermissionController
Модуль PermissionController обрабатывает интерфейс, логику и роли, связанные с разрешениями, чтобы предоставлять приложениям доступ для определенных целей. Она управляет следующими параметрами:
- Предоставление динамических разрешений (в том числе системным приложениям)
- Управление динамическими разрешениями (в том числе группировка разрешений)
- Отслеживание использования динамических разрешений
- Роли
В Android 12 классы фреймворка и системного сервера для Role
перенесены в модуль, чтобы сделать Role полностью модульным.
В Android 10 приложение Package Installer разделено на разделы, чтобы можно было обновить логику разрешений. Как обновляемый модуль Mainline, PermissionController:
- Взаимодействует с фреймворком только через стабильный @SystemApi (не использует @hide API).
- Обрабатывает намерения, связанные с разрешениями, с приоритетом > 0.
- Предоставляет механизм, позволяющий производителям устройств настраивать темы.
- Предоставляет сервисы, к которым могут подключаться система и приложения, в том числе управление ролями, отзыв разрешений и основную информацию о разрешениях (для приложения "Настройки").
- Поддержка автоматического отзыва разрешений для неиспользуемых приложений (новая функция Android 11).
В Android 9 управление разрешениями находится в разделе com.android.packageinstaller.
Автоматический отзыв разрешений для неиспользуемых приложений
В Android 11 модуль PermissionsController может автоматически отзывать разрешения, предоставленные во время выполнения, для приложений, которые не использовались в течение длительного времени. В приложениях, предназначенных для SDK 30 или более поздней версии, автоматический отзыв разрешений включен по умолчанию, а в приложениях, предназначенных для SDK 29 или более ранней версии, – отключен. Если автоматический отзыв разрешений включен, он применяется ко всем динамическим разрешениям, но не затрагивает разрешения, предоставленные заранее, в том числе разрешения, заданные правилами и системой, а также разрешения, предоставленные по умолчанию или по роли. Подробнее об автоматическом отзыве разрешений для неиспользуемых приложений…
Формат пакета
Формат модуля PermissionController отличается в разных версиях.
В Android 11 и более поздних версий модуль PermissionController имеет формат APEX и может обновляться. Название пакета:
com.google.android.permission.В Android 10 модуль PermissionController имеет формат APK и не обновляется. Название пакета:
com.google.android.permissioncontroller.
Граница модуля
В Android 12 код модуля Permission перенесен из packages/apps/PermissionController (проект platform/packages/apps/PackageInstaller) и frameworks/base/apex/permission (подкаталог проекта frameworks/base).
Новая структура проекта для packages/modules/Permission выглядит следующим образом:
- Файлы из сервиса "
frameworks/base/apex/permission" - Файлы PermissionController из сервиса "
packages/apps/PermissionController"
OEM-производители могут использовать примеры команд, чтобы перенести исправления из исходных каталогов проекта в новый.
Как перенести исправление из frameworks/base/apex/permission
root/frameworks/base/$ git format-patch -1 --relative=apex/permission commit --stdout > patch-file.txt
root/packages/modules/Permission$ git am -p2 patch-file.txt
Как перенести исправление из packages/apps/PermissionController
root/packages/apps/PermissionController$ git format-patch -1 commit --stdout > patch-file.txt
root/packages/modules/Permission$ git am -p2 --directory=PermissionController patch-file.txt
Настройка канала
Производители устройств могут настраивать тему интерфейса разрешений (цвета, поля, шрифты и изображения) с помощью наложений ресурсов времени выполнения (RRO).