Android: Después de construir la fuente de la plataforma, cómo firmar APK arbitraria con la clave de la plataforma?


Como experimento, me gustaría usar la clave de plataforma de mi plataforma Android personalizada para firmar un APK arbitrario, que se construye a través del NDK. ¿Cuál es el proceso para hacer esto?

Author: zer0stimulus, 2010-11-22

2 answers

Si tiene su par clave/certificado de plataforma (.pk8 + x509.pem). Que se puede encontrar en build / target / product / security en pulbic sdk.

Puede usar SignApk.jar desde la línea de comandos

Java-jar SignApk.frasco plataforma.x509.pem de la plataforma.pk8 Aplicación.apk Application_signed.apk

O para facilitar la automatización, puede importar el par clave/cert en su archivo de almacén de claves java, con el keytool-importkeypair , y usar un ant makefile o eclipse para firmar.

Keytool-importkeypair-k ~/.android / depurar.keystore-p android -plataforma pk8.plataforma pk8-cert.x509.pem-alias platform

 45
Author: aprock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-02 13:05:09

El signapk.el archivo jar (todo en minúsculas) mencionado en aprock' answer se puede encontrar en prebuilts/sdk/tools/lib/signapk.jar (o out/host/linux-x86/framework/signapk.jar).

A continuación describiré cómo administrar el almacén de claves utilizado por Eclipse y ant release.


El siguiente comando toma el archivo de clave platform.pk8 y el certificado X509 platform.x509.pem y muestra el material de clave descifrado en tmp.p12 . El nombre platformkey se utiliza para

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 y ant debug utilizar el keystore at ~/.android / depurar.keystore que está bloqueado con la contraseña android. (También puede especificar otro archivo de almacén de claves si lo desea, por ejemplo, ~/.android/mykeys.keystore.) El siguiente comando almacena el material clave de tmp.p12 en el almacén de claves (sin una contraseña para las claves, si desea una, edite -srcstorepass '' a continuación):

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

En este punto, puede eliminar el tmp.p12 porque ya no es necesario.

Para comprobar lo que hay en su almacén de claves, puede ejecutar el siguiente comando keytool (la salida que se muestra en la línea a partir de entonces):

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

Cuando ya no necesite la clave, puede eliminarla con:

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

En su archivo local.properties, ponga (si omite las opciones key.*.password, debe ingresarlo cada vez que firme el APK):

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

Ahora puedes ejecutar ant release para firmar tu APK usando la clave de plataforma que guardaste en un almacén de claves.

 15
Author: Lekensteyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:16:56