平台签名的应用是指与平台软件包 (android
) 共用相同(或兼容)的签名证书的应用。平台签名的应用可以是系统应用(位于系统映像分区上)或非系统应用。平台签名权限是指由平台软件包定义且具有 signature
保护级别的权限。可调试 build 是指其 android.os.Build.isDebuggable()
返回 true
的 build,例如 userdebug
或 eng
build。
过去,设备制造商几乎无法控制可以向经过平台签名的非系统应用授予哪些平台 signature
权限。从 Android 15 开始,制造商可以在 /etc/permissions
目录下的系统配置 XML 文件中明确授予平台签名权限。如果平台签名的非系统应用未添加到平台签名权限的许可名单中,则该权限会按应用未针对不可调试的 build 获得平台签名来发挥作用。
添加许可名单
您可以将应用的权限许可名单列在 frameworks/base/etc/permissions
目录下的单个 XML 文件或多个 XML 文件中:
/etc/permissions/signature-permissions-OEM_NAME.xml
/etc/permissions/signature-permissions-DEVICE_NAME.xml
对于内容的组织方式,没有严格的规则。只要将相应应用及其权限添加到许可名单中,设备实现人员便可以决定内容结构。
自定义许可名单
AOSP 包含可根据需要自定义的许可名单实现,类似于特许权限许可名单。例如:
<!--
~ This XML file declares which platform signature permissions to grant to
~ platform signed nonsystem apps.
-->
<permissions>
<signature-permissions package="com.android.example">
<permission name="android.permission.READ_DEVICE_CONFIG"/>
...
</signature-permissions>
...
</permissions>
查找缺少的权限
如需查找缺少的权限,请安装平台签名的应用,并检查设备日志中是否有以下格式的警告消息:
Signature permission {PERMISSION_NAME} for package {PACKAGE_NAME} ({PACKAGE_PATH}) not in signature permission allowlist
系统仍然可以对可调试 build 授予权限,但不能对不可调试 build(例如 user
build)授予权限。