Wie gehe ich mit INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES ohne Deinstallation um?

277

Ich habe versucht, eine apk neu zu installieren

$adb install -r new.apk

Und es zeigt den Fehler:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

Eine Lösung besteht darin, die Datei new.apk zu deinstallieren und zu installieren, die einwandfrei funktioniert.

Aber ich frage mich, ob ich eine apk neu erstellen und ohne die Deinstallation neu installieren könnte. Z.B. Ändern Sie eine Konfiguration in der Datei AndroidManifest.xml oder signieren Sie die APK usw. nicht.

Es wäre sehr dankbar, wenn Sie mir die gesamte Bedeutung von "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES" mitteilen könnten.

Johnny
quelle
Versuchen Sie, das Problem zu umgehen, indem Sie Ihre apk auf einem tatsächlichen Gerät ausführen. Es funktioniert immer für mich
Kyle
Es funktioniert nicht bei mir. ^ @ Mr.Derpinthoughton
Crime_Master_GoGo
Dies kann auch auftreten, wenn die App zweimal signiert und das Upgrade in umgekehrter Reihenfolge signiert wird. Weitere Informationen hierzu finden Sie unter stackoverflow.com/a/13618894/5276890 .
Roy Falk

Antworten:

319

Dies bedeutet, dass die neue Kopie Ihrer Anwendung (auf Ihrem Entwicklungscomputer) mit einem anderen Signaturschlüssel signiert wurde als die alte Kopie Ihrer Anwendung (auf dem Gerät / Emulator installiert). Wenn es sich beispielsweise um ein Gerät handelt, haben Sie möglicherweise die alte Kopie von einem anderen Entwicklungscomputer (z. B. einem anderen Entwicklercomputer) installiert. Oder der alte ist mit Ihrem Produktionsschlüssel und der neue mit Ihrem Debug-Schlüssel signiert.

CommonsWare
quelle
6
@atourney: Sie müssten den Schlüsselspeicher des vorherigen Computers (z. B. debug.keystore) auf Ihren neuen Computer kopieren .
CommonsWare
12
Beachten Sie, dass sich das debug.keystorenicht in Ihrem Projektverzeichnis befindet. Es befindet sich normalerweise in Ihrem ~/.android/Verzeichnis. (siehe developer.android.com/guide/publishing/… )
ohhorob
3
Wie könnte man dem Debug-Paket einen anderen Namen geben? (zB {PRODUCT_NAME} Dev)
Sandstrom
6
@ChristianBongiorno: Synchronisieren Sie Ihre Signatur-Keystores (z debug.keystore. B. ). Wählen Sie einen als Master-Keystore aus, kopieren Sie ihn auf alle anderen Entwicklercomputer und ersetzen Sie den vorhandenen Keystore.
CommonsWare
2
Vergessen Sie nicht, Ihr Projekt nach dem Kopieren der Datei neu zu erstellen. Ich habe die Dateien verschoben und die Anwendung erneut an das Gerät gesendet (aber es wurde immer noch die alte verwendet debug.keystore). Nachdem ich das Projekt neu erstellt hatte (mit Build-> Rebuild in Android Studio), waren die Schlüssel synchron.
Benjamin Kaiser
48

Ich bin darauf gestoßen, als ich auf einem neuen Xoom getestet habe. Ich hatte meine App zuvor vom Marktplatz installiert. Später, als ich versuchte, eine neue Version der App zu testen, stieß ich auf diesen Fehler.

Ich habe das Problem behoben, indem ich die über Marketplace installierte App entfernt habe (einfach gedrückt halten und in den Papierkorb ziehen). Danach konnte ich meine Entwicklungsversion ohne Probleme bereitstellen.

George Armhold
quelle
12
Ja, durch Deinstallieren wird dieses Berechtigungsproblem behoben. Ich habe mich gefragt, ob ich das lösen kann, ohne es zu deinstallieren
Johnny
Habe ein neues Telefon bekommen und das vergessen. Wie markiere ich das zweimal :)
Anthony Horne
22

