El apk debe estar firmado con los mismos certificados que la versión anterior

Yo había subido mi aplicación a Google Play (cuando se llamaba Android Market) hace algún tiempo.

Hoy he actualizado la aplicación, pero había eliminado el almacén de claves anterior y creado uno nuevo.
Al cargar, dice que el APK debe estar firmado con los mismos certificados que la versión anterior:

Subida fallida

Subiste un APK que está firmado con un certificado diferente a tu APK anterior. Debe utilizar el mismo certificado.

Sus APKs existentes están firmados con el (los) certificado (s) con huella (s) digital (es):
[SHA1: 89: 2F: 11: FE: CE: D6: CC: DF: 65: E7: 76: 3E: DD: A7: 96: 4F: 84: DD: BA: 33]
Y el (los) certificado (s) utilizado (s) para firmar el APK que subió tiene huella (s) digital (es):
[SHA1: 20: 26: F4: C1: DF: 0F: 2B: D9: 46: 03: FF: AB: 07: B1: 28: 7B: 9C: 75: 44:

Pero no tengo este certificado, y no quiero eliminar y volver a publicar la aplicación, ya que tiene usuarios activos.

¿Qué puedo hacer para firmar mi aplicación con un nuevo certificado?

Nada. Leer la documentación: publicar actualizaciones en Android Market

Antes de cargar la aplicación actualizada, asegúrese de que ha incrementado los atributos android: versionCode y android: versionName en el elemento del archivo de manifiesto. Además, el nombre del paquete debe ser el mismo y el archivo .apk debe estar firmado con la misma clave privada. Si el nombre del paquete y el certificado de firma no coinciden con los de la versión existente, Market la considerará como una nueva aplicación y no la ofrecerá a los usuarios como una actualización.

¿Firmaste con la clave de depuración por error?

Google Play no le permite publicar una aplicación firmada con su almacén de claves de depuración. Si intentas subir un APK, Google Play fallará con el mensaje "Subiste un APK firmado en modo de depuración. Tienes que firmar tu APK en modo de liberación".

Sin embargo, si intenta cargar una actualización que está firmada con el depurador de claves, no verá este mensaje; Google Play mostrará el mensaje mostrado en la pregunta, haciendo referencia a las huellas dactilares SHA1.

Así que, en primer lugar, compruebe si firmó la aplicación con su clave de depuración por error.


¿Cómo puedo comprobar qué claves de firma se utilizaron?

Reúna la información del APK

Puede comprobar con qué certificados firmó el APK original y el APK de actualización mediante estos comandos, utilizando el keytool Java:

 keytool -list -printcert -jarfile original.apk keytool -list -printcert -jarfile update.apk 

Esto le muestra información detallada sobre cómo se firmó un APK, por ejemplo:

 Owner: CN=My App, O=My Company, L=Somewhere, C=DE Issuer: CN=My App, O=My Company, L=Somewhere, C=DE Serial number: 4790b086 Valid from: Mon Nov 11 15:01:28 GMT 2013 until: Fri Mar 29 16:01:28 BST 2041 Certificate fingerprints: MD5: A3:2E:67:AF:74:3A:BD:DD:A2:A9:0D:CA:6C:D4:AF:20 SHA1: A6:E7:CE:64:17:45:0F:B4:C7:FC:76:43:90:04:DC:A7:84:EF:33:E9 SHA256: FB:6C:59:9E:B4:58:E3:62:AD:81:42:...:09:FC:BC:FE:E7:40:53:C3:D8:14:4F Signature algorithm name: SHA256withRSA Version: 3 

Las partes importantes a tener en cuenta aquí – para cada APK – son el valor de la huella digital SHA1 , el valor de identidad del propietario y las fechas válidas desde / hasta .


Si el comando keytool no funciona (la opción -jarfile requiere Java 7), puede obtener más información básica a través del comando jarsigner :

 jarsigner -verify -verbose:summary -certs original.apk jarsigner -verify -verbose:summary -certs update.apk 

Esto desafortunadamente no muestra la huella SHA1, pero muestra la identidad del propietario X.509, junto con las fechas de vencimiento del certificado. Por ejemplo:

 sm 4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more) X.509, CN=My App, O=My Company, L=Somewhere, C=DE [certificate is valid from 11/11/13 12:12 to 29/03/41 12:12] [CertPath not validated: Path does not chain with any of the trust anchors] 

Puede ignorar cualquier mensaje "CertPath no validado", junto con advertencias sobre cadenas de certificados o marcas de tiempo; No son relevantes en este caso.

Compare los valores de propietario, SHA1 y de caducidad entre los APK

  • Si el valor de identidad del propietario / X.509 es CN=Android Debug, O=Android, C=US , entonces ha firmado el APK con su clave de depuración , no con la clave de liberación original

  • Si el valor de huella digital SHA1 es diferente entre el original y APK de actualización, no utilizó la misma clave de firma para ambos APK

  • Si los valores de identidad del propietario / X.509 son diferentes o las fechas de caducidad del certificado difieren entre los dos APK, no utilizó la misma clave de firma para ambos APK

Tenga en cuenta que incluso si los valores de propietario / X.509 son idénticos entre los dos certificados, esto no significa que los certificados sean idénticos, si no coinciden, como los valores de huella digital, los certificados son diferentes.


Buscar el almacén de claves original, revisar copias de seguridad

Si los dos APK tienen información de certificado diferente, entonces debe encontrar el almacén de claves original, es decir, el archivo con el primer valor de huella digital SHA1 que Google Play (o keytool ) le dijo.

