签名配置功能允许在 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.global
和android.settings.global.signature
。如果将来 AndroidX 库要求将非 SDK 接口从黑名单中删除,这些密钥的值将由 Android 团队和/或作为 AndroidX 的一部分发布。
APK 元数据键android.settings.global
和android.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
...