Dies passierte mir, als ein anderer Entwickler im Team unsere App auf dem Hardwaregerät erstellte, auf dem ich die Bereitstellung durchführen wollte. Das Deinstallieren der App von der Hardware hat mein Problem behoben.

Supermoogle
quelle
16
Großartig! Arbeitete nach dem Befehl adb uninstall <package name>. Vielen Dank.
Paul
Ich hatte einen einzigartigeren Fall, aber diese Antwort führte zur Lösung. Ich hatte eine App lokal über die Cordova CLI installiert und auch eine aus dem PG Build. Ich musste beide Apps deinstallieren, damit der Fehler behoben wurde.
DemitryT
@Paul Ihre Exzellenz - König Paul I., obwohl ich nicht der ursprüngliche Fragesteller bin, hat Ihr Befehl für mich funktioniert (und zweifellos andere, wenn man bedenkt, wie positiv Ihr Kommentar ist). Kann ich vorschlagen, dass Sie das als Antwort posten?
Barlop
1
@barlop: Ich habe eine Antwort mit dem Befehl gepostet, um für andere besser sichtbar zu sein, die möglicherweise ebenfalls auf dieses Problem gestoßen sind. Vielen Dank.
Paul
3
Ich verstehe nicht, warum diese Antwort positive Stimmen hat. Er sagt deutlich "OHNE Deinstallation"! -
Christian
20

Dies ist der Befehl zum Deinstallieren der App vom Gerät mit adb:

adb uninstall <package name>
Paul
quelle
8
Die Frage ist, wie das Problem ohne Deinstallation behoben werden kann.
Janaka Bandara
2
Ich verstehe nicht, warum diese Antwort positive Stimmen hat. Er sagt deutlich "OHNE Deinstallation"!
Christian
Es gibt kein pm-Flag zum Ersetzen des Pakets durch ein inkonsistentes Zertifikat, oder? Sicherheitsabsicht?
JohnyTex
9

Ich habe diesen Fehler auch nach der Deinstallation der ursprünglichen APK erhalten, was mystifizierend war. Schließlich wurde mir klar, dass ich auf meinem Nexus 7 mehrere Benutzer zum Testen eingerichtet hatte und dass die App noch für einen der anderen Benutzer installiert war. Nachdem ich es für alle Benutzer deinstalliert hatte, verschwand der Fehler.

inky
quelle
5

Ich habe den Paketnamen beim Codieren eines Updates geändert, damit ich es über Eclipse auf meinem Gerät debuggen kann, ohne die alte Version zu löschen, die installiert wurde. Ohne den Paketnamen zurückzusetzen, den ich bei der Neuinstallation verwendet habe, wurde der gleiche Fehler angezeigt. Bei Verwendung des gleichen Paketnamens war die Neuinstallation erfolgreich.

Edward
quelle
3

Löschen Sie einfach den alten Build vom Gerät und installieren Sie ihn erneut. Da device.keystore bereits im Gerät vorhanden ist, deinstallieren Sie einfach den Build und installieren Sie die APK neu.

Vielen Dank

user1330971
quelle
Ja, es ist eine bessere und klarere Antwort als die Antwort von CommonsWare. Danke
tres.14159
3

Ich sah mich einem anderen Anwendungsfall gegenüber, bei dem ich den ähnlichen Fehler bekam. Als ich zuerst den Fehler bekam, geriet ich in Panik und entfernte /data/data/{package.name} mich. Danach versuchte ich es und mein Problem war immer noch vorhanden. Dann habe ich versucht zu deinstallieren, es ist fehlgeschlagen.

Ich entfernte dann die in vorhandene apk-Datei /system/app(erforderlicher Root-Zugriff) und versuchte zu deinstallieren und es war erfolgreich.

Danach habe ich versucht, die apk neu zu installieren, es hat funktioniert.

Arunkumar
quelle
1

