web-dev-qa-db-fra.com

Qu'est-ce que l'erreur INSTALL_PARSE_FAILED_NO_CERTIFICATES?

J'essayais de changer mon activité par défaut/main/startup (comme vous l'appelez) en modifiant le fichier androidmanifest.xml. Tout ce que j'ai fait était de changer la propriété Android:name. Cependant, cela a complètement cassé l'application entière. quand j'essaye de l'installer il échoue et lit.

Erreur d'installation: INSTALL_PARSE_FAILED_NO_CERTIFICATES

Quand j'ai essayé de le remettre à son état précédent, il me donnait toujours la même erreur ... Qu'est-ce que j'ai fait?

110
mtmurdock

Avez-vous édité le AndroidManifest.xml directement dans le fichier .apk? Si oui, ça ne marchera pas.

Chaque Android .apk doit être signé s'il doit être installé sur un téléphone , même si vous ne l'installez pas par le biais du Market. Les outils de développement contournent ce problème en signant avec un certificat de développement, mais le .apk est toujours signé.

L'une des utilisations de cette méthode est qu'un périphérique puisse déterminer si un .apk est une mise à niveau valide pour une application installée, car si c'est le cas, les certificats seront identiques.

Donc, si vous apportez des modifications à votre application, vous devrez reconstruire le .apk afin qu'il soit correctement signé.

45
Dave Webb

J'ai trouvé que cette erreur peut maintenant se produire également lors de l'utilisation d'une configuration de signature incorrecte. Comme décrit ici , Android 7.0 introduit un nouveau schéma de signature, V2. Le schéma V2 signe l'APK entier plutôt que le JAR, comme dans le schéma V1. Si vous vous connectez uniquement avec la V2 et tentez de l'installer sur une cible antérieure à la version 7.0, vous obtiendrez cette erreur, car les fichiers JAR eux-mêmes ne sont pas signés et que le PackageManager antérieur à la version 7.0 ne peut pas détecter la présence de la version 2. Signature APK.

Pour être compatible avec tous les systèmes cibles, assurez-vous que l'APK est signé avec les deux schémas en cochant les deux zones de version de signature dans la boîte de dialogue Générer l'APK signé d'Apple Studio, comme indiqué ici:

 enter image description here

Si seules les cibles 7.0 sont prévues, il n'est pas nécessaire d'inclure la signature V1.

133
Paul Ratazzi

J'ai trouvé que c'était dû à ma version de JDK.

J'avais ce problème avec 'ant' et c'était à cause de cette MISE EN GARDE mentionnée dans la documentation:

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

Attention: à partir de JDK 7, l'algorithme de signature par défaut a été modifié. Vous devez donc spécifier les algorithmes de signature et de synthèse (-sigalg et -digestalg) lorsque vous signez un APK.

J'ai JDK 7. Dans mon journal Ant, j'ai utilisé -v pour verbose et cela a montré

$ 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]

J'ai signé le JAR manuellement et zaliné, mais cela a donné une erreur légèrement différente:

$ "$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)

J'ai trouvé qui a répondu ici.

Comment traiter INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES sans désinstallation

Je n'avais besoin que de le désinstaller, puis tout fonctionnait!

$ 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)

Il ne me reste plus qu'à modifier le build.xml pour utiliser ces options lors de la signature!

Ok, voici: C:\Programmes\Java\Android-sdk\outils\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

résolu (pour moi) en utilisant dans keytool les arguments

-sigalg MD5withRSA -keyalg RSA -keysize 1024

et en utilisant jarsigner

-sigalg MD5withRSA -digestalg SHA1

solution trouvée dans

Quel type de pitfals existe pour la signature Android APK?

15
Alejadro Xalabarder

La plupart du temps, la solution à cette erreur est très simple:

  1. Désinstallez votre apk
  2. Nettoyez votre projet Android
  3. Construisez votre projet Android
  4. Installer/exécuter votre apk
14
JanCor

C’est une solution laide mais rapide: utilisez JDK 6 au lieu de 7.

Après avoir lu la réponse de Chloé, j'ai désinstallé mon JDK 7 (je n'en ai pas besoin pour le moment, de toute façon) et installé JDK 6. Cela a été corrigé. Une meilleure solution ferait que ant utilise JDK 6 (sans désinstaller 7). Peut-être possible de changer/définir cette propriété:

Java.library.path

dans le fichier local.properties. C'est dans le répertoire du projet (racine).

De toute façon, Android ne fonctionne pas avec JDK 7 (seulement 6 ou 5), alors assurez-vous que le script ant utilise également JDK 6 ou 5, ce qui est probablement une bonne solution.

