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

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