Android: после создания исходного кода платформы, как подписать произвольный APK с помощью ключа платформы? - PullRequest
25 голосов
/ 22 ноября 2010

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

Ответы [ 2 ]

46 голосов
/ 23 ноября 2010

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

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

java -jar Платформа SignApk.jar.x509.pem platform.pk8 Application.apk Application_signed.apk

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

keytool-importkeypair -k ~ / .android / debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.платформа pem -alias

16 голосов
/ 24 ноября 2013

Файл 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 <b>platform.pk8</b> | \
    openssl pkcs12 -export -in <b>platform.x509.pem</b> -inkey /dev/stdin \
    -name <b>platformkey</b> -password pass: -out <i>tmp.p12</i>

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

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

На данный момент вы можете удалить файл tmp.p12 , так как он больше не нужен.

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

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

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

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

В вашем файле 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, используя ключ платформы, который вы сохранили в хранилище ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...