PermissionController Mainline 模組包含隱私權政策,以及授予和管理權限相關的 UI (例如授予和管理權限的政策和 UI)。
關於 PermissionController
PermissionController 模組會處理權限相關的 UI、邏輯和角色,允許應用程式存取特定用途。可控制的項目如下:
- 授予執行階段權限 (包括授予系統應用程式)
- 管理執行階段權限 (包括權限分組)
- 追蹤執行階段權限的使用情況
- 角色
從 Android 12 開始,Role
的架構和系統伺服器類別會移至模組,讓 Role
完全模組化。
在 Android 10 中,系統會將「套件安裝程式」應用程式分成多個部分,以便更新權限邏輯。PermissionController 是可更新的主系列模組,因此:
- 僅透過穩定的 @SystemApi 與架構互動 (不使用 @hide API)。
- 處理優先順序大於 0 的權限相關意圖。
- 提供機制,讓原始設備製造商 (OEM) 自訂主題。
- 提供系統和應用程式可繫結的服務,包括角色管理、權限撤銷和基本權限資訊 (適用於「設定」)。
- 支援自動撤銷未使用的應用程式權限 (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
自訂
原始設備製造商 (OEM) 可以使用執行階段資源疊加層 (RROS) 自訂權限 UI 主題 (顏色、邊框間距、字型和可繪項目)。