android apk jar-signing

Intentando firmar manualmente el paquete de Android con jarsigner.exe e instalarlo con adb.exe



apk jar-signing (3)

Para firmar apks usando JDK 1.7, uno tiene que usar estas palabras clave "-sigalg MD5withRSA -digestalg SHA1 "

Motivo: A partir de JDK 7, el algoritmo de firma predeterminado ha cambiado, requiriendo que especifique los algoritmos de firma y resumen (-sigalg y -digestalg) cuando firme un APK.

Mando:

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorefile] [originalapk] alias_name

He estado intentando usar jarsigner.exe y adb.exe para firmar manualmente un paquete de Android e instalarlo en un emulador de API V8. Creé un proyecto simple HelloAndroid y generaría un HelloAndroid.apk firmado utilizando el debug.keystore ubicado en el directorio .android del usuario. Cuando se inicia desde Eclipse, crea e instala la apk en el emulador sin ningún problema.

Utilicé las herramientas de Android para exportar un paquete de aplicación sin firmar a un directorio separado. Firmé y configuré zipAligned y usé adb para instalarlo pero recibí el error:

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

Utilicé el siguiente comando para firmarlo.

jarsigner -verbose -keystore c:/users/jhwong/.android/debug.keystore -storepass android -keypass android -digestalg SHA-1 -sigalg SHA1withRSA -sigfile CERT -signedjar temp/HelloWorld2.apk temp/HelloWorld.unsigned.apk androiddebugkey adding: META-INF/MANIFEST.MF adding: META-INF/CERT.SF adding: META-INF/CERT.RSA signing: res/layout/main.xml signing: AndroidManifest.xml signing: resources.arsc signing: res/drawable-hdpi/icon.png signing: res/drawable-ldpi/icon.png signing: res/drawable-mdpi/icon.png signing: classes.dex

Eso no me dio ningún error y solo para asegurarme de que corrí:

jarsigner -verify -verbose temp/HelloWorld2.apk

Mostró que el frasco fue verificado y cada archivo firmado y parte del manifiesto.

zipalign -v 4 temp/HelloWorld2.apk temp/HelloWorld3.apk que terminó sin un error. Luego usé adb install -r temp/HelloWorld3.apk .

He visto varios temas y artículos relacionados que sugieren estas instrucciones, pero estoy perplejo en cuanto a por qué no funciona manualmente los versos que usan Eclipse para compilar el paquete firmado. Incluso tomé el paquete creado a partir de Eclipse y pude usar adb.exe para instalarlo, así que lo he reducido a la firma del paquete. He probado los almacenes de claves que he generado desde la herramienta de claves pero no funcionaron tan bien, por eso probé el debug.keystore.

Apreciaría cualquier consejo si notara algo malo con mi código de señalización.


Si está utilizando JDK 7, intente

jarsigner -sigalg SHA1withRSA -digestalg SHA1

Si lo consigues

jarsigner error: java.security.SignatureException: private key algorithm is not compatible with signature algorithm

entonces intenta

jarsigner -sigalg MD5withRSA -digestalg SHA1


Tuvimos exactamente el mismo problema. Intente usar los siguientes valores de parámetros:

jarsigner ... -digestalg SHA1 -sigalg MD5withRSA ...

Por cierto, el uso de sigalg y digestalg explícitos parece ser obligatorio con JDK 7.