Firmar una APK para Android en Linux
Hace un tiempo comentábamos las posibilidades de producir una App para Android, con los recursos que ofrecen HTML, CSS y JavaScript; mediante el framework de Apache Cordova. Quienes lo prueben conseguirán visualizar su App en un emulador como el AVD o Genymotion, no obstante, al momento de hacer una versión release para visualizar desde un teléfono, se nos avisará que la App no es segura, y no podremos instalarla. Ni hablar si tenemos deseos de subirla al Play Store de Google. Y la razón es sencilla: necesitamos firmar el APK.
Al generar un APK desde frameworks como Córdova o Ionic aparecerá un archivo que suele llamarse android-release-unsigned.apk
.
Ese archivo APK está comprimido como corresponde y es 100% funcional,
sin embargo se nos pide que la validemos al "firmarla" de forma digital
por razones relacionadas con el cifrado. A continuación se detallan unas
sencillas instrucciones para firmar un APK en linux de forma manual (se
puede realizar de forma automática modificando las opciones de
compilación). Para empezar, necesitamos generar una keystore. Se trata
de una clave cifrada que va a acompañar al archivo APK, y se genera como
un archivo a parte, se puede usar indefinidas veces hasta que cumpla su
ciclo de vencimiento. Teniendo una versión de Java instalada ya nos
encontramos en condiciones de utilizar la keytool. Vamos a ejecutar el
siguiente comando:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
Nos
pedirá introducir la contraseña del almacén de claves, pondremos una
contraseña cualquiera y la repetiremos. Acto seguido, pedirá datos como
nombres, ciudad, etc. Podemos completar los campos si deseamos o
saltearlos oprimiendo la tecla Enter. Cuando nos pregunte si es
Correcto, pondremos la tecla S, le damos al Enter nuevamente y
finalmente dejamos la misma contraseña para el alias_name. Ahora sí, nos
dispondremos a firmar el APK, para eso vamos a mover nuestra android-release-unsigned.apk
a mismo directorio donde se generó nuestra keystore, que llevará el nombre de my-release-key.keystore
. Usaremos el siguiente comando para ello:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore android-release-unsigned.apk alias_name
En caso de que nuestra APK no lleve el nombre android-release-unsigned.apk
,
será necesario modificarlo en el comando previamente utilizado. De más
está decir, asegurarnos de estar trabajando desde la terminal en el
mismo directorio donde se encuentran nuestros archivos. Vamos a tener
que escribir la misma clave que usamos previamente para generar el
archivo my-release-key.keystore
,
y acto seguido nuestra APK pasará a estar firmada. Solamente nos queda
comprimirla nuevamente en un APK firmado. Necesitaremos zipalign, que se
instala mediante sudo apt-get install zipalign
, una vez instalado usaremos el siguiente comando:
zipalign -v 4 android-release-unsigned.apk android.apk
Si todo fue satisfactorio, en nuestro directorio de trabajo tiene que aparecer un archivo llamado android.apk
, y se tratará ni más ni menos de nuestra APK firmada, lista para ser utilizada en dispositivos móviles.
Acerca de:
Ignacio Buioli
Degree on Multimedia Arts. He has developed numerous Multimedia projects as well as written articles and translated texts of the mentioned subject. In Moldeo Interactive, He is a Partner and Programmer; also taking care of a large part of the online networks and courses.