2010-05-21 27 views
13

¿Cómo me inscribo un APK, con más de un certificado, por lo que yo puedo hacer esto cuando publico al Android Market:¿Cómo firmar una APK con más de un certificado?

Versión 1.0 => firmado con el certificado Un
Versión 2.0 => firmados con un certificado & B
Versión 3.0 => firmado con el certificado B

El Android Market hace dame un poco de esperanza, pero no estoy seguro de qué hacer con él, cuando subo con un certificado distinto signo que me da este mensaje :

"La aplicación debe estar firmada con al menos un certificado en común con la versión anterior."

Motivo:
He publicado una aplicación en el mercado utilizando la herramienta de firma de Android como parte de Motodev Estudio para android. El problema es que maneja las claves en sí y no hay forma (documentada) de obtenerlas. Quiero cambiarlo para usar un almacén de claves y un certificado que tenga más control y que pueda usar incluso si ya no uso MotoDev Studio. También parece que MotoDev Studio lo mantendrá fuera de las nuevas características, como las bibliotecas compartidas.

ACTUALIZACIÓN 5/3/2011:
Han sido realmente muy rápido y rápido a la actualización Motodev estudio, pero parece que creo que Google debería proporcionar una solución alternativa para aquellos que quieren cambiar los certificados de su aplicaciones. La actualización de la aplicación a todos usa el mismo certificado, creando nuevos a través del tiempo y posiblemente creando uno nuevo para que pueda entregar el soporte y la distribución de su aplicación a otros.

Respuesta

12

Si desea firmar una APK más de una vez, simplemente hágalo.
Pero tenga en cuenta que Google Play no acepta APK con varias firmas.

por ejemplo. Puede sign an APK desde la línea de comandos usando jarsigner así:
jarsigner -keystore original-keystore my-app-unsigned.apk key-alias alias

Entonces sólo tiene que repetir esto con la segunda clave:
jarsigner -keystore new-signing-keystore my-app-unsigned.apk key-alias

No se olvide de ejecutar zipalign después:
zipalign -v 4 my-app-unsigned.apk my-app.apk


Acabo de volver a leer la parte sobre el estudio MotoDev. En ese caso, puede simplemente firmar la APK primero usando MotoDev como de costumbre, luego firme con su nueva clave en la línea de comando como se indica arriba.

+0

Bien, veré si el Android Market lo aceptará asignado con el certificado antiguo y luego con el nuevo y luego cargaré otra actualización solo con la nueva y veré si funciona. Eso es lo que estaba pensando, pero soy nuevo en la firma de códigos en general y no menciona ni una vez la forma de cambiar los certificados. – ddcruver

+0

Bueno, al menos en los documentos de Android. – ddcruver

+2

Parece que funciona bien, esta parece ser LA FORMA de cambiar el certificado en una aplicación Android Market. – ddcruver

2

tuve el problema hoy en día, y esto es lo que hice:

  1. copia de seguridad del archivo antiguo motodev.keystore
  2. Usar un estudio reciente MOTODEV (2.0.1) para cambiar mi MOTODEV.contraseña del almacén de claves (cámbiela en la vista motodev donde puede importar un almacén de claves)
  3. Convierta el archivo motodev keystore (del tipo JCEKS) a un archivo de almacén de claves android normal (de tipo JKS) usando el programa keytool.exe incluido con java:

keytool -importkeystore -srckeystore motodev.keystore -srckeystoretype JCEKS -destkeystore android.keystore -destkeystoretype JKS

Ahora el archivo android.keystore puede ser utilizado en los complementos de Google Eclipse para exportar su aplicación a un archivo APK firmado

+0

En jdk1.7.0_45, han cambiado algunos de los nombres de los parámetros. Ahora srcstorestype y deststoretype. –

3

yo estaba muy contento de ver este post hasta que vi @ de ddcruver comentario (2010-06-05) y comentario de @cistearns (2011-03-01).

Sin embargo, hay un gran problema de seguridad con el método de transición que describes (si funcionara de la forma esperable), lo que hace que un atacante pueda reemplazar tu aplicación si pueden hacer que tus usuarios la instalen sus cosas:

  • que suelte su aplicación firmado con el certificado de A.
  • el atacante obtiene el apk, además, lo firma con certificado de M, y distribuye la aplicación.
  • El atacante puede liberar una aplicación maliciosa firmada con certificado M para reemplazar la suya y obtener acceso a cualquier información que pueda estar almacenando.

Normalmente, si un atacante intentaba reemplazar algo, la instalación se rehusaría a menos que se eliminara el original, momento en el que se borran los datos.

Por otro lado, todavía hay varios casos de uso válidos para la transición de una clave/certificado de clave: renovación, entregar a otro desarrollador, etc.

Esto podría hacerse de forma más segura mediante la autorización de la transición a la una nueva clave de la vieja clave. Por favor, consulte el issue in the Android project.

+0

"El atacante obtiene la aplicación, adicionalmente la firma con el certificado M y la distribuye". - que, según los comentarios que ha citado, parece estar bloqueado por la consola del desarrollador. – CommonsWare

+0

Sí exactamente. Tal como está, no es un problema de seguridad. Estoy diciendo que si fuera/fuera/posible hacer una transición de una clave de esa manera, entonces sería/sería/un problema de seguridad. –

+0

Tenga en cuenta también que Google Play (y la consola de desarrollador) no es la única forma de distribuir archivos apk. –

Cuestiones relacionadas