Für das, was es wert ist, bin ich auf dieses Problem gestoßen, nachdem ich meinem Cordova-Projekt ein neues Plugin hinzugefügt habe. Ich hatte Cordova Builds und Installationen direkt auf dem Gerät über USB.

Ich habe es durch Deinstallation der App vom Gerät behoben und bei der nächsten Bereitstellung gab es keine Probleme.

radikalmatt
quelle
1

Wenn im Ausgabefenster eine fehlgeschlagene Bereitstellung auf einem Andorid-Gerät oder Emulator mit dem Fehler "Fehler [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]" auftritt, löschen Sie einfach die vorhandene App auf dem Gerät oder Emulator und stellen Sie sie erneut bereit. Debug-Builds verwenden ein Debug-Zertifikat, während Release-Builds Ihr konfiguriertes Zertifikat verwenden. Dieser Fehler weist Sie lediglich darauf hin, dass sich das Zertifikat der auf dem Gerät installierten App von dem unterscheidet, das Sie installieren möchten. In Szenarien ohne Entwicklung (App Store) kann dies ein Hinweis auf eine beschädigte oder anderweitig geänderte App sein, die nicht sicher auf dem Gerät installiert werden kann.

Linda Z.
quelle
0

Nichts von oben hat bei mir funktioniert. Das Problem für mich war, dass ich in meinem Java Build Path für android-support-v7-appcompat eine falsche Quelle hatte. Wenn Sie zu Projekt> Erstellungspfad> Erstellungspfad konfigurieren> gehen. Stellen Sie auf der Registerkarte Quelle sicher, dass Sie android-support-v7-appcompat / gen, android-support-v7-appcompat / libs und android-support-v7-appcompat / src und sonst nichts haben. Klicken Sie auf OK und es sollte funktionieren.

Unsterblicher Code
quelle
0

Ich hatte heute den gleichen Fehler, aber das Problem war nicht genau das gleiche. Ich verwende ADB mit Android, das in VirtualBox installiert ist . Ich habe versucht, verschiedene Versionen meiner App zu installieren (signiert / nicht signiert, Debug- / Release-Modus) und habe alternativ zwei Fehler erhalten: INSTALL_FAILED_UID_CHANGEDund INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES.

Beim Betrachten habe /data/data/{package.name}ich nun eine Reihe von Dateien gefunden, die nach der Deinstallation der App noch vorhanden waren. Ich rm -rfhabe es ohne Erfolg versucht : Ich habe E / A-Fehler.

Die Lösung dafür war:

  • Fahren Sie die VM herunter
  • Mounten Sie das VDI-Image mit vdfuse(Lesen / Schreiben)
  • Reparieren Sie die Partition1Bilddatei mite2fsck
  • Hängen Sie die VM um und starten Sie sie neu
Jérôme
quelle
0

Ich hatte das gleiche Problem, bis mir klar wurde, dass der Simulator lief und adb versuchte, darauf zu installieren

Martin Lockett
quelle
0

Da die Überprüfung auf dem Paketnamen basiert, können Sie den Paketnamen in Ihrer config.xml- oder Manifestdatei gegen einen anderen gewünschten Namen ändern.

Vergessen Sie beim Veröffentlichen Ihrer App nicht, den Namen zurück zu ändern!

Raphael
quelle
0

Ich hatte dieses Problem beim Versuch, eine Gradle-Aufgabe connectedDebugAndoidTest(oder connectedAndroidTest) für Genymotion auszuführen . Das Ausführen auf einem normalen Emulator löste das Problem.

Ognyan
quelle
Ich bekam dies auch in der gleichen Situation (Testen mit Genymotion). Es stellt sich heraus, dass es sich um einen Konflikt mit der Signatur für das Testpaket handelte. Das Entfernen des Testpakets löste das Problem.
D-C0d3r
0

Ich denke, Ihre App wurde von einem anderen Konto installiert. (Funktion für mehrere Konten) Sie können die App unter Einstellungen> Apps> "App-Name"> Deinstallieren deinstallieren

Nguyễn Quang Tuấn
quelle