Was ist der Fehler INSTALL_PARSE_FAILED_NO_CERTIFICATES?


163

Ich habe versucht, meine Standard- / Haupt- / Startaktivität (wie auch immer Sie sie nennen) durch Bearbeiten der androidmanifest.xmlDatei zu ändern . Alles was ich getan habe war das android:nameEigentum zu ändern . Dies hat jedoch die gesamte App komplett zerstört. Wenn ich versuche zu installieren, schlägt es fehl und liest.

Installationsfehler: INSTALL_PARSE_FAILED_NO_CERTIFICATES

Als ich versuchte, es wieder in den vorherigen Zustand zu versetzen, gab es immer noch den gleichen Fehler ... Was habe ich getan?


Für alle anderen: INSTALL_PARSE_FAILED_NO_CERTIFICATESIst ein Fehler -103, den Sie über adb log( src ) erhalten / sehen können, z. D/PackageInstaller(21320): Installation error code: -103

Die Antwort ist wahr. Und es gibt noch einen weiteren Grund, der diesen Fehler verursacht, wenn Sie eine alte Anwendung mit demselben Paketnamen auf Ihrem Telefon installiert haben. Deinstallieren Sie sie einfach von Ihrem Telefon, bevor Sie die neue installieren
Emre Kilinc Arslan

1
Für alle, die über diese Frage stolpern - lesen Sie alle Antworten unten! Es scheint, dass diese Fehlermeldung eher ein Fehlertyp ist, bei dem "etwas nicht stimmt". Der Grund, warum ich darauf gestoßen bin, war eine der Antworten, ganz unten auf der Liste !!!!
GMc

Antworten:


56

Haben Sie das AndroidManifest.xmldirekt in der .apkDatei bearbeitet ? Wenn ja, wird das nicht funktionieren.

Jedes Android .apkmuss signiert sein, wenn es auf einem Telefon installiert werden soll , auch wenn Sie nicht über den Markt installieren. Die Entwicklungstools umgehen dies, indem sie mit einem Entwicklungszertifikat signieren, das .apkjedoch noch signiert ist.

Eine Verwendung davon ist, dass ein Gerät erkennen kann, ob .apkes sich um ein gültiges Upgrade für eine installierte Anwendung handelt, da die Zertifikate identisch sind, wenn dies der Fall ist.

Wenn Sie also Änderungen an Ihrer App vornehmen, müssen Sie diese neu erstellen, .apkdamit sie ordnungsgemäß signiert wird.


Vielen Dank, gibt es eine Schaltfläche zum automatischen Neuerstellen des Manifests?
Mtmurdock

Für Jungs, die mit Flattern zu kämpfen haben, laufen flutter cleanund rennen / debuggen Sie erneut! Dieser Vorgang ähnelt der obigen Lösung, da der Build-Ordner bereinigt und die Build-Datei beim Ausführen / Debuggen erneut erstellt wird!
Manoj Kumar

183

Ich habe festgestellt, dass dieser Fehler jetzt auch bei Verwendung der falschen Signaturkonfiguration auftreten kann. Wie hier beschrieben , führt Android 7.0 ein neues Signaturschema ein, V2 . Das V2-Schema signiert die gesamte APK und nicht nur die JAR, wie dies im V1-Schema der Fall ist. Wenn Sie nur mit V2 signieren und versuchen, auf einem Ziel vor 7.0 zu installieren, wird dieser Fehler angezeigt, da die JARs selbst nicht signiert sind und der PackageManager vor 7.0 das Vorhandensein der V2-APK-Signatur nicht erkennen kann.

Um mit allen Zielsystemen kompatibel zu sein, stellen Sie sicher, dass die APK mit beiden Schemata signiert ist, indem Sie beide Signaturversionsfelder im Dialogfeld " Signierte APK generieren" von Android Studio wie hier gezeigt aktivieren:

Geben Sie hier die Bildbeschreibung ein

Wenn nur 7.0-Ziele erwartet werden, muss die V1-Signatur nicht enthalten sein.


5
Du hast mir viel Zeit gespart. Das Upgrade von Android Studio verursachte einen Albtraum von Problemen. Dies war einer von ihnen. Ich frage mich, ob SO nicht mehr als die Hälfte der Android-Entwicklung gestorben wäre. Android Studio gibt keine Hinweise auf Fehler.
Atul

4
Glücklicherweise habe ich meine Release-Apk auf einem alten Gerät getestet, bevor ich sie auf Google Play eingeführt habe. Das wäre eine Katastrophe, wenn alle <Android 7.0-Geräte die neue Version nicht installieren könnten. Das Ding mit zwei Versionen sollte ein BIG RED POP UP DIALOG sein, wenn Sie klicken, um eine Apk-Version zu erstellen!
Kirill Karmazin

