Модуль PermissionController Mainline содержит политики конфиденциальности и пользовательский интерфейс, связанный с предоставлением разрешений и управлением ими (например, политики и пользовательский интерфейс для предоставления разрешений и управления ими).
О контроллере разрешений
Модуль PermissionController обрабатывает пользовательский интерфейс, логику и роли, связанные с разрешениями, чтобы разрешить доступ приложениям для определенных целей. Он контролирует следующее:
- Предоставление разрешений во время выполнения (включая предоставление системным приложениям)
- Управление разрешениями во время выполнения (включая группировку разрешений)
- Отслеживание использования разрешений во время выполнения
- Роли
Начиная с Android 12, классы платформы и системного сервера для Role
перенесены в модуль, чтобы сделать Role
полностью модульной.
В Android 10 приложение Package Installer разделено на разделы, чтобы обеспечить возможность обновления логики разрешений. В качестве обновляемого модуля Mainline PermissionController:
- Взаимодействует с платформой только через стабильный @SystemApi (без использования @hide API).
- Обрабатывает намерения, связанные с разрешениями, с приоритетом > 0.
- Предоставляет механизм, позволяющий OEM-производителям настраивать темы.
- Предоставляет службы, к которым могут привязываться система и приложения, включая управление ролями, отзыв разрешений и базовую информацию о разрешениях (для настроек).
- Поддерживает автоматический отзыв неиспользуемых приложений (новинка в Android 11).
В Android9 контроль разрешений является частью 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
Кастомизация
OEM-производители могут настраивать тему пользовательского интерфейса разрешений (цвета, поля, шрифты и элементы рисования) с помощью наложений ресурсов времени выполнения (RROS) .