Comment gérer INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES sans désinstaller?

277

J'ai essayé de réinstaller un apk

$adb install -r new.apk

Et cela montre l'erreur:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

Une solution consiste à désinstaller et installer le new.apk, qui fonctionne très bien.

Mais je me demande si je pourrais reconstruire un apk et réinstaller sans la désinstallation. Par exemple. changer une configuration dans AndroidManifest.xml, ou ne pas signer l'APK, etc.

Ce serait très apprécié si vous pouviez me dire tout le sens des "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES".

Johnny
la source
Essayez de contourner le problème en exécutant votre apk sur un appareil réel, cela fonctionne toujours pour moi
Kyle
Ça ne marche pas pour moi. ^ @ Mr.Derpinoughtton
Crime_Master_GoGo
Cela peut également se produire lorsque l'application est signée deux fois et que la mise à niveau est signée dans l'ordre inverse. Voir stackoverflow.com/a/13618894/5276890 pour plus d'informations à ce sujet.
Roy Falk

Réponses:

319

Cela signifie que la nouvelle copie de votre application (sur votre machine de développement) a été signée avec une clé de signature différente de l'ancienne copie de votre application (installée sur l'appareil / l'émulateur). Par exemple, s'il s'agit d'un périphérique, vous pouvez avoir mis l'ancienne copie à partir d'une machine de développement différente (par exemple, une autre machine de développeur). Ou, l'ancien est signé avec votre clé de production et le nouveau est signé avec votre clé de débogage.

CommonsWare
la source
6
@atourney: Vous devez copier le fichier de clés de la machine précédente (par exemple, debug.keystore) sur votre nouvelle machine.
CommonsWare
12
Notez que le debug.keystoren'est pas dans votre répertoire de projet. Il se trouve normalement dans votre ~/.android/répertoire. (voir developer.android.com/guide/publishing/… )
ohhorob
3
Comment donner un nom différent au package de débogage? (par exemple, {PRODUCT_NAME} Dev)
sandstrom
6
@ChristianBongiorno: synchronisez vos magasins de clés de signature (par exemple, debug.keystore). Choisissez-en un pour être votre magasin de clés maître, copiez-le sur toutes les autres machines de développement, en remplaçant leur magasin de clés existant.
CommonsWare
2
N'oubliez pas de reconstruire votre projet après avoir également copié le fichier. J'ai déplacé les fichiers et renvoyé l'application sur l'appareil (mais il utilisait toujours l'ancien debug.keystore). Une fois que j'ai reconstruit le projet (en utilisant Build-> Rebuild dans Android Studio), les clés étaient alors synchronisées.
Benjamin Kaiser
48

Je suis tombé sur cela lors d'un test sur un nouveau Xoom. J'avais déjà installé mon application sur la Marketplace. Plus tard, en essayant de tester une nouvelle version de l'application, j'ai rencontré cette erreur.

Je l'ai corrigé en supprimant l'application installée via Marketplace (maintenez et faites glisser vers la corbeille). Par la suite, j'ai pu déployer ma version de développement sans aucun problème.

George Armhold
la source
12
oui, la désinstallation résoudra ce problème d'autorisation. Je me demandais si je pouvais résoudre ce problème sans désinstaller
Johnny
J'ai eu un nouveau téléphone et j'avais oublié ça. Comment puis-je le marquer deux fois :)
Anthony Horne
22

Cela m'est arrivé lorsqu'un autre développeur de l'équipe a construit notre application sur le périphérique matériel sur lequel j'essayais de déployer. La désinstallation de l'application du matériel a résolu mon problème.

supermoogle
la source
16
Génial! A travaillé après la commande adb uninstall <package name>. Merci.
Paul
J'avais un cas plus unique, mais cette réponse a conduit à la solution. J'avais une application installée localement via la CLI cordova et une autre installée à partir de la version PG. J'ai dû désinstaller les deux applications pour que l'erreur disparaisse.
DemitryT
@Paul Votre excellence - le roi Paul Ier, bien que je ne sois pas le questionneur d'origine, votre commande a fonctionné pour moi (et sans doute pour d'autres étant donné le vote positif de votre commentaire). Puis-je vous suggérer de poster cela comme réponse?
barlop
1
@barlop: J'ai posté une réponse avec la commande juste pour être plus visible pour les autres qui peuvent également rencontrer ce problème. Merci.
Paul
3
Je ne comprends pas pourquoi cette réponse a des votes positifs. Il dit clairement "SANS DÉSINSTALLATION"! -
Christian
20

Il s'agit de la commande pour désinstaller l'application de l'appareil en utilisant adb:

adb uninstall <package name>
Paul
la source
8
La question est de savoir comment résoudre le problème sans désinstallation.
Janaka Bandara
2
Je ne comprends pas pourquoi cette réponse a des votes positifs. Il dit clairement "SANS DÉSINSTALLATION"!
Christian
Il n'y a pas d'indicateur pm pour remplacer le package par un certificat incohérent, non? Intention de sécurité?
JohnyTex
9

