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

Модуль PermissionController Mainline содержит политики конфиденциальности и пользовательский интерфейс, связанный с предоставлением разрешений и управлением ими (например, политики и пользовательский интерфейс для предоставления разрешений и управления ими).

О PermissionController

Модуль PermissionController обрабатывает пользовательский интерфейс, логику и роли, связанные с разрешениями, чтобы разрешить доступ приложениям для определенных целей. Он контролирует следующее:

  • Предоставление разрешений во время выполнения (включая предоставление системным приложениям)
  • Управление разрешениями во время выполнения (включая группировку разрешений)
  • Отслеживание использования разрешений во время выполнения
  • Роли

Начиная с Android 12 классы платформы и системного сервера для Role перемещены в модуль, чтобы сделать Role полностью модульной.

В Android 10 приложение Package Installer разделено на разделы, позволяющие обновлять логику разрешений. Как обновляемый модуль Mainline, PermissionController:

  • Взаимодействует с фреймворком только через стабильный @SystemApi (без использования @hide API).
  • Обрабатывает намерения, связанные с разрешениями, с приоритетом > 0.
  • Предоставляет механизм, позволяющий OEM-производителям настраивать темы.
  • Предоставляет службы, к которым могут привязываться система и приложения, включая управление ролями, отзыв разрешений и базовую информацию о разрешениях (для настроек).
  • Поддерживает автоматический отзыв неиспользуемых приложений (новое в Android 11).

В Android9 контроль разрешений является частью com.google.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

Переместите патч из пакетов/приложений/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) .