平台签名的共享 UID 许可名单

平台签名的应用是指与平台软件包 (android) 共用相同(或兼容)的签名证书的应用。平台签名的应用可以是系统应用(位于系统映像分区上)或非系统应用。平台签名的共享 UID 是指包含平台签名的应用的共享 UID (android:sharedUserId)。可调试 build 是指其 android.os.Build.isDebuggable() 返回 true 的 build,例如 userdebugeng build。

过去,设备制造商几乎无法控制哪些平台签名的非系统应用可以加入平台签名的共享 UID。从 Android 15 开始,制造商可以在 /etc/permissions 目录下的系统配置 XML 文件中,明确允许平台签名的非系统应用加入平台签名的共享 UID。如果平台签名的非系统应用未添加到平台签名的共享 UID 的许可名单中,并且该应用仍尝试加入平台签名的共享 UID(其清单中包含 android:sharedUserId),则该应用无法安装在不可调试的 build 上。

添加许可名单

您可以将应用的许可名单列在单个 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>

查找缺少的许可名单

如需查找缺少的许可名单条目,请尝试在不可调试 build 上安装平台签名的非系统应用,并检查它是否仍可安装。如果不能,您可以检查设备日志中是否存在以下格式的警告消息:

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