Comment traiter INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES sans désinstallation

J’ai essayé de réinstaller un apk

$adb install -r new.apk 

Et il montre l’erreur:

 Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] 

Une solution consiste à désinstaller et à installer le fichier new.apk, qui fonctionne correctement.

Mais je me demande si je pourrais reconstruire une apk et la 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 de “INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES”.

Cela signifie que la nouvelle copie de votre application (sur votre machine de développement) a été signée avec une autre clé de signature que l’ancienne copie de votre application (installée sur le périphérique / émulateur). Par exemple, s’il s’agit d’un périphérique, vous avez peut-être mis l’ancienne copie sur une autre machine de développement (par exemple, une machine d’un autre développeur). Ou bien, l’ancien est signé avec votre clé de production et le nouveau est signé avec votre clé de débogage.

Je me suis heurté à cela en testant un nouveau Xoom. J’avais précédemment installé mon application sur le 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 simplement la touche enfoncée et déplacez-la vers la corbeille). Par la suite, j’ai pu déployer ma version de développement sans aucun problème.

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

Voici la commande permettant de désinstaller l’application depuis un périphérique utilisant adb:

 adb uninstall  

J’ai eu cette erreur même après la désinstallation de l’APK d’origine, qui était mystifiant. Enfin, j’ai réalisé que j’avais configuré plusieurs utilisateurs sur mon Nexus 7 pour les tester 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.

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

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 de désinstaller le build et de réinstaller l’APK, c’est tout.

Merci

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

J’ai ensuite retiré le fichier apk présent dans /system/app (access root requirejs), et j’ai essayé de désinstaller et cela a été un succès.

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

Pour ce que cela vaut, j’ai rencontré ce problème après avoir ajouté un nouveau plugin à mon projet Cordova. J’avais eu cordova do builds et installer directement sur le périphérique via USB.

Je l’ai corrigé en désinstallant l’application de l’appareil et au prochain déploiement, il n’y avait pas de problèmes.

Si le déploiement sur un périphérique ou un émulateur Andorid a échoué avec l’erreur “Echec [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]” dans la fenêtre de sortie, supprimez simplement l’application existante sur le périphérique ou l’émulateur et redéployez-la. Les versions de débogage utiliseront un certificate de débogage tandis que les versions Release utiliseront votre certificate configuré. Cette erreur vous permet simplement de savoir que le certificate de l’application installé sur le périphérique est différent de celui que vous tentez d’installer. Dans les scénarios de non développement (app store), cela peut indiquer qu’une application endommagée ou modifiée ne peut pas être installée de manière sûre sur le périphérique.

Rien d’en haut n’a fonctionné pour moi. Le problème pour moi était que je ne disposais pas de la bonne source dans mon Java Build Path pour android-support-v7-appcompat. Lorsque vous accédez à Projet> Créer un chemin> 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.

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 de débogage / version) et j’ai reçu deux erreurs alternativement: INSTALL_FAILED_UID_CHANGED et 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é de les rm -rf sans succès: j’ai eu des erreurs d’E / S.

La solution à cela était:

  • Arrêtez la VM
  • Monter l’image VDI avec vdfuse (lecture / écriture)
  • Réparer le fichier image Partition1 avec e2fsck
  • Umount et redémarrer la VM

J’ai eu le même problème jusqu’à ce que j’ai réalisé que j’avais le simulateur en cours d’exécution et adb essayait d’installer sur ce

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

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

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