签名权限许可名单

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

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

添加许可名单

您可以在单个 XML 文件或位于 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

系统仍然可以在可调试版本上授予该权限,但在不可调试版本(例如 user 版本)上则不能。