Firmar archivos Android
Los archivos (apk, zip) tanto actualizaciones como aplicaciones y firmwares solo pueden instalarse en los móviles Android si han sido previa y debidamente firmados. Es una medida de seguridad que otorga validez al archivo aunque en la práctica es más un requisito que una garantía.
Hay abundante literatura en la red sobre cómo firmar archivos pero normalmente la explicación técnica resulta bastante compleja por lo que en AndroidApps vamos a intentar simplificarla al máximo.
Aviso: Esto no puede dañar vuestro terminal pero el resultado de cargar un archivo correctamente firmado con contenido errático erróneo o perjudicial SÍ.
Hacedlo bajo y exclusivamente bajo vuestra responsabilidad…
Elige a continuación el sistema operativo que prefieras: Windows, OS-X o Linux.
Windows:
Descarga: Windows-firmaAndroid.zip
En este archivo adjunto encontrarás todo lo necesario (salvo “JDK que debe instalarse por separado) para firmar tus archivos desde Microsoft Windows:
signapk.jar (incluído en la descarga)
La herramienta que permite firmar los archivos (incluída en el paquete de fuentes de la plataforma Android).
testkey.pk8 (incluído en la descarga)
Clave privada válida.
testkey.x509.pem (incluído en la descarga)
Clave pública (certificado).
Java Development Kit (JDK)
JDK es imprescindible pero debe decargarse desde su fuente original e instalarse en el ordenador.
Uso: (desde el símbolo del sistema)
java -jar signapk.jar testkey.x509.pem testkey.pk8 [archivo_sin_firmar] [archivo_firmado]
[archivo_sin_firmar] : el archivo que queremos firmar.
[archivo_firmado] : el archivo resultante despues de ser firmado.
Ejemplo:
java -jar signapk.jar testkey.x509.pem testkey.pk8 actualizacion_sin_firmar.zip actualizacion_firmada.zip
Observaciones:
- Si nuestro ordenador no tiene la plataforma Java (JDK) instalada no se podrá firmar ningún archivo. Es recomendable tener la versión más reciente posible.
- JDK debería estar en el path del ordenador para que Java siempre pueda invocarse desde cualquier ubicación sin tener que indicar su ruta en cada comando. Para comprobarlo basta lanzar el siguiente comando desde el símbolo del sistema:
> echo %path% - Es más sencillo poner todos los archivos necesarios (los 3 adjuntos + el archivo_sin_firmar) en la misma carpeta para evitar tener que insertar la ruta delante de cada archivo por separado.
OS X:
Descarga: OS-X-firmaAndroid.zip
En este archivo adjunto encontrarás todo lo necesario para firmar tus archivos desde Apple Mac OS X.
signapk.jar (incluído en la descarga)
La herramienta que permite firmar los archivos (incluída en el paquete de fuentes de la plataforma Android).
testkey.pk8 (incluído en la descarga)
Clave privada válida.
testkey.x509.pem (incluído en la descarga)
Clave pública (certificado).
Uso: (desde el terminal)
java -jar signapk.jar testkey.x509.pem testkey.pk8 [actualizacion_sin_firmar.zip] [actualizacion_firmada.zip]
[archivo_sin_firmar] : el archivo que queremos firmar.
[archivo_firmado] : el archivo resultante despues de ser firmado.
Ejemplo:
java -jar signapk.jar testkey.x509.pem testkey.pk8 actualizacion_sin_firmar.zip actualizacion_firmada.zip
Observaciones:
- La plataforma Java viene incluída por defecto en OS X, no hay que instalar nada adicionalmente aunque es recomendable actualizar a la versión más reciente posible.
- JDK está por defecto en el path del ordenador para que Java siempre pueda invocarse desde cualquier ubicación sin tener que indicar su ruta en cada comando.
- Es más sencillo poner todos los archivos necesarios (los 3 adjuntos + el archivo_sin_firmar) en la misma carpeta para evitar tener que insertar la ruta delante de cada archivo por separado.
Linux:
Aviso: A diferencia de Windows y OS X la firma bajo Linux que se describe a continuación no se ha probado específicamente.
Descarga: Linux-testsign.jar
Renombrar: Linux-testsign.jar como testsign.jar para mayor comodidad.
En este archivo adjunto encontrarás todo lo necesario (salvo “JDK que debe instalarse por separado) para firmar tus archivos desde Linux:
Linux-testsign.jar
La herramienta que permite firmar los archivos y que incluye todo lo necesario para ser operativo (testkeys integradas).
Java Development Kit (JDK)
JDK es imprescindible pero debe decargarse desde su fuente original e instalarse en el ordenador.
Uso: (desde el terminal)
java -classpath testsign.jar testsign [archivo_sin_firmar] [archivo_firmado]
[archivo_sin_firmar] : el archivo que queremos firmar.
[archivo_firmado] : el archivo resultante despues de ser firmado.
Ejemplo:
java -classpath testsign.jar testsign actualizacion_sin_firmar.zip actualizacion_firmada.zip
Observaciones:
- Si nuestro ordenador no tiene la plataforma Java (JDK) instalada no se podrá firmar ningún archivo. Es recomendable tener la versión más reciente posible.
- JDK debería estar en el path del ordenador para que Java siempre pueda invocarse desde cualquier ubicación sin tener que indicar su ruta en cada comando. Para comprobarlo basta lanzar el siguiente comando desde el símbolo del sistema:
> echo $PATH - Es más sencillo poner todos los archivos necesarios (testsign.jar + el archivo_sin_firmar) en la misma carpeta para evitar tener que insertar la ruta delante de cada archivo por separado.
FAQs:
Pregunta: ¿Cómo sé que el archivo se ha firmado correctamente?
Respuesta: Si, después de lanzar el comando, el sistema operativo no muestra ningún mensaje de error, el archivo se ha firmado correctamente.
Pregunta: ¿Cómo puedo comprobar si un archivo ya está firmado?
Respuesta: No se puede comprobar al menos fácilmente. El mejor método consiste en incluir la palabra “firmado” (o similar) en el archivo de salida tal y como se indica en los ejemplos.
Aviso: Por favor, usad el foro para plantear y resolver dudas sobre este tema y dejemos los comentarios en esta entrada del blog para opinar. Gracias.






