签名权限许可名单

由平台签名的应用是指采用相同(或兼容)签名的应用 带有平台软件包 (android) 的证书。平台签名的应用 系统应用(位于系统映像分区上)或非系统应用。 平台签名权限是由平台软件包定义的权限 同样具有 signature 保护级别。可调试 build 其 android.os.Build.isDebuggable() 返回 true,例如 userdebugeng build。

过去,设备制造商几乎无法控制可对平台签名的非系统应用授予哪些平台 signature 权限。从 Android 15 开始,制造商可以 在系统配置 XML 文件中授予平台签名权限, /etc/permissions 目录中。如果通过平台签名的非系统应用 添加到平台签名权限的许可名单后,该权限将起作用 就像应用未在不可调试 build 上进行平台签名一样。

添加许可名单

您可以将应用的权限许可名单列在位于 frameworks/base/etc/permissions 目录下的单个或多个 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。