实现已签名配置

签名配置功能允许在 APK 中嵌入有关非 SDK 接口受限情况的配置,进而可以从屏蔽名单中移除特定非 SDK 接口,以便 AndroidX 安全地使用它们。这让 AndroidX 团队可以在已发布的 Android 版本上添加对新功能的支持。Android 10 及更高版本支持该功能。

适当地支持签名配置可以确保 AndroidX 库在将来推出的设备上正常运行。

该功能无法自定义,在 AOSP 中完全受支持,且无需原始设备制造商 (OEM) 采取任何行动。

示例和来源

功能实现位于系统服务器的以下位置:frameworks/base/services/core/java/com/android/server/signedconfig。CTS 测试 CtsSignedConfigHostTestCases 包含使用示例,并在 cts/hostsidetests/signedconfig/app/version1_AndroidManifest.xml 中提供了一个配置示例。

实现

支持该功能不需要采取任何行动,也没有具体的硬件要求。

该功能使用两个应用元数据键在 APK 内部嵌入配置和签名。这两个键分别是 android.settings.globalandroid.settings.global.signature。如果未来 AndroidX 库要求从屏蔽名单中移除非 SDK 接口,则这两个键的值将由 Android 团队发布和/或作为 AndroidX 的一部分来发布。

APK 元数据键 android.settings.globalandroid.settings.global.signature 均包含 base-64 编码数据。键 android.settings.global 的值是以 JSON 编码的配置值,会应用到 SettingsProvider 中的全局设置。键 android.settings.global.signature 的值是 JSON 数据的 ECDSA-p256 签名。该签名用于验证配置数据的来源。

该功能对用户不可见。

自定义

该功能不支持自定义。不建议原始设备制造商 (OEM) 修改该功能,包括替换键。对该功能的任何更改都可能导致 AndroidX 未来在受影响的设备上无法正常运行。

验证

CTS 测试 CtsSignedConfigHostTestCases 可以验证功能实现情况。

此外,您还可以通过安装适当的 APK 和检查 adb logcat 输出来手动测试该功能:

$ adb install CtsSignedConfigTestAppV1.apk
...
$ adb logcat
...
I SignedConfig: Verified config using production key
...