(4,73 de 5)
Como siempre es de agradecer la claridad de exposición en el post al gran “maestro” Michel
.
Eso sí haré, constructivamente y con mi mejor intención un pequeño comentario.
La palabra “errático” para denominar al contenido de un archivo firmado no es adecuada.
Ya que errático significa: ambulante, dolor que se mueve, o dicho de una calentura: que se reproduce sin período fijo.
http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=err%C3%A1tico&TIPO_HTML=2&FORMATO=ampliado
Lo lógico en este caso sería decir contenido “erróneo” (es decir, que contiene errores). Así pues que pueden ser erráticos, por ejemplo, los movimientos de un nómada, pero no el contenido del un .zip
@Elreymon: muy buena la observación porque el calificativo correcto no sería errático (error mío) ni erróneo porque no quería insinuar una equivocación sino un contenido perjudicial programado por desconocimiento de lo que se está haciendo y que podría llevar el móvil a un comportamiento errático, es decir, que va dando tumbos y que puede acabar no se sabe muy bien dónde. De todas formas tienes razón, y por eso
lo cambiaréya lo he cambiado. Gracias por la crítica.Hola, muchas gracias por el tutorial, quisiera hacer unas preguntas: ¿Esto serviría para cambiarle el icono a una aplicación oficial por otro icono, digamos más de mi gusto?, es decir si tengo localizado el icono que aparecería en el launcher después de instalarse normalmente dentro de la aplicación renombrada a .zip y lo cambio por otro, después no se puede instalar porque la aplicación (no se muy bien porqué) deja de estar firmada… ¿con esto podría firmar la aplicación tras haber cambiado el icono e instalarla normalmente?. Gracias por vuestra ayuda.
P.D: Espero haberme explicado correctamente.
@Martín: se pueden llevar muchos cambios a cabo siempre y cuando se respete la estructura interna de la aplicación. Si dentro de la aplicación hay un icono concreto y se actualiza dicho icono respetando su nombre y su ramaño no tendrás ningún problema. Para ello tendrás que usar el “update-script” adecuado (dentro de META-INF) y firmar el archivo con el procedimiento descrito en esta entrada. No basta, por tanto, con sustituir el icono.
Gracias por las instrucciones para MAc OS X, he estado buscando esta info por semanas sin buenos resultados, lo probaré ahora mismo para crear al fin mis temas.
Saludos.
Alguien sabe como hacer esto mismo pero desde Adobe Flash con el Air Android?
Gracias por la información. Si desean ver un video tutorial muy bien explicado de como firmar una aplicación android con eclipse y autodev studio sigan este link http://www.youtube.com/watch?v=vOt6OGDUiqA.
Gracias por la herramienta