Android: После создания источника платформы, как подписать произвольный APK с ключом платформы?

В качестве эксперимента я хотел бы использовать платформенный ключ моей пользовательской платформы Android для подписи произвольного APK, который построен через NDK. Каков процесс для этого?

Ответ 1

Если у вас есть пара ключей/сертификатов платформы (.pk8 + x509.pem). Что можно найти в файле build/target/product/security в pulbic sdk.

Вы можете использовать SignApk.jar из командной строки

java -jar SignApk.jar platform.x509.pem platform.pk8 Application.apk Application_signed.apk

Чтобы упростить автоматизацию, вы можете импортировать пару ключ /cert в файл хранилища java с помощью keytool-importkeypair и использовать make файл ant или затмение для подписания.

keytool-importkeypair -k ~/.android/debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

Ответ 2

Файл signapk.jar(все строчные буквы), упомянутый в aprock 'answer, можно найти в prebuilts/sdk/tools/lib/signapk.jar (или out/host/linux-x86/framework/signapk.jar).

Ниже я опишу, как управлять хранилищем ключей, используемым Eclipse и ant release.


Следующая команда берет ключевой файл platform.pk8 и сертификат X509 platform.x509.pem и выводит расшифрованный ключевой материал в tmp.p12. Имя platformkey используется для

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 | \
    openssl pkcs12 -export -in platform.x509.pem -inkey /dev/stdin \
    -name platformkey -password pass: -out tmp.p12

Eclipse и ant debug используйте хранилище ключей ~/.android/debug.keystore, которое заблокировано паролем android. (Вы также можете указать другой файл хранилища ключей, если хотите, например ~/.android/mykeys.keystore.) Следующая команда хранит материал ключа из tmp.p12 в хранилище ключей (без пароля для ключей, если вы хотите, отредактируйте -srcstorepass '' ниже):

keytool -importkeystore -deststorepass android -srckeystore tmp.p12 \
    -srcstoretype PKCS12 -srcstorepass '' -destkeystore ~/.android/debug.keystore

В этот момент вы можете удалить файл tmp.p12, потому что он больше не нужен.

Чтобы проверить, что находится в вашем хранилище ключей, вы можете запустить следующую команду keytool (вывод, который он отображает на следующей строке):

$ keytool -list -keystore ~/.android/debug.keystore -storepass android
...
platformkey, Nov 23, 2013, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 12:34:56:(stripped):AB:CD:EF

Когда вам больше не нужен ключ, его можно удалить с помощью:

keytool -delete -keystore ~/.android/debug.keystore -storepass android -alias platformkey

В вашем файле local.properties поместите (если вы опустите параметры key.*.password, вам нужно вводить его каждый раз, когда вы подписываете APK):

key.store=${user.home}/.android/debug.keystore
key.alias=platformkey
key.store.password=android
key.alias.password=

Теперь вы можете запустить ant release, чтобы подписать APK, используя ключ платформы, который вы сохранили в хранилище ключей.