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

Cargué mi aplicación en Google Play (cuando se llamaba Android Market) hace algún tiempo.

Hoy actualicé la aplicación, pero eliminé el almacén de claves anterior y creé uno nuevo.
Al cargar, dice que el APK debe estar firmado con los mismos certificados que la versión anterior:

Subida fallida

Has subido una APK que está firmada con un certificado diferente a tus APK anteriores. Debe usar el mismo certificado.

Sus APK existentes están firmados con el / los certificado (s) con huella digital (s):
[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 cargó tienen huella digital (s):
[SHA1: 20: 26: F4: C1: DF: 0F: 2B: D9: 46: 03: FF: AB: 07: B1: 28: 7B: 9C: 75: 44: CC]

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

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

Nada. Lea la documentación: publicación de actualizaciones en Android Market

Antes de cargar la aplicación actualizada, asegúrese de haber 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 lo considerará como una nueva aplicación y no lo ofrecerá a los usuarios como una actualización.

¿Firmó 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 intenta subir un archivo APK de este tipo, Google Play no responderá con el mensaje “Cargó un archivo APK que se inició en modo de depuración. Debe firmar su APK en modo de lanzamiento”.

Sin embargo, si intenta cargar una actualización que está firmada con el almacén de claves de depuración, no verá este mensaje; Google Play mostrará el mensaje que se muestra en la pregunta, refiriéndose a las huellas dactilares de SHA1.

En primer lugar, compruebe si ha firmado la aplicación con su clave de depuración por error.


¿Cómo verifico qué claves de firma se usaron?

Recostack la información del APK

Puede verificar con qué certificados se firmó el APK original y la APK de actualización utilizando estos comandos, utilizando la 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ó una 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 

Desafortunadamente, esto no muestra la huella digital 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 de “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 vencimiento entre los APK

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

  • Si el valor de la huella digital SHA1 es diferente entre el original y los APK de actualización, entonces no usó 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, entonces no usó la misma clave de firma para ambos APK

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


Busque el almacén de claves original, consulte las 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 le indicó Google Play (o la keytool claves).

Busque en todos los archivos de almacén de claves que pueda encontrar en su computadora y en las copias de respaldo que tenga, hasta que tenga uno con la huella digital SHA1 correcta:

 keytool -list -keystore my-release.keystore 

Simplemente presione Entrar si se le solicita la contraseña; no tiene que ingresarla necesariamente si solo desea verificar rápidamente el valor de SHA1.


No puedo encontrar el keystore original en ningún lado

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

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

Advertencia: Mantenga su almacén de claves y su clave privada en un lugar seguro y asegúrelos de tener copias de seguridad seguras de los mismos. Si publica una aplicación en Google Play y luego 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 del primer lanzamiento 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. La APK solo contiene información pública y no la información de tu clave privada.


¿Puedo migrar a una nueva clave de firma?

No. Incluso si encuentra el original, no puede firmar un APK con la clave A, luego firmar la próxima actualización con las dos teclas A y B, y luego firmar la siguiente actualización solo con la tecla B.

Firmar un APK (o cualquier archivo JAR) con varias claves es técnicamente posible, pero Google Play ya no acepta APK con múltiples firmas.

Intentar hacerlo dará como resultado el mensaje “Su APK ha sido firmada con varios certificados. Por favor, solo firme con un certificado y súbalo nuevamente”.


¿Que puedo hacer?

Tendrás que crear tu aplicación con una nueva ID de aplicación (por ejemplo, cambiar de “com.example.myapp” a “com.example.myapp2”) y crear una nueva lista en Google Play.

Posiblemente también tendrá que cambiar su código para que las personas puedan instalar la nueva aplicación incluso si tienen instalada la aplicación anterior, por ejemplo, debe asegurarse de que no haya proveedores de contenido conflictivos.

Perderá su base de instalación existente, revisiones, etc., y tendrá que encontrar la manera de que sus clientes actuales desinstalen la aplicación anterior e instalen la nueva.

De nuevo, asegúrese de tener copias de seguridad seguras del almacén de claves y las contraseñas que usa para esta versión.

Nada: Google dice claramente que la aplicación se identifica con las claves utilizadas para firmarla. En consecuencia, si ha perdido las claves, debe crear una nueva aplicación.

Hoy me enfrenté al mismo problema. Desafortunadamente, tenía dos alias en mi archivo de almacén de claves. enter image description here

Aquí obtengo la respuesta para esa pregunta. Después de buscar por demasiado tiempo, finalmente puedo descifrar la clave y la contraseña para esto. Olvidé mi clave y alias también el archivo jks, pero afortunadamente conozco el montón de contraseñas que había puesto en él. 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 enter image description here

la ventana aparecerá ahora que muestra el nombre del alias … si su archivo jks es correcto … haga clic derecho en el alias y presione “ver cadena de certificados” … mostrará la clave SHA1 … haga coincidir esta tecla con la clave que obtenga mientras cargabas el apk en la tienda de aplicaciones de google …

si coincide, entonces está con el archivo jks correcto y el alias.

ahora tengo suerte de tener un montón de contraseña para que coincida .. enter image description here

Ahora ve a este scrren coloca la misma ruta jks … y la contraseña (entre la contraseña que tienes) pon cualquier ruta en “Archivo de certificado”

si la pantalla muestra algún error, la contraseña no coincide … si no muestra ningún error, significa que está con el archivo jks correcto. corregir alias y contraseña () ahora con eso puedes subir tu apk en Play Store 🙂

Si tiene un archivo apk previo (copia de seguridad) entonces use jarSigner para extraer el certificado de ese apk, luego use esa clave o use keytool para clonar ese certificado, puede ser que ayude … Los enlaces útiles son documentos jarsigner y documentos keytool .

Me he enfrentado a este problema recientemente, después de probar diferentes formas de iniciar sesión como habilitar V1 o V2, haber iniciado sesión cambiando el nombre de alias y saber por última vez que estoy usando un archivo de almacenamiento de claves incorrecto