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