Danke dafür. Ich wollte verrückt werden und suchte nach dem Grund, warum meine APK nicht unter Android 7 laufen würde, aber es war nur ein einfaches Kontrollkästchen. So nervig.
Japzone

54

Ich habe festgestellt, dass dies durch meine JDK-Version verursacht wurde.

Ich hatte dieses Problem mit 'Ameise' und es war auf diese in der Dokumentation erwähnte VORSICHT zurückzuführen:

http://developer.android.com/guide/publishing/app-signing.html#signapp

Achtung: Ab JDK 7 hat sich der Standard-Signaturalgorithmus geändert, sodass Sie beim Signieren einer APK die Signatur- und Digest-Algorithmen (-sigalg und -digestalg) angeben müssen.

Ich habe JDK 7. In meinem Ant-Protokoll habe ich -v für ausführlich verwendet und es wurde angezeigt

$ ant -Dadb.device.arg=-d -v release install
[signjar] Executing 'C:\Program Files\Java\jdk1.7.0_03\bin\jarsigner.exe' with arguments:
[signjar] '-keystore'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\release.keystore'
[signjar] '-signedjar'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unaligned.apk'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unsigned.apk'
[signjar] 'mykey'
 [exec]     pkg: /data/local/tmp/PairFinder-release.apk
 [exec] Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

Ich habe die JAR manuell signiert und zipaligniert, aber es gab einen etwas anderen Fehler:

$ "$JAVA_HOME"/bin/jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore release.keystore -signedjar bin/PairFinder-release-unaligned.apk bin/PairFinder-release-unsigned.apk mykey
$ zipalign -v -f 4 bin/PairFinder-release-unaligned.apk bin/PairFinder-release.apk
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
641 KB/s (52620 bytes in 0.080s)

Ich fand das hier beantwortet.

Umgang mit INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES ohne Deinstallation

Ich musste es nur deinstallieren und dann funktionierte es!

$ adb -d uninstall com.kizbit.pairfinder
Success
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Success
641 KB/s (52620 bytes in 0.080s)

Jetzt muss ich nur noch die build.xml ändern, um diese Optionen beim Signieren zu verwenden!

Ok, hier ist es: C: \ Programme \ Java \ android-sdk \ tools \ ant \ build.xml

            <signjar
                    sigalg="MD5withRSA"
                    digestalg="SHA1"
                    jar="${out.packaged.file}"
                    signedjar="${out.unaligned.file}"
                    keystore="${key.store}"
                    storepass="${key.store.password}"
                    alias="${key.alias}"
                    keypass="${key.alias.password}"
                    verbose="${verbose}" />

3
JDK 7 war auch mein Problem. Ich war faul und deinstallierte JDK 7 und installierte JDK 6, funktionierte auch ^^. Eine andere, aber weniger radikale Hack-Lösung könnte beide installieren lassen, aber JAVA_HOME auf JDK 6 setzen und den Bin-Pfad von JDK 6 zuerst in PATH setzen.
Ixx

1
JDK 8 hat das gleiche Problem. Das Ändern von PATH in JDK 6 hat funktioniert. Danke Lebensretter!
Chris Xue

Vielen Dank! Meine Markt-App wurde mit JDK6 kompiliert. Als ich die App mit Release Keystore mit JDK7 kompilierte und versuchte zu installieren, gab es dieses Problem.
Sileria

28

Meistens ist die Lösung für diesen Fehler wirklich einfach:

  1. Deinstalliere deine apk
  2. Bereinigen Sie Ihr Android-Projekt
  3. Erstellen Sie Ihr Android-Projekt
  4. Installiere / starte deine apk

Ich habe 2,3,4 gemacht und bekomme den gleichen Fehler. Was meinst du mit deinstallieren dein apk? Von meinem Gerät? Ich glaube nicht, dass es jemals auf meinem Gerät war.
Curtis

Ich fing plötzlich an, diesen Fehler aus dem Nichts zu bekommen. Keine, wenn die Lösung, sondern nur das Reinigungsprojekt funktionierte. Vielen Dank.
pgcan

18

gelöst (für mich) mit in keytool die args

-sigalg MD5withRSA -keyalg RSA -keysize 1024

und in jarsigner verwenden

-sigalg MD5withRSA -digestalg SHA1

Lösung gefunden in

Welche Art von Pitfals gibt es für die Android APK-Signatur?


