Categorías
Dev Flutter

Como crear un keystore para hacer el build de un proyecto en Flutter

A veces quisiera que la documentación fuera un poco más maternal y no un oceano de links con manuales técnicos en los que uno se termina perdiendo para tirar un simple comando. Cómo el mundo es así de cruel, hoy seré yo su madre y los llevaré de la mano por este difícil sendero que es programar.

Antes que nada, si el comando keytool no funciona, es necesario agregarlo a las variables de entorno. keytool está disponible como parte de los archivos que se instalan con Android Studio. Primero, correr el siguiente comando:

$ flutter doctor -v
[√] Flutter (Channel stable, 1.22.6, on Microsoft Windows [Version    
    10.0.19041.867], locale en-US)
    • Flutter version 1.22.6 at C:\src\flutter
    • Framework revision 9b2d32b605 (7 weeks ago), 2021-01-22 14:36:39
      -0800
    • Engine revision 2f0af37152
    • Dart version 2.10.5


[√] Android toolchain - develop for Android devices (Android SDK version    30.0.3)
    • Android SDK at C:\Users\Mario\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: C:\Program Files\Android\Android
      Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b01)
    • All Android licenses accepted.
...

El path que se obtiene en Java binary at se puede agregar a las variables de entorno (Puede ser en las del usuario, no tiene que ser en las del sistema. Buscar Environment en el buscador de windows y ahí saldrá la opción). Eso sí, solamente debe agregarse hasta el bin, así:

C:\Program Files\Android\Android Studio\jre\bin

Hecho esto, funcionará el keytool, entonces ya se puede correr el comando:

keytool -genkey -v -keystore c:\Users\USER_NAME\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key

Lo primero es que USER_NAME debe ser reemplazado por su nombre de usuario de Windows, que puede deducir de las carpetas disponibles en C:\Users. Suponiendo que su nombre de usuario sea Mario (Qué nombre más bello!), el comando quedaría así:

keytool -genkey -v -keystore c:\Users\Mario\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key

A continuación seguirá llenar los valores que el comando le pide (Nombre, ciudad, etc. Vamos! No hace falta explicar eso). Al final, su clave quedará en el directorio C:\Users\USER_NAME con el nombre key.jks.

Y por favor, corra este comando en el CMD, NO en git bash ni en otra cosa parecida. No se por que razón no funciona, pero es mejor ahorrarse el sufrimiento.

Es muy importante tener en mente que no puede existir un archivo key.jks en el mismo lugar. Esto generará un error como este al intentar definir la primera contraseña:

Enter keystore password:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
java.io.IOException: Keystore was tampered with, or password was incorrect
        at java.base/sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:785)
        at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:222)
        at java.base/java.security.KeyStore.load(KeyStore.java:1472)
        at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:1074)
        at java.base/sun.security.tools.keytool.Main.run(Main.java:409)
        at java.base/sun.security.tools.keytool.Main.main(Main.java:402)
Caused by: java.security.UnrecoverableKeyException: Password verification failed
        at java.base/sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:783)
        ... 5 more

Si usted usa Linux y no sabe que hacer, encomiéndese a Linus Torvalds con toda su fe. Si usa Mac, mi más sentido pésame. (Nah! Es broma, después voy a actualizar esto con las indicaciones para el resto de sistemas operativos).

Deja una respuesta