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.

Archivos

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

build.xml

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.

Ubicacion

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

Contenido

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


ant.properties

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.

Ubicacion

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

Contenido

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

custom_rules.xml

El archivo custom_rules.xml es un archivo opcional para cargar, justamente, reglas customizadas para el compilador.

Ubicacion

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

Contenido

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.


secure.properties

El archivo secure.properties va a contener las claves para poder acceder al keystore y al key alias.

Ubicacion

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

Contenido

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

Keystore

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

Phonegap build

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.

⚠️ **GitHub.com Fallback** ⚠️