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).