Busca en todos los archivos de almacén de claves que encuentres en tu computadora y en cualquier copia de seguridad que tengas hasta que tengas uno con la huella digital SHA1 correcta:

 keytool -list -keystore my-release.keystore 

Simplemente presione Enter si se le solicita la contraseña – no necesariamente tiene que ingresar si sólo desea comprobar rápidamente el valor SHA1.


No puedo encontrar el keystore original en ninguna parte

Si no puede encontrar el almacén de claves original, nunca podrá publicar actualizaciones para esta aplicación en particular.

Android menciona esto explícitamente en la página Firmar su aplicación :

Advertencia: Guarde su almacén de claves y su clave privada en un lugar seguro y asegúrese de tener copias de seguridad seguras de ellos. Si publica una aplicación en Google Play y pierde la clave con la que firmó su aplicación, no podrá publicar ninguna actualización en su aplicación, ya que siempre debe firmar todas las versiones de su aplicación con la misma clave.

Después de la primera versión de un APK, todas las versiones posteriores deben estar firmadas con la misma clave exacta.


¿Puedo extraer la clave de firma original del APK original?

No. Esto no es posible. El APK sólo contiene información pública y no su información de clave privada.


¿Puedo migrar a una nueva clave de firma?

No. Incluso si encuentras el original, no puedes firmar un APK con la clave A, luego firmar la siguiente actualización con las dos teclas A y B, y luego firmar la siguiente actualización después con sólo la tecla B.

La firma de un APK (o cualquier archivo JAR) con varias claves es técnicamente posible, pero Google Play ya no acepta APKs con varias firmas.

Si intenta hacerlo, aparecerá el mensaje "Su APK se ha firmado con varios certificados. Sólo debe firmarlo con un certificado y volver a cargarlo".


¿Que puedo hacer?

Tendrá que crear su aplicación con un nuevo ID de aplicación (por ejemplo, cambiar de "com.example.myapp" a "com.example.myapp2") y crear un listado nuevo en Google Play.

Posiblemente también tendrás que cambiar tu código para que la gente pueda instalar la nueva aplicación, incluso si tienen la antigua aplicación instalada, por ejemplo, debes asegurarte de que no tienes contenido conflictivo.

Usted perderá su base de instalación existente, revisiones, etc, y tendrá que encontrar una manera de obtener a sus clientes existentes para desinstalar la antigua aplicación e instalar la nueva versión.

Una vez más, asegúrese de tener copias de seguridad del almacén de claves y de las contraseñas que utiliza para esta versión.

Nada – Google dice claramente que la aplicación está identificada por las claves utilizadas para firmarlo. Por lo tanto, si ha perdido las claves, debe crear una nueva aplicación.

Si tiene un archivo apk anterior con usted (copia de seguridad) a continuación, utilice jarSigner para extraer el certificado de que ese apk, a continuación, utilizar esa clave o utilizar keytool para clonar ese certificado, puede ser que ayudará … Enlaces útiles son jarsigner docs and keytool docs .

Aquí obtuve la respuesta para esa pregunta. Después de buscar durante demasiado tiempo finalmente llego a romper la clave y la contraseña para esto. Me olvido de mi clave y alias también el archivo jks, pero afortunadamente sé que el montón de contraseña lo que había puesto en ella. Pero encontrar las combinaciones correctas para eso fue la tarea más difícil para mí.

Solution – Descargar esto – Keytool IUI versión 2.4.1 plugin Introduzca aquí la descripción de la imagen

La ventana aparecerá ahora que mostrar el nombre de alias .. si el archivo jks es correcto .. haga clic derecho en alias y pulse "ver la cadena de certificados" .. se mostrará la clave SHA1 .. coincidir con esta clave con la clave que obtienes Mientras usted estaba cargando el apk en google app store …

Si coincide, entonces usted está con el archivo jks derecho y alias ..

Ahora la suerte tengo un montón de contraseña para que coincida .. Introduzca aquí la descripción de la imagen

Ahora vaya a este scrren poner el mismo camino jks .. y contraseña (entre la contraseña que tiene) poner cualquier camino en "archivo de certificado"

Si la pantalla muestra algún error, entonces la contraseña no coincide .. si no muestra ningún error, entonces significa que está con el archivo jks correcto. Alias ​​correcto y password () ahora con eso puedes subir tu apk en la tienda de juegos 🙂

Hoy he enfrentado el mismo problema, por desgracia, tenía dos alias en mi archivo de almacén de claves. Introduzca aquí la descripción de la imagen

He resuelto el problema por cambio de coma en punto (1,5 en 1,5). Véase el ejemplo:

 INSERT INTO products (title, owner, price, currency, expiration_days_amount) VALUES ('Multitracking - 1 Year', 1,'1.5', 'USD', 366); 
  • Cómo copiar proteger PhoneGap aplicación Android? ¿Es útil la función de protección contra copia de Android Market?
  • Suspensión de la solicitud de Spam y colocación en la tienda
  • Google Play: necesitas comprobar el icono dentro de tu APK porque no es válido
  • ¿Se admite Google Play Store en los emuladores de avd?
  • Android Google Play cambiando el nombre de la aplicación
  • URL de Android Market / Google Play
  • En la facturación de aplicaciones, la configuración de IAB se ha completado correctamente, pero los informes de quaryInventory no han configurado el IAB helper
  • ¿Google Play envía notificación de actualización a Beta Testers?
  • Google Play: filtros de neón y FPU? O cómo vivir sin ellos?
  • ¿Puedo verificar la información de la transacción de facturación integrada en la aplicación directamente con el servidor de Android Market?
  • Subiste un APK debugable. Por razones de seguridad, debes desactivar la depuración antes de publicarla en Google Play-Upload apk para google play
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.