平台簽署的共用 UID 許可清單

平台簽署的應用程式是指共用相同 (或相容) 簽署的應用程式 並產生一個憑證 (android)。平台簽署的應用程式 系統應用程式 (位於系統映像檔分區) 或非系統應用程式。 平台簽署的共用 UID 是共用 UID (android:sharedUserId), 含有平台簽署的應用程式。可進行偵錯的版本是指具有 android.os.Build.isDebuggable() 會傳回 true,例如 userdebugeng 建構應用程式

就過去來說,裝置製造商不太能掌控是哪個平台簽署 非系統應用程式可以加入平台簽署的共用 UID。在 Android 裝置上開始行動 15,製造商可明確允許平台簽署 非系統應用程式,藉此加入系統設定中平台簽署的共用 UID /etc/permissions 目錄中的 XML 檔案。如果平台未簽署的非系統 應用程式未加入平台簽署的共用 UID 許可清單 仍會嘗試加入平台簽署的共用 UID (使用 android:sharedUserId) ,就無法在無法偵錯的版本上安裝該應用程式。

新增許可清單

您可以在單一 XML 檔案中,或在多個 XML 檔案中列出應用程式的許可清單。 類似 frameworks/base/data/etc/package-shareduid-allowlist.xml:

<!--
This XML defines an allowlist for packages that want to join a particular shared-uid.
If a non-system package that is signed with platform signature, is trying to join a particular
shared-uid, and not in this list, the installation will fail.

- The "package" XML attribute refers to the app's package name.
- The "shareduid" XML attribute refers to the shared uid name.
  -->

<config>
    <allow-package-shareduid package="android.test.settings" shareduid="android.uid.system" />
</config>

尋找遺漏的許可清單

如要找出缺少的許可清單項目,請嘗試安裝平台簽署的非系統 應用程式,並檢查是否仍可安裝。如果不是, 可查看裝置記錄,找出下列類型的警告訊息:

Non-preload app {PACKAGE_NAME} signed with platform signature and joining shared uid: {SHARED_UID_NAME}