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

Основной модуль 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

Производители оборудования могут использовать приведенные примеры команд для перемещения своих патчей из исходных каталогов проекта в новый каталог проекта.

Переместите патч из 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) .