特殊權限許可清單

具有特殊權限的應用程式是位於以下裝置 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 節權限