it-swarm.com.de

Was ist der INSTALL_PARSE_FAILED_NO_CERTIFICATES Fehler?

Ich habe versucht, meine Standard/main/startup-Aktivität (wie immer Sie es nennen) zu ändern, indem Sie die androidmanifest.xml-Datei bearbeiten. Alles was ich tat, war, die Android:name-Eigenschaft zu ändern. Dies brach jedoch die gesamte App vollständig. 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 bringen, gab es immer noch den gleichen Fehler ... Was habe ich getan?

110
mtmurdock

Haben Sie den AndroidManifest.xml direkt in der .apk-Datei bearbeitet? Wenn ja, funktioniert das nicht.

Jeder Android .apk muss signiert werden, wenn er auf einem Telefon installiert werden soll , auch wenn Sie nicht über den Market installieren. Die Entwicklungstools umgehen dies, indem sie mit einem Entwicklungszertifikat signieren, aber der .apk ist immer noch signiert.

Eine Anwendung davon ist, damit ein Gerät feststellen kann, ob ein .apk ein gültiges Upgrade für eine installierte Anwendung ist, da bei diesen Zertifikaten dieselben Zertifikate verwendet werden.

Wenn Sie also Änderungen an Ihrer App vornehmen, müssen Sie den .apk neu erstellen, damit er ordnungsgemäß signiert wird.

45
Dave Webb

Ich habe festgestellt, dass dieser Fehler jetzt auch auftreten kann, wenn die falsche Signierungskonfiguration verwendet wird. 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 beim V1-Schema der Fall ist. Wenn Sie nur mit V2 signieren und versuchen, auf einem Ziel vor 7.0 zu installieren, wird diese Fehlermeldung angezeigt, da die JARs selbst nicht signiert sind und PackageManager vor 7.0 das Vorhandensein der V2 APK-Signatur nicht erkennen kann .

Um mit allen Zielsystemen kompatibel zu sein, müssen Sie sicherstellen, dass der APK mit beiden Schemata signiert ist. Aktivieren Sie dazu die beiden Kontrollkästchen für die Signaturversion im Dialogfeld Generated Signed APK von Android Studio wie hier gezeigt:

 enter image description here

Wenn nur 7.0-Ziele erwartet werden, muss die V1-Signatur nicht hinzugefügt werden.

133
Paul Ratazzi

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

Ich hatte dieses Problem mit 'Ameise' und es lag an dieser VORSICHT in der Dokumentation:

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

Achtung: Seit 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-Log habe ich -v für verbose 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 zipaligned, 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.

Wie mit INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES ohne Deinstallation verfahren wird

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}" />
52
Chloe

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

-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?

15

Meist ist die Lösung für diesen Fehler sehr einfach:

  1. Deinstallieren Sie Ihren apk
  2. Bereinigen Sie Ihr Android-Projekt
  3. Bauen Sie Ihr Android-Projekt auf
  4. Installieren Sie Ihren apk
14
JanCor

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 überhaupt nicht) und installierte JDK 6. Das hat es behoben. Eine bessere Lösung wäre, dass ant JDK 6 verwendet (ohne 7 deinstallieren zu müssen). Möglicherweise kann diese Eigenschaft geändert/eingestellt werden:

Java.library.path

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

Android funktioniert mit JDK 7 ohnehin nicht (nur 6 oder 5), so dass das Ant-Skript ebenfalls JDK 6 oder 5 verwendet, ist wahrscheinlich eine gute Lösung.

5
Ixx

In meinem Fall konnte ich Release-Builds erstellen und ausführen, erhielt jedoch den Fehler INSTALL_PARSE_FAILED_NO_CERTIFICATES, wenn ich versuche, einen Debug-Build auszuführen.

Die Lösung bestand darin, meine debug.keystore-Datei zu löschen und ADT neu erstellen zu lassen. Es war offenbar abgelaufen.

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

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

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

  • Vor- und Nachname: Android Debug
  • Organisationseinheit: Android
  • Name der Organisation: Unbekannt
  • Stadt oder Ortschaft: Unbekannt
  • Bundesstaat oder Provinz: Unbekannt
  • Ländercode:US
5

Sein, weil zuvor erstellte Builds und aktuelle Versionen einen Konflikt in der Signaturversion zwischen v1 (Jar-Signatur) und v2 (vollständige APK-Signatur) haben.

Überprüfen Sie die richtige Signaturversion im Dialogfeld "Signed APK generieren"

4
Pankaj kumar

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

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

3
Rajiv Ranjan

Dies kann passieren, wenn Sie versuchen, eine .jar-Bibliothek einzuschließen, die eine AndroidManifest.xml-Datei enthält.

  • Wenn es reines Java ist, stellen Sie sicher, dass Sie es nicht in den .jar-Export aufnehmen
  • Wenn es nicht reines Java ist (dh es ist ein Android-Projekt), müssen Sie es als Bibliotheksprojekt hinzufügen
2
znat

Durch das Setzen der Umgebungsvariable Java_HOME auf JDK 5 oder 6 (anstelle von JDK 7) wurde der Fehler behoben.

2
TN.

Eine andere Möglichkeit, diesen Fehler zu erhalten, besteht darin, mithilfe von ant unter macOS zu erstellen und eine Finder-Symboldatei (Icon\r) im Quellbaum der App zu haben. Es scheint, dass jarsigner den Wagenrücklauf im Dateinamen nicht bewältigen kann. Obwohl Sie behaupten, dass die Signatur gültig ist, wenn Sie -verify die APK eingeben, 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-Icon-Dateien.

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

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

Ich habe diese Fehlermeldung erhalten, weil ich herausgegeben habe, dass mein ant release fehlgeschlagen ist, weil ich keinen Speicherplatz mehr hatte.

0
Red Cricket

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

0
NeeK

Wenn Sie in neueren Android Studio-Versionen 3.2+ release install ausführen und keine Signierkonfigurationen definiert haben, wird die Fehlermeldung Prompt angezeigt und die Installation schlägt fehl. Sie müssen entweder debug build ausführen oder die Signierkonfiguration (V1 oder V2) richtig einrichten. 

0
Rowland Mtetezi

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

Dabei werden hauptsächlich die letzten Dateien berücksichtigt (können Bilder oder Layouts) sein, die Sie einfügten. Wenn Sie sie löschen, wird dies funktionieren und Sie können Ihr Projekt erneut erstellen.

0
Nelson R.

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 die App auf dem Gerät installiert. 

0
joao2fast4u

Ich habe diese Fehlermeldung erhalten, als ich versuchte, ein Xamarin-Projekt zu installieren, das in der Android N-Vorschau auf einem Telefon mit api v23 erstellt wurde. Lösung ist das nicht zu tun.

0
James Moore

Ich hatte das Problem mit ionic/Visual Studio Code (Android auf Gerät ausführen):

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

0
Michael Maier