studio signapk generate generar firmar error debug apksigner android keytool jarsigner

android - signapk - sign apk command line



Verifique el paso de llaves del almacén de claves de Android para ver si está correcto (2)

Estoy automatizando algunas cosas que involucran la herramienta android key y jarsigner. La herramienta toma un almacén de claves, la contraseña para el almacén de claves, el nombre de alias y la contraseña para el alias / clave, y estoy tratando de encontrar una manera de verificar explícitamente si la contraseña proporcionada para el alias / clave es correcta .

¿Algunas ideas? Además, necesito comprobarlo sin un archivo jar para firmar; obtener ese archivo en mi contexto es largo, por lo que quiero abortar más pronto que tarde.


Puedes hacerlo de un par de maneras:

A. Con keytool

Si ejecuta el comando keytool -keypasswd -keystore <keystore> -alias <alias> -storepass <storepass> -keypass <keypass> -new <keypass> entonces obtendrá el error Keystore was tampered with, or password was incorrect si el la contraseña del almacén de claves es incorrecta, o el error Cannot recover key si la contraseña del alias es incorrecta. Desafortunadamente, el código de retorno es 1 en ambos casos, por lo que deberá analizar la salida del programa si desea ser inteligente en cuanto al tipo de error.

B. Con un pequeño programa de Java.

Algo a lo largo de estas líneas:

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream(keystore)) { ks.load(fis, ksPw.toCharArray()); } ks.getEntry(alias, new KeyStore.PasswordProtection(aliasPw.toCharArray()));

fallará en la línea 4 con una java.io.IOException si la contraseña del almacén de claves es incorrecta, o con una java.security.UnrecoverableKeyException en la línea 7 si la contraseña de alias es incorrecta.


También puede verificar si la contraseña es correcta sin intentar cambiar la contraseña. Lo hice enumerando las propiedades del almacén de claves con este comando:

keytool -list -keystore <keystorefile> -storepass <passwordtocheck>