Danke, das Problem wurde auch für mich behoben (ich habe JDK 7).
Enrico Ros

Ich habe es auf die gleiche Weise behoben, da ich Appcelerator Titan verwende und keinen Zugriff auf das Apk-Generierungsskript habe. Beachten Sie, dass diese Lösung die Neuerstellung (Änderung!) Des privaten Schlüssels erfordert.
Federico

8

Ich stand auch vor dem gleichen Problem. Zuerst habe ich Build mit V2 generiert und auf Mobilgeräten unter OS 5.1 installiert, und ich habe das gleiche Problem. Aber Build funktionierte gut auf Tablet unter OS 7.0. Also habe ich einen Build mit V1 Jar-Signatur generiert und es hat auf beiden Geräten einwandfrei funktioniert.

Schlussfolgerung: Wenn Sie das Gerät unter Android OS 7.0 unterstützen. Verwenden Sie die V1-JAR-Signatur, um den Build zu generieren.


Sie müssen nicht beide überprüfen. Wählen Sie V1 aus, wenn Sie OS 7.0 und niedriger unterstützen. Überprüfen Sie V2, wenn Sie Geräte unterstützen, auf denen 7.0 und höher ausgeführt wird.
Rajiv Ranjan

7

In meinem Fall konnte ich Release-Builds erstellen und ausführen, bekam jedoch den INSTALL_PARSE_FAILED_NO_CERTIFICATESFehler, als ich versuchte, einen Debug-Build durchzuführen.

Die Lösung bestand darin, meine debug.keystoreDatei zu löschen und von ADT neu erstellen zu lassen. Es war anscheinend abgelaufen.

Eine bessere langfristige Lösung besteht darin, explizit eine zu erstellen debug.keystore, die nicht nach nur einem Jahr abläuft, anstatt sie von ADT erstellen zu lassen. Hier ist der Befehl dazu:

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000

Wenn Sie dazu aufgefordert werden, geben Sie folgende Werte ein:

  • Vor- und Nachname: Android Debug
  • Organisationseinheit: Android
  • Name der Organisation: Unbekannt
  • Stadt oder Ort: Unbekannt
  • Staat oder Provinz: Unbekannt
  • Ländercode: USA

5

Dies ist eine hässliche, aber schnelle Lösung: Verwenden Sie JDK 6 anstelle von 7.

Nachdem ich Chloes Antwort gelesen hatte, deinstallierte ich mein JDK 7 (brauche es derzeit sowieso nicht) und installierte JDK 6. Das hat es behoben. Eine bessere Lösung würde dazu führen, dass ant JDK 6 verwendet (ohne 7 zu deinstallieren). Möglicherweise ist es möglich, diese Eigenschaft zu ändern / einzustellen:

java.library.path

in der Datei local.properties. Es befindet sich im Projektverzeichnis (root).

Android funktioniert sowieso nicht mit JDK 7 (nur 6 oder 5), daher ist es wahrscheinlich eine gute Lösung, dass das Ant-Skript auch JDK 6 oder 5 verwendet.


5

Dies liegt daran, dass zuvor generierte Builds und aktuelle Konflikte in der Signaturversion zwischen v1 (JAR-Signatur) und v2 (vollständige APK-Signatur) auftreten.

Um dies zu beheben, kreuzen Sie die richtige Signaturversion im Dialogfeld "Signierte APK generieren" an


4

Vor kurzem hatte ich diesen Fehler beim Upgrade auf Android Studio 4.0. Die Ursache war, dass für das Projekt die V2-Signatur in der Signaturkonfiguration deaktiviert war build.gradle.

Die Lösung bestand darin, es zu entfernen v2SigningEnabled falseoder explizit auf diesen trueStandardwert festzulegen.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}

Ich benutze Android Studio 4.0. In meiner build.gradle-Datei befindet sich jedoch kein "v2SigningEnabled". Was soll ich dann tun?
Nuwan Harshakumara Piyarathna

3

Wenn Sie in neueren Android Studio-Versionen 3.2+ versuchen, die releaseInstallation auszuführen und keine Signaturkonfigurationen definiert haben, wird die Fehlermeldung angezeigt und die Installation schlägt fehl. Sie müssen entweder den debugBuild ausführen oder die Signaturkonfiguration (V1 oder V2) korrekt einrichten.


3

Die meisten Antworten sind wahr. und einige andere Gründe, die passieren, sind

► Ihr min sdk ist kleiner als das Gerät sdk.
► Sie haben die ältere Anwendung auf Ihrem Gerät mit demselben Paketnamen


