¿Cómo lidiar con INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES sin desinstalar?

277

Traté de reinstalar un apk

$adb install -r new.apk

Y muestra el error:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

Una solución es desinstalar e instalar new.apk, que funciona bien.

Pero me pregunto si podría reconstruir un apk y volver a instalarlo sin la desinstalación. P.ej. cambiar alguna configuración en AndroidManifest.xml, o no firmar el APK, etc.

Le agradecería mucho que me dijera todo el significado de los "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES".

Johnny
fuente
Trate de dar la vuelta al problema ejecutando el archivo APK en un dispositivo real, que siempre funciona para mí
Kyle
A mi no me funciona. ^ @ Mr.Derpinthoughton
Crime_Master_GoGo
Esto también puede ocurrir cuando la aplicación se firma dos veces y la actualización se firma en el orden inverso. Consulte stackoverflow.com/a/13618894/5276890 para obtener más información al respecto.
Roy Falk

Respuestas:

319

Significa que la nueva copia de su aplicación (en su máquina de desarrollo) se firmó con una clave de firma diferente a la copia anterior de su aplicación (instalada en el dispositivo / emulador). Por ejemplo, si se trata de un dispositivo, es posible que haya colocado la copia anterior desde una máquina de desarrollo diferente (por ejemplo, alguna máquina de otro desarrollador). O bien, el antiguo está firmado con su clave de producción y el nuevo está firmado con su clave de depuración.

CommonsWare
fuente
66
@atourney: tendría que copiar el almacén de claves de la máquina anterior (por ejemplo, debug.keystore) a su nueva máquina.
CommonsWare
12
Tenga en cuenta que debug.keystoreno está en el directorio de su proyecto. Normalmente está en su ~/.android/directorio. (ver developer.android.com/guide/publishing/… )
ohhorob
3
¿Cómo podría uno darle al paquete de depuración un nombre diferente? (p. ej., {PRODUCT_NAME} Dev)
sandstrom el
66
@ChristianBongiorno: sincronice sus almacenes de claves de firma (por ejemplo, debug.keystore). Elija uno para que sea su almacén de claves maestro, cópielo en todas las otras máquinas de desarrollo, reemplazando su almacén de claves existente.
CommonsWare
2
No olvides reconstruir tu proyecto después de copiar el archivo también. Moví los archivos y volví a enviar la aplicación al dispositivo (pero todavía estaba usando el viejo debug.keystore). Una vez que reconstruí el proyecto (usando Build-> Rebuild en Android Studio), las claves se sincronizaron.
Benjamin Kaiser
48

Me encontré con esto mientras probaba en un nuevo Xoom. Anteriormente había instalado mi aplicación desde Marketplace. Más tarde, al intentar probar una nueva versión de la aplicación, me encontré con este error.

Lo arreglé eliminando la aplicación que se instaló a través de Marketplace (solo mantenla presionada y arrástrala a la papelera). Posteriormente pude implementar mi versión de desarrollo sin ningún problema.

George Armhold
fuente
12
Sí, la desinstalación resolverá este problema de permiso. Me preguntaba si podría resolver esto sin desinstalar
Johnny
Tengo un teléfono nuevo y me había olvidado de esto. ¿Cómo puedo marcar esto dos veces :)
Anthony Horne
22

Esto me sucedió cuando otro desarrollador del equipo creó nuestra aplicación en el dispositivo de hardware en el que intentaba implementar. Desinstalar la aplicación del hardware solucionó mi problema.

supermoogle
fuente
16
¡Excelente! Trabajó después del comando adb uninstall <package name>. Gracias.
Paul
Tuve un caso más único, pero esta respuesta condujo a la solución. Tenía una aplicación instalada a través de la CLI de cordova localmente y también una instalada desde la compilación PG. Tuve que desinstalar ambas aplicaciones para que el error desapareciera.
DemitryT
@Paul Su excelencia - Rey Pablo I, si bien no soy el interrogador original, su orden funcionó para mí (y, sin duda, otros dado lo votado que es su comentario). ¿Puedo sugerir que publique eso como respuesta?
barlop
1
@barlop: publiqué una respuesta con el comando solo para ser más visible para otros que también pueden encontrar este problema. Gracias.
Paul
3
No entiendo por qué esta respuesta tiene votos positivos. ¡Él dice claramente "SIN DESINSTALACIÓN"! -
Christian
20

Este es el comando para desinstalar la aplicación del dispositivo usando adb:

adb uninstall <package name>
Pablo
fuente
8
La pregunta es sobre cómo resolver el problema sin desinstalación.
Janaka Bandara
2
No entiendo por qué esta respuesta tiene votos positivos. ¡Él dice claramente "SIN DESINSTALACIÓN"!
Christian
No hay una bandera de pm para reemplazar el paquete con un certificado inconsistente, ¿verdad? Intención de seguridad?
JohnyTex
9

