PermissionController Mainline 模塊包含隱私策略以及與授予和管理權限相關的 UI(例如,授予和管理權限的策略和 UI)。
關於權限控制器
PermissionController 模塊處理與權限相關的 UI、邏輯和角色,以允許出於特定目的訪問應用程序。它控制以下內容:
- 運行時權限授予(包括授予系統應用程序)
- 運行時權限管理(包括權限分組)
- 運行時權限使用跟踪
- 角色
從 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 中,權限模塊代碼從packages/apps/PermissionController
( platform/packages/apps/PackageInstaller
項目)和frameworks/base/apex/permission
(這是frameworks/base
項目的子目錄)中移出。
packages/modules/Permission
的新項目結構如下:
- 來自
frameworks/base/apex/permission
的文件 - 來自
packages/apps/PermissionController
的 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) 自定義權限 UI 主題(顏色、邊距、字體和可繪製對象) 。