Как реализовать конфигурацию с подписью

Функция 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.global и android.settings.global.signature. Если в будущем библиотекам AndroidX потребуется удалить из черного списка интерфейсы, не относящиеся к SDK, команда Android и/или AndroidX опубликует значения для этих ключей.

Ключи метаданных APK android.settings.global и android.settings.global.signature содержат данные, закодированные в формате Base64. Значение для ключа android.settings.global – это закодированные в формате JSON значения конфигурации, которые будут применены к глобальным настройкам в SettingsProvider. Значение android.settings.global.signature – это подпись ECDSA-p256 данных JSON. Подпись используется для проверки источника данных конфигурации.

Функция не видна пользователям.

Настройка канала

Функция не предназначена для настройки. Производителям оригинального оборудования не рекомендуется изменять эту функцию, в том числе заменять клавиши. Любые изменения могут привести к тому, что AndroidX не будет работать должным образом на затронутых устройствах.

Проверка

Тест CTS CtsSignedConfigHostTestCases проверяет реализацию функции.

Вы также можете протестировать функцию вручную, установив подходящий APK-файл и проверив выходные данные adb logcat:

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