Firmar phonegap - CGastrell/phonegap GitHub Wiki
Para firmar una aplicacion automaticamente solo corriendo
phonegap build android --release
debemos completar datos necesarios para que ant
pueda encontrarlos, a saber:
- donde se encuentra nuestro keystore
- que alias queremos utilizar de ese keystore
- donde encontrar los passwords tanto del keystore como de la key (referenciada por su alias dentro del keystore
Estos pasos pueden ser mas o menos engorrosos que la firma manual del .apk, pero una vez que los tengamos hechos no necesitaremos volver a hacerlos a menos que removamos la plataforma (android) o cambiemos algo en el key/keystore.
Lo primero que tenemos que saber es que archivos vamos a usar y como se relacionan entre si.
Vamos a referirnos a estos archivos por la ruta relativa al directorio del proyecto, es decir, el directorio que tiene los directorios www
, platforms
, plugins
, hooks
y .cordova
:
+---irec
+---.cordova
+---hooks
+---platforms
+---plugins
\---www
El archivo build.xml
tiene una serie de instrucciones para el compilador. Dentro de build.xml
existen (y debemos verificar) 2 nodos XML que hacen referencia a archvivos: ant.properties
y custom_rules.xml
.
El archivo build.xml
se encuentra en platforms/android/build.xml
:
+---irec
+---.cordova
+---hooks
+---platforms
| \---android
| | ant.properties
| | custom_rules.xml
| \ build.xml <-- archivo
+---plugins
\---www
Dentro del archivo build.xml
deberiamos tener estas 2 lineas que hacen referencia a los archivos que antes mencionamos (no necesariamente estaran juntas):
<property file="ant.properties" />
<import file="custom_rules.xml" optional="true" />
Si no existe alguna de esas 2 lineas, copienlas. Estas lineas son nodos XML de segundo nivel, se ubican dentro del nodo principal <project>
.
El archivo ant.properties
que se menciona en build.xml
guarda la ubicacion del archivo keystore y el key alias que queremos usar para que el compilador (ant
) pueda encontrarlo.
Este archivo no suele estar creado de antemano, hay que crearlo. Podemos cambiar su ubicacion, pero por defecto ant
lo buscara en el directorio platforms/android
:
+---irec
+---.cordova
+---hooks
+---platforms
| \---android
| | ant.properties <-- archivo
| | custom_rules.xml
| \ build.xml
+---plugins
\---www
El contenido de ant.properties
es texto simple. Asumiendo que nuestro keystore se llama irec.keystore
y el key alias es irec
el archivo deberia verse asi:
key.store=../../irec.keystore
key.alias=irec
Noten que la ruta al keystore esta expresada como una ruta relativa a la posicion del archivo ant.properties
. Si bien no llegamos aun al archivo keystore sabemos que se encuentra a la par del directorio www
. Entonces, partiendo desde donde se encuentra ant.properties
vemos que subiendo 2 niveles deberia encontrarse el archivo keystore:
irec/platforms/android/ant.properties
^ ^ ^
| | | Directorio actual
| |
| | subiendo un directorio con ../
|
| subiendo 2 directorios con ../../
El archivo custom_rules.xml
es un archivo opcional para cargar, justamente, reglas customizadas para el compilador.
El archivo custom_rules.xml
se ubica a la par de ant.properties
en el directorio platforms/android
:
+---irec
+---.cordova
+---hooks
+---platforms
| \---android
| | ant.properties
| | custom_rules.xml <-- archivo
| \ build.xml
+---plugins
\---www
El archivo ya existe y tiene contenido que los creadores de Cordova pusieron ahi para hacernos la vida mas facil. Al igual que build.xml
tiene un nodo principal <project>
. Dentro de ese nodo principal debemos agregar un nodo:
<property file="../../secure.properties" />
Como ya vimos en ant.properties
este es un nodo para indicar que debe usarse un archivo. En este caso es un archivo que se ubica en ../../secure.properties
. Como vimos antes, esta es una ruta relativa que nos ubica en el directorio raiz de nuestro proyecto.
El archivo secure.properties
va a contener las claves para poder acceder al keystore y al key alias.
Inicialmente no existe, asi que crearemos este archivo a la par de irec.keystore
. Como vimos antes, el archivo keystore deberia estar en el directorio raiz de nuestro proyecto:
+---irec
| config.xml
| icon.png
| irec.keystore
| jarsigner.bat
| keytool.bat
| secure.properties <--- archivo
| zipalign.bat
+---.cordova
+---hooks
+---platforms
+---plugins
\---www
Al igual que ant.properties
, este es un archivo de texto simple con definicion de variables. En este caso vamos a completarlo con las claves para acceder al keystore y key alias:
key.store.password=ireccurso
key.alias.password=ireccurso
El archivo keystore, que a esta altura deberia llamarse irec.keystore
, ya saben que es y que tiene dentro. Estara (o deberia estar) en el directorio raiz del proyecto, es decir, a la misma altura que el directorio www
:
+---irec
| config.xml
| icon.png
| irec.keystore <--- archivo keystore
| jarsigner.bat
| keytool.bat
| secure.properties
| zipalign.bat
+---.cordova
+---hooks
+---platforms
+---plugins
\---www
Como vimos al principio para compilar la aplicacion para produccion el comando que corremos es:
phonegap build android --release
Cuando lo hicimos la ultima vez todavia no teniamos configurado el compilador para que pueda firmar la aplicacion, asi que lo unico que nos generaba era el archivo .apk sin firmar (unsigned).
Si ahora volvemos a correr ese comando (y todo esta bien) al final del proceso tendremos un archivo .apk listo para publicar. Como el compilador es generoso nos deja todas las versiones del archivo: sin alinear, sin firmar, firmada y alineada. Estos archivos estan en el directorio platforms/android/ant-build
:
21/07/2015 12:05 a.m. 3.412.033 CordovaApp-release-unaligned.apk
21/07/2015 12:05 a.m. 3.391.982 CordovaApp-release-unsigned.apk
21/07/2015 12:05 a.m. 428 CordovaApp-release-unsigned.apk.d
21/07/2015 12:05 a.m. 3.412.255 CordovaApp-release.apk
21/07/2015 12:05 a.m. 3.212.341 CordovaApp.ap_
21/07/2015 12:05 a.m. 44.368 CordovaApp.ap_.d
El archivo que queremos es CordovaApp-release.apk
. Ahora solo tenemos que encontrar una manera de hacerlo llegar al telefono y ejecutarlo/instalarlo.