平台签名共享 UID 允许列表

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

过去,设备制造商对哪些平台签名的非系统应用可以加入平台签名的共享 UID 几乎没有控制权。从 Android 15 开始,制造商可以在 /etc/permissions 目录下的系统配置 XML 文件中显式允许平台签名的非系统应用加入平台签名的共享 UID。如果平台签名的非系统应用未添加到平台签名共享 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}