Recibí este error incluso después de desinstalar el APK original, que era desconcertante. Finalmente me di cuenta de que había configurado varios usuarios en mi Nexus 7 para realizar pruebas y que la aplicación todavía estaba instalada para uno de los otros usuarios. Una vez que lo desinstalé para todos los usuarios, el error desapareció.

tinta
fuente
5

Cambié el nombre del paquete mientras codificaba una actualización para poder depurarlo en mi dispositivo a través de Eclipse, sin eliminar la versión anterior que estaba instalada. Sin revertir el nombre del paquete que estaba usando al intentar reinstalar, recibí este mismo error. Usando el mismo nombre de paquete, la reinstalación fue exitosa.

Eduardo
fuente
3

Simplemente elimine la compilación anterior del dispositivo y vuelva a instalar la misma. Debido a que device.keystore ya existe en el dispositivo, simplemente desinstale la compilación y vuelva a instalar el APK, eso es todo ...

Gracias

usuario1330971
fuente
Sí, es mejor y una respuesta clara que la respuesta de CommonsWare. Gracias
tres.14159
3

Me enfrenté a otro caso de uso donde obtuve el error similar. Cuando al principio recibí el error, entré en pánico y lo eliminé /data/data/{package.name} Después de eso lo intenté y mi problema aún estaba presente. Luego intenté desinstalar, falló.

Luego eliminé el archivo apk presente en /system/app(acceso raíz requerido) e intenté desinstalarlo y fue exitoso.

Después de eso intenté reinstalar el apk, funcionó.

Arunkumar
fuente
1

Por lo que vale, me encontré con este problema después de agregar un nuevo complemento a mi proyecto Cordova. Había estado haciendo cordova hacer compilaciones e instalar directamente en el dispositivo a través de USB.

Lo arreglé desinstalando la aplicación del dispositivo y en la siguiente implementación no hubo problemas.

radicalmatt
fuente
1

Si encuentra una implementación fallida en un dispositivo o emulador de Andorid con el error "Falla [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]" en la Ventana de salida, simplemente elimine la aplicación existente en el dispositivo o emulador y vuelva a implementar. Las compilaciones de depuración utilizarán un certificado de depuración, mientras que las compilaciones de lanzamiento utilizarán su certificado configurado. Este error simplemente le informa que el certificado de la aplicación instalada en el dispositivo es diferente al que está intentando instalar. En escenarios que no son de desarrollo (tienda de aplicaciones), esto puede ser un indicador de una aplicación corrupta o modificada que no es segura de instalar en el dispositivo.

Linda Z
fuente
0

Nada desde arriba funcionó para mí. El problema para mí fue que tenía una fuente incorrecta en mi Java Build Path para android-support-v7-appcompat. Cuando vaya a Proyecto> Ruta de compilación> Configurar ruta de compilación>. En la pestaña Fuente, asegúrese de tener android-support-v7-appcompat / gen, android-support-v7-appcompat / libs y android-support-v7-appcompat / src y nada más. Haga clic en Aceptar y debería funcionar.

Código inmortal
fuente
0

Hoy he tenido el mismo error, pero el problema no era exactamente el mismo. Estoy usando ADB con Android instalado en VirtualBox . Traté de instalar diferentes versiones de mi aplicación (firmado / no firmado, modo de depuración / liberación) y obtuve dos errores alternativamente: INSTALL_FAILED_UID_CHANGEDy INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES.

Ahora, al mirar /data/data/{package.name}, encontré un montón de archivos que todavía estaban allí después de desinstalar la aplicación. Lo intenté rm -rfsin éxito: obtuve errores de E / S.

La solución a esto fue:

  • Apaga la VM
  • Montar la imagen VDI con vdfuse(lectura / escritura)
  • Repare el Partition1archivo de imagen cone2fsck
  • Desmontar y reiniciar la VM
Jérôme
fuente
0

Tuve el mismo problema hasta que me di cuenta de que tenía el simulador ejecutándose y adb estaba tratando de instalarlo

Martin Lockett
fuente
0

Como la verificación se basa en el nombre del paquete, puede cambiar el nombre del paquete dentro de su config.xml o archivo de manifiesto por otro nombre que desee.

Al publicar su aplicación, ¡no olvide volver a cambiar el nombre!

Rafael
fuente
0

Tuve este problema al intentar ejecutar la tarea de gradle connectedDebugAndoidTest(o connectedAndroidTest) en Genymotion . Ejecutarlo en un emulador normal resolvió el problema.

Ognyan
fuente
También estaba obteniendo esto en la misma situación (prueba con Genymotion). Resulta que fue un conflicto con la firma del paquete de prueba. Eliminar el paquete de prueba resolvió el problema.
D-C0d3r
0

Creo que su aplicación está instalada por otra cuenta. (Función de modo de cuenta múltiple) Puede desinstalar la aplicación en Configuración> Aplicaciones> "nombre de la aplicación"> Desinstalar

Nguyễn Quang Tuấn
fuente