Контроллер разрешений

Модуль 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) .