PermissionController

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

О PermissionController

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

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

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

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

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

В Android 9 управление разрешениями находится в разделе 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

Настройка канала

Производители устройств могут настраивать тему интерфейса разрешений (цвета, поля, шрифты и изображения) с помощью наложений ресурсов времени выполнения (RRO).