簽名配置功能允許在 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
...