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?

mtmurdock
quelle
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.

Dave Webb
quelle
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.

Paul Ratazzi
quelle
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}" />
Chloe
quelle
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
JanCor
quelle
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?

Alejadro Xalabarder
quelle
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.

Rajiv Ranjan
quelle
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
Kristopher Johnson
quelle
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.

Ixx
quelle
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

Pankaj Kumar
quelle
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
        }
     }
}
mikehc
quelle
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.

Rowland Mtetezi
quelle
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

Emre Kilinc Arslan
quelle
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
znat
quelle
2

Auch du kannst es überprüfen

Project Structure-> Default Config->Signing Config

Nachdem du alles hinzugefügt hast, was du brauchst

Morozov
quelle
1

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

TN.
quelle
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.

Nelson R.
quelle
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.

joao2fast4u
quelle
0

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

Red Cricket
quelle
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.

James Moore
quelle
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;" />
Perry
quelle
0

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

NeeK
quelle
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.

Michael Maier
quelle
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.

Daniel Wilson
quelle
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).
Ingenieur Ahmed IT
quelle
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.

Shashank Pandey
quelle