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