實現簽名配置

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