J'ai eu cette erreur même après avoir désinstallé l'APK d'origine, ce qui était mystifiant. Enfin, j'ai réalisé que j'avais configuré plusieurs utilisateurs sur mon Nexus 7 pour les tests et que l'application était toujours installée pour l'un des autres utilisateurs. Une fois que je l'ai désinstallé pour tous les utilisateurs, l'erreur a disparu.

encre
la source
5

J'ai changé le nom du package lors du codage d'une mise à jour afin de pouvoir la déboguer sur mon appareil via Eclipse, sans supprimer l'ancienne version installée. Sans revenir au nom du package que j'utilisais lors de la réinstallation, j'ai eu la même erreur. En utilisant le même nom de package, la réinstallation a réussi.

Edward
la source
3

Supprimez simplement l'ancienne version de l'appareil et réinstallez-la. Parce que device.keystore existe déjà dans l'appareil, il vous suffit donc de désinstaller la build et de réinstaller l'APK c'est tout.

Merci

user1330971
la source
Oui, il vaut mieux et réponse claire que la réponse de CommonsWare. Merci
tres.14159
3

J'ai fait face à un autre cas d'utilisation où j'ai eu l'erreur similaire. Quand j'ai eu l'erreur au début, j'ai paniqué et /data/data/{package.name} j'ai supprimé. Après cela, j'ai essayé et mon problème était toujours présent. Ensuite, j'ai essayé de désinstaller, cela a échoué.

J'ai ensuite supprimé le fichier apk présent dans /system/app(accès root requis), et j'ai essayé de désinstaller et c'était réussi.

Après cela, j'ai essayé de réinstaller l'apk, cela a fonctionné.

Arunkumar
la source
1

Pour ce que ça vaut, j'ai rencontré ce problème après avoir ajouté un nouveau plugin à mon projet Cordova. J'avais fait cordova faire des builds et installer directement sur l'appareil via USB.

Je l'ai corrigé en désinstallant l'application de l'appareil et lors du déploiement suivant, il n'y a eu aucun problème.

radicalmatt
la source
1

Si vous rencontrez un échec de déploiement sur un appareil ou un émulateur Andorid avec l'erreur «Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]» dans la fenêtre de sortie, supprimez simplement l'application existante sur l'appareil ou l'émulateur et redéployez. Les versions de débogage utiliseront un certificat de débogage tandis que les versions de version utiliseront votre certificat configuré. Cette erreur vous indique simplement que le certificat de l'application installée sur l'appareil est différent de celui que vous essayez d'installer. Dans les scénarios de non-développement (App Store), cela peut être un indicateur d'une application corrompue ou modifiée d'une autre manière qui n'est pas sûre à installer sur l'appareil.

Linda Z
la source
0

Rien d'en haut n'a fonctionné pour moi. Le problème pour moi était que j'avais une mauvaise source dans mon Java Build Path pour android-support-v7-appcompat. Lorsque vous accédez à Projet> Chemin de génération> Configurer le chemin de génération>. Sous l'onglet Source, assurez-vous d'avoir android-support-v7-appcompat / gen, android-support-v7-appcompat / libs et android-support-v7-appcompat / src et rien d'autre. Cliquez sur OK et cela devrait fonctionner.

Code immortel
la source
0

J'ai eu la même erreur aujourd'hui, mais le problème n'était pas exactement le même. J'utilise ADB avec Android installé dans VirtualBox . J'ai essayé d'installer différentes versions de mon application (signé / non signé, mode débogage / libération) et j'ai obtenu deux erreurs alternativement: INSTALL_FAILED_UID_CHANGEDet INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES.

Maintenant, en regardant /data/data/{package.name}, j'ai trouvé un tas de fichiers qui étaient toujours là après la désinstallation de l'application. J'ai essayé rm -rfsans succès: j'ai eu des erreurs d'E / S.

La solution à cela était:

  • Arrêtez la machine virtuelle
  • Montez l'image VDI avec vdfuse(lecture / écriture)
  • Réparez le Partition1fichier image avece2fsck
  • Démontez et redémarrez la machine virtuelle
Jérôme
la source
0

J'ai eu le même problème jusqu'à ce que je réalise que le simulateur était en marche et qu'Adb essayait de l'installer sur ce

Martin Lockett
la source
0

Étant donné que la vérification est basée sur le nom du package, vous pouvez modifier le nom du package dans votre fichier config.xml ou manifeste pour un autre nom que vous souhaitez.

Lors de la publication de votre application, n'oubliez pas de changer le nom!

Raphael
la source
0

J'ai eu ce problème en essayant d'exécuter une tâche gradle connectedDebugAndoidTest(ou connectedAndroidTest) sur Genymotion . L'exécuter sur un émulateur normal a résolu le problème.

Ognyan
la source
J'obtenais également ceci sur la même situation (test avec Genymotion). Il s'avère qu'il s'agissait d'un conflit avec la signature du package de test. La suppression du package de test a résolu le problème.
D-C0d3r
0

Je pense que votre application est installée par un autre compte. (Fonctionnalité en mode compte multiple) Vous pouvez désinstaller l'application dans Paramètres> Applications> "nom de l'application"> Désinstaller

Nguyễn Quang Tuấn
la source