Dies war meine Erfahrung - Das min sdk in meinem Projekt war höher als das Gerät sdk. Dies geschah, weil ich beim Erstellen des Projekts in Android Studio die richtige Auswahl "verpasst" und versehentlich die nächsthöhere Version als mein SDK ausgewählt habe, als mein altes Tablet ausgeführt wurde.
GMc

Gleichheit mein min sdk und Gerät sdk löste mein Problem.
Nuwan Harshakumara Piyarathna

2

Dies kann passieren, wenn Sie versuchen, eine .jarBibliothek einzuschließen, die eine AndroidManifest.xmlDatei enthält .

  • Wenn es sich um reines Java handelt, stellen Sie sicher, dass Sie es nicht in den .jar-Export aufnehmen
  • Wenn es sich nicht um reines Java handelt (dh es handelt sich um ein Android-Projekt), müssen Sie es als Bibliotheksprojekt einbinden

2

Auch du kannst es überprüfen

Project Structure-> Default Config->Signing Config

Nachdem du alles hinzugefügt hast, was du brauchst


1

Durch Festlegen der Umgebungsvariablen JAVA_HOMEauf JDK 5 oder 6 (anstelle von JDK 7) wurde der Fehler behoben.


0

Nach einiger Zeit und mehreren Online-Threads zu diesem Thema konnte ich mein Projekt reparieren.

Dabei werden hauptsächlich die letzten Dateien berücksichtigt ( eingegebenen möglicherweise Bilder oder Layouts ) . Wenn Sie sie löschen, funktioniert dies und Sie können Ihr Projekt erneut erstellen.


0

Ich hatte diesen Fehler in meiner Eclipse-Konsole. Es stellte sich heraus, dass ich zwei Gläser mit demselben Inhalt, aber unterschiedlichen Namen hatte und sie miteinander in Konflikt standen. Ich habe gerade eine davon gelöscht und es geschafft, die App auf dem Gerät zu installieren.


0

Ich habe diesen Fehler erhalten, weil ich veröffentlicht habe, dass mein Fehler ant releaseaufgetreten ist, weil mir der Speicherplatz ausgegangen ist.


0

Ich habe diesen Fehler erhalten, als ich versucht habe, ein Xamarin-Projekt, das für die Android N-Vorschau erstellt wurde, auf einem Telefon mit API v23 zu installieren. Die Lösung ist, das nicht zu tun.


0

Eine andere Möglichkeit, diesen Fehler zu erhalten, besteht darin, unter antmacOS zu erstellen und eine Finder-Symboldatei ( Icon\r) im Quellbaum der App zu haben. Es scheint jarsignernicht mit dem Wagenrücklauf im Dateinamen fertig zu werden und obwohl es behauptet, dass die Signatur gültig ist, wenn Sie-verify die APK verwenden, führt dies immer zu einer APK, die nicht auf einem Gerät installiert wird. Ironischerweise ist das Google Drive Finder-Plugin eine großartige Quelle für Finder-Symboldateien.

Die Lösung besteht darin, die fehlerhaften Dateien (die in der APK ohnehin unbrauchbar sind) mit einem solchen Bezeichner auszuschließen fileset:

    <exclude name="**/Icon&#13;" />

0

Dieses Problem tritt auf, wenn Sie eine nicht signierte Version von APK installieren. Überprüfen Sie, ob Sie die richtige APK installiert haben.


0

Ich hatte dieses Problem mit ionischem / Visual Studio-Code (Android auf dem Gerät ausführen):

Ich habe die App auf dem mobilen Gerät (Einstellungen / Apps) deinstalliert, der Fehler ist verschwunden und die App wird gestartet.


0

Es wirft diesen Fehler für mich heute aus, weil ich eine App mit einem Mindest-SDK von 28 habe und auf einem Emulator mit einer SDK-Version von 23 spiele. Normalerweise ist dies nicht möglich (AS Gray ist aus der Wiedergabetaste), aber heute nicht viel.


0

Versuchen Sie zunächst einfach, dies zu tun:

  • Gehen Sie zu Gradle-Skript → bulid.gradle (Modul: App) → Dann müssen Sie den Wert (minSdkVersion) ändern. Wenn Sie beispielsweise 26 verwendet haben, können Sie versuchen, den Wert zu verringern, z. B. (minSdkVersion 20).
  • dann versuchen Sie es (jetzt synchronisieren).

0

Wenn Sie den Emulator verwenden, versuchen Sie ihn zurückzusetzen. Wenn Sie auf dem Handy zuerst die Anwendung deinstallieren, schalten Sie den Entwicklermodus aus und schalten Sie ihn ein. Das Problem ist behoben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.