5
Ixx

Dans mon cas, je pouvais créer et exécuter des versions, mais j'ai eu l'erreur INSTALL_PARSE_FAILED_NO_CERTIFICATES en essayant de créer une version de débogage.

La solution consistait à supprimer mon fichier debug.keystore et à laisser ADT le recréer. Il avait apparemment expiré.

Une meilleure solution à long terme consiste à créer explicitement un debug.keystore qui n'expire pas après seulement un an, au lieu de laisser ADT le créer. Voici la commande pour le faire:

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

Lorsque vous y êtes invité, entrez les valeurs suivantes:

  • Nom et prénom: Android Debug
  • Unité organisationnelle: Android
  • Nom de l'organisation: Inconnu
  • Ville ou localité: Inconnu
  • Etat ou province: Inconnu
  • Code pays:US
5

C'est parce que les versions précédemment générées et actuelles ont des conflits dans la version de signature entre v1 (signature de jar) et v2 (signature complète APK),

Pour corriger la version de coche appropriée dans la boîte de dialogue Générer l'APK signé

4
Pankaj kumar

Je faisais également face au même problème. Tout d'abord, j'ai généré la construction à l'aide de la V2 et je l'ai installé sur des appareils mobiles fonctionnant sous OS 5.1. Mais la compilation fonctionnait bien sous Tablet fonctionnant sous OS 7.0. J'ai donc généré la construction avec la signature V1 Jar et cela fonctionnait bien sur les deux appareils.

Conclusion: Si vous prenez en charge le périphérique ci-dessous Android OS 7.0. Utilisez la signature de fichier JAR V1 pour générer la construction.

3
Rajiv Ranjan

Cela peut se produire si vous essayez d'inclure une bibliothèque .jar contenant un fichier AndroidManifest.xml.

  • Si c'est du pur Java, assurez-vous de ne pas l'inclure dans l'export .jar
  • Si ce n'est pas du pur Java (c'est-à-dire un projet Android), vous devez l'inclure en tant que projet de bibliothèque.
2
znat

La définition de la variable d’environnement Java_HOME sur JDK 5 ou 6 (au lieu de JDK 7) a corrigé l’erreur.

2
TN.

Une autre façon d'obtenir cette erreur consiste à générer à l'aide de ant sur macOS et à créer un fichier icône du Finder (Icon\r) dans l'arborescence source de l'application. Il apparaît que jarsigner ne peut pas gérer le retour chariot dans le nom du fichier et, bien qu'il prétende que la signature est valide si vous -verify l'APK, il en résulte toujours un APK qui ne s'installera pas sur un périphérique. Ironiquement, le plug-in Google Drive Finder est une excellente source de fichiers d'icônes du Finder.

La solution consiste à exclure les fichiers incriminés (qui sont de toute façon inutiles dans l'APK) d'un spécificateur comme celui-ci dans la variable fileset:

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

J'avais cette erreur parce que j'ai publié que mon ant release échouait parce que je n'avais plus d'espace disque.

0
Red Cricket

Ce problème se produira si vous installez une version non signée de l'APK. Vérifiez si vous êtes installé correctement APK.

0
NeeK

Dans les versions plus récentes d'Android Studio 3.2+, si vous essayez d'exécuter release install et que vous n'avez défini aucune configuration de signature, le message d'erreur Prompt et l'installation échouera. Ce que vous devez faire est d'exécuter la version debug ou de configurer correctement la configuration de signature (V1 ou V2). 

0
Rowland Mtetezi

Après un certain temps et plusieurs threads en ligne sur le sujet, j'ai réussi à réparer mon projet.

Il prend principalement en considération les derniers fichiers ( pouvant être des images ou des mises en page ) que vous avez insérés. Si vous les supprimez, cela fonctionnera et vous pourrez reconstruire votre projet.

0
Nelson R.

J'avais cette erreur dans ma console Eclipse. Il se trouve que j'avais deux bocaux avec le même contenu, mais des noms différents et en conflit l'un avec l'autre. Je viens de supprimer l'un d'entre eux et j'ai réussi à installer l'application sur l'appareil. 

0
joao2fast4u

J'ai eu cette erreur lorsque j'ai essayé d'installer un projet Xamarin construit sur l'aperçu d'Android N sur un téléphone exécutant api v23. La solution est de ne pas le faire.

0
James Moore

J'ai eu ce problème avec ionic/Visual Studio Code (Exécuter Android sur l'appareil):

J'ai désinstallé l'application sur le périphérique mobile (Paramètres/Applications), l'erreur a disparu et l'application démarre.

0
Michael Maier