实现 Signed Config

Signed Config 功能允许在 APK 中嵌入非 SDK 接口限制的配置。这样可以从黑名单中移除特定的非 SDK 接口,从而使 AndroidX 可以安全地使用它们。这允许 AndroidX 团队在已发布的 Android 版本上添加对新功能的支持。Android 10 及更高版本支持此功能。

正确支持 Signed Config 可确保 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 的值是要应用于 SettingsProvider 中全局设置的 JSON 编码配置值。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
...