具有特殊權限的應用程式是位於以下裝置 priv-app
目錄中的系統應用程式:
系統映像檔分區Android 版本的分區如下:
- Android 9 以上版本:
/system, /product, /vendor
- Android 8.1 以下版本:
/system
過去,裝置製造商幾乎無法掌控
簽名 |特殊權限可能獲得
具有特殊權限的應用程式自 Android 8.0 起,製造商可明確授權
中系統設定 XML 檔案內的特殊權限
/etc/permissions
目錄內。從 Android 9 開始,實作者可以
明確授予或拒絕所有特殊權限。如果沒有授予特殊權限,
裝置無法啟動
privapp-permissions.xml
檔案只能授予或拒絕
權限。舉例來說
/product
分區中的應用程式會要求特殊權限,
只能由 privapp-permissions.xml
授予或拒絕
檔案位於 /product
中。
新增許可清單
應用程式權限許可清單可列在單一 XML 檔案中,也可列在多個檔案
frameworks/base/etc/permissions
目錄中的 XML 檔案:
/etc/permissions/privapp-permissions-OEM_NAME.xml
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
內容編排方式並無嚴謹,裝置實作者可以
決定內容結構 (來源必須是「/system/priv-app
」中的所有應用程式)
已加入許可清單。舉例來說,Google 為所有具有特殊權限的應用程式開發了一個許可清單。
我們建議建立下列機構:
- 應用程式權限
Android 開放原始碼計畫 (AOSP)
/etc/permissions/privapp-permissions-platform.xml
中列出樹狀目錄 - 如為其他應用程式,請使用以下格式的檔案:
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
。
自訂許可清單
Android 開放原始碼計畫提供許可清單實作功能,可視需求自訂。
如果必須拒絕權限,請編輯 XML 來使用 deny-permission
標記
而不是 permission
標記例如:
<!-- This XML file declares which signature|privileged permissions to grant to privileged apps that come with the platform --> <permissions> <privapp-permissions package="com.android.backupconfirm"> <permission name="android.permission.BACKUP"/> <permission name="android.permission.CRYPT_KEEPER"/> </privapp-permissions> <privapp-permissions package="com.android.cellbroadcastreceiver"> <!-- Don't allow the application to interact across users --> <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/> <permission name="android.permission.MANAGE_USERS"/> <permission name="android.permission.MODIFY_PHONE_STATE"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/> </privapp-permissions> ...
尋找缺少的權限
如要在啟動新裝置時找出缺少的權限,請啟用轉換記錄模式:
ro.control_privapp_permissions=log
記錄檔中會列出違規行為。系統會授予非特殊權限。 這樣做可確保裝置保持在工作狀態,同時仍提供 。錯誤訊息的格式如下:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
如要解決所有違規事項,請將缺少的權限加入適當的許可清單。 請注意:
- Android 9 以上版本,違反特殊權限權限會導致裝置無法 。相反地,您必須明確允許或拒絕所有特殊權限。
- 在 Android 8.0 以下版本中,即使缺少必要權限,也無法將缺少的權限授予受影響的應用程式
是否位於
priv-app
路徑中
強制執行許可清單
建立許可清單後,請設定版本來啟用執行階段強制執行功能
屬性 ro.control_privapp_permissions=enforce
。
只有當應用程式宣告權限時,
package="android"
。ro.control_privapp_permissions
資源狀態必須遵循
第 9.1 節權限
。