Qu'est-ce que l'erreur INSTALL_PARSE_FAILED_NO_CERTIFICATES?

163

J'essayais de modifier mon activité par défaut / main / démarrage (quel que soit votre nom) en modifiant le androidmanifest.xml fichier. Tout ce que j'ai fait, c'est changer la android:namepropriété. cependant, cela a complètement cassé toute l'application. lorsque j'essaye de l'installer, il échoue et lit.

Erreur d'installation: INSTALL_PARSE_FAILED_NO_CERTIFICATES

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

mtmurdock
la source
Pour n'importe qui d'autre: INSTALL_PARSE_FAILED_NO_CERTIFICATESest une erreur -103que vous pouvez obtenir / voir via adb log( src ) par exemple. D/PackageInstaller(21320): Installation error code: -103
La réponse est vraie. et il y a une autre raison qui donne cette erreur est lorsque vous avez installé une ancienne application avec le même nom de package dans votre téléphone .. désinstallez simplement de votre téléphone avant d'installer la nouvelle
Emre Kilinc Arslan
2
À tous ceux qui tombent sur cette question - lisez toutes les réponses ci-dessous! Il semble que ce message d'erreur soit plutôt un type d'erreur "quelque chose ne va pas". La raison pour laquelle je l'ai rencontré était due à l'une des réponses, en bas de la liste !!!!
GMc

Réponses:

56

Avez-vous édité le AndroidManifest.xmldirectement dans le .apkfichier? Si c'est le cas, cela ne fonctionnera pas.

Chaque Android .apkdoit être signé s'il doit être installé sur un téléphone , même si vous n'installez pas via le Market. Les outils de développement fonctionnent autour de cela en signant avec un certificat de développement mais le.apk est toujours signé.

Une utilisation de ceci est qu'un périphérique puisse dire si une .apkest une mise à niveau valide pour une application installée, car si c'est le cas, les certificats seront les mêmes.

Donc, si vous apportez des modifications à votre application, vous devrez la reconstruire .apkpour qu'elle soit correctement signée.

Dave Webb
la source
grand merci, y a-t-il un bouton pour reconstruire automatiquement le manifeste?
mtmurdock
Pour les gars aux prises avec le flutter, exécutez flutter cleanet exécutez / déboguez à nouveau! Cette opération est similaire à la solution ci-dessus car elle nettoie le dossier de construction et reconstruit à nouveau le fichier de construction lors de l'exécution / débogage!
Manoj Kumar le
183

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

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 cases de version de signature dans la boîte de dialogue Générer l'APK signé d' Android Studio, comme indiqué ici:

entrez la description de l'image ici

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

Paul Ratazzi
la source
5
Vous m'avez sauvé beaucoup de temps. La mise à niveau d'Android Studio a provoqué un cauchemar de problèmes. C'était l'un d'entre eux. Je me demande si SO n'était pas environ plus de la moitié du développement Android serait mort. Android Studio ne donne aucun indice sur les erreurs.
Atul le
4
Heureusement, j'ai testé ma version apk sur un ancien appareil avant de la déployer sur Google Play. Ce serait un désastre si tous les appareils <Android 7.0 échouaient à installer la nouvelle version. Cette chose avec deux versions devrait être un BIG RED POP UP DIALOG lorsque vous cliquez pour créer une version apk!
Kirill Karmazin le
Merci pour cela. Sur le point de devenir fou à la recherche de pourquoi mon APK ne fonctionnerait pas sous Android 7, mais ce n'était qu'une simple case à cocher. Si ennuyant.
japzone
54

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

J'avais ce problème avec 'ant' et c'était à cause de cette ATTENTION 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 changé, vous obligeant à spécifier les algorithmes de signature et de résumé (-sigalg et -digestalg) lorsque vous signez un APK.

J'ai JDK 7. Dans mon journal Ant, j'ai utilisé -v pour verbeux et il 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 l'ai zippé, 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é cette réponse ici.

Comment gérer INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES sans désinstallation

Je n'avais besoin que de le désinstaller et cela a fonctionné!

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

Maintenant, je n'ai plus qu'à modifier le build.xml pour utiliser ces options lors de la signature!

Ok, c'est ici: C: \ Program Files \ 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
la source
3
JDK 7 était aussi mon problème. J'étais paresseux et j'ai désinstallé JDK 7 et installé JDK 6, j'ai également travaillé ^^. Une autre solution de piratage mais moins radicale pourrait être laissée à la fois installée, mais définissez JAVA_HOME sur JDK 6 et placez le chemin bin de JDK 6 en premier dans PATH.
Ixx
1
JDK 8 a le même problème. Changer PATH en JDK 6 a fonctionné. Merci bouée de sauvetage!
Chris Xue
Merci! Mon application de marché a été compilée avec JDK6. Lorsque j'ai compilé l'application avec le keystore de version à l'aide de JDK7 et que j'ai essayé de l'installer, cela m'a posé ce problème.
Sileria
28

La plupart du temps, la solution à cette erreur est vraiment simple:

  1. Désinstaller votre apk
  2. Nettoyez votre projet Android
  3. Construisez votre projet Android
  4. Installez / exécutez votre apk
JanCor
la source
J'ai fait 2,3,4 et j'ai eu la même erreur. Qu'entendez-vous par désinstaller votre apk? Depuis mon appareil? Je ne pense pas que cela ait jamais été sur mon appareil.
Curtis
J'ai soudainement commencé à obtenir cette erreur de rien, aucune si la solution, mais simplement le projet de nettoyage fonctionnait. Merci.
pgcan
18

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

-sigalg MD5withRSA -keyalg RSA -keysize 1024

et en utilisant dans jarsigner

-sigalg MD5withRSA -digestalg SHA1

solution trouvée dans

Quels types de pièges existent pour la signature d'APK Android?

Alejadro Xalabarder
la source
Merci, corrigé le problème pour moi aussi (j'ai JDK 7).
Enrico Ros
Je l'ai corrigé de la même manière, puisque j'utilise appcelerator titanium et que je n'ai pas accès au script de génération apk. Notez que cette solution nécessite la régénération (modification!) De la clé privée.
Federico
8

J'étais également confronté au même problème. J'ai d'abord généré une version en utilisant V2 et l'ai installée sur des appareils mobiles fonctionnant sous OS 5.1 et j'ai eu le même problème. Mais la construction fonctionnait bien sur la tablette fonctionnant sous OS 7.0. J'ai donc généré une version avec la signature V1 Jar et cela fonctionnait bien sur les deux appareils.

Conclusion: si vous prenez en charge l'appareil sous Android OS 7.0. Utilisez la signature jar V1 pour générer la construction.

Rajiv Ranjan
la source
Pas besoin de cocher les deux, sélectionnez V1 si vous supportez OS 7.0 et ci-dessous Vérifiez V2 si vous prenez en charge les périphériques fonctionnant sur 7.0 et plus.
Rajiv Ranjan
7

Dans mon cas, je pourrais créer et exécuter des versions de version, mais j'ai obtenu l' INSTALL_PARSE_FAILED_NO_CERTIFICATESerreur en essayant de faire une version de débogage.

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

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

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

Lorsque vous y êtes invité, entrez ces valeurs:

  • Prénom et nom: Débogage Android
  • Unité organisationnelle: Android
  • Nom de l'organisation: inconnu
  • Ville ou localité: inconnue
  • État ou province: inconnu
  • Code pays: US
Kristopher Johnson
la source
5

C'est une solution moche 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 actuellement de toute façon) et installé JDK 6. Cela a résolu le problème. Une meilleure solution permettrait à fourmi d'utiliser JDK 6 (sans désinstaller 7). Peut-être possible de modifier / 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 faire en sorte que le script ant utilise également JDK 6 ou 5 est probablement une bonne solution.

Ixx
la source
5

C'est parce que la version précédemment générée et la version actuelle ont un conflit dans la version de signature entre v1 (signature jar) et v2 (signature APK complète),

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

Pankaj Kumar
la source
5

Récemment, j'ai eu cette erreur lors de la mise à niveau vers Android Studio 4.0. La cause était que le projet avait la signature V2 désactivée dans la configuration de la connexion build.gradle.

La solution consistait à le supprimer v2SigningEnabled falseou à le définir explicitement true, qui est la valeur par défaut.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}
Mikehc
la source
J'utilise Android Studio 4.0. Mais il n'y a pas une telle chose "v2SigningEnabled" dans mon fichier build.gradle. Alors que dois-je faire?
Nuwan Harshakumara Piyarathna
3

Dans les versions plus récentes d'Android Studio 3.2+, si vous essayez d'exécuter l' releaseinstallation et que vous n'avez défini aucune configuration de signature, il affichera l'invite d'erreur et l'installation échouera. Ce que vous devez faire est d'exécuter la debugcompilation ou de configurer correctement la configuration de signature (V1 ou V2).

Rowland Mtetezi
la source
3

la plupart des réponses sont vraies. et d'autres raisons qui se produisent sont

► votre sdk min est plus petit que le sdk de l'appareil.
► vous avez l'ancienne application dans votre appareil avec le même nom de package

Emre Kilinc Arslan
la source
C'était mon expérience - Le sdk min dans mon projet était plus élevé que le sdk de l'appareil. Cela s'est produit parce que j'ai "manqué" la sélection correcte lorsque je créais le projet dans Android Studio et que j'ai accidentellement sélectionné la version supérieure suivante comme SDK alors que mon ancienne tablette était en cours d'exécution.
GMc
rendre égal mon sdk min et sdk de l'appareil a résolu mon problème.
Nuwan Harshakumara Piyarathna
2

Cela peut se produire si vous essayez d'inclure une .jarbibliothèque contenant un AndroidManifest.xmlfichier.

  • S'il s'agit de Java pur, assurez-vous de ne pas l'inclure dans l'exportation .jar
  • Si ce n'est pas du Java pur (ce qui signifie que c'est un projet Android), vous devez l'inclure en tant que projet de bibliothèque
znat
la source
2

Vous pouvez également vérifier

Project Structure-> Default Config->Signing Config

après avoir ajouté tout ce dont tu as besoin

Morozov
la source
1

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

TN.
la source
0

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

Il prend principalement en compte les derniers fichiers (qui peuvent être des images ou des mises en page ) que vous avez mis. Si vous les supprimez, cela fonctionnera et vous pourrez reconstruire votre projet.

Nelson R.
la source
0

J'avais cette erreur dans ma console Eclipse. Il s'avère que j'avais deux pots avec le même contenu mais des noms différents et ils étaient 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.

joao2fast4u
la source
0

J'obtenais cette erreur parce que j'ai publié que mon ant releaseéchouait parce que je manquais d'espace disque.

Cricket rouge
la source
0

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

James Moore
la source
0

Une autre façon d'obtenir cette erreur consiste à créer à l'aide antde macOS et à disposer d'un fichier d'icône Finder ( Icon\r) dans l'arborescence des sources de l'application. Il semble jarsignerne pas pouvoir faire face au retour chariot dans le nom de fichier et, bien qu'il prétende que la signature est valide si vous-verify utilisez l'APK, il en résulte toujours un APK qui ne sera pas installé sur un appareil. Ironiquement, le plugin Google Drive Finder est une excellente source de fichiers d'icônes Finder.

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

    <exclude name="**/Icon&#13;" />
Poiré
la source
0

Ce problème se produira si vous installez une version non signée d'APK. Vérifiez si vous installez l'APK correct.

NeeK
la source
0

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

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

Michael Maier
la source
0

Cela me lance cette erreur aujourd'hui parce que j'ai une application avec un sdk minimum de 28 et que je suis en train de jouer sur un émulateur avec une version SDK de 23. Habituellement, ce n'est pas possible (car le bouton de lecture est grisé), mais ce n'est pas le cas aujourd'hui beaucoup.

Daniel Wilson
la source
0

Essayez tout d'abord de faire cela:

  • allez dans le script Gradle → bulid.gradle (module: app) → puis vous devez changer la valeur (minSdkVersion). Par exemple, si vous avez utilisé 26, vous pouvez essayer de diminuer la valeur, comme (minSdkVersion 20)
  • puis essayez (synchronisez maintenant).
Ingénieur Ahmed IT
la source
0

Si vous utilisez l'émulateur, essayez de le réinitialiser et si vous désinstallez d'abord l'application sur mobile, désactivez le mode développeur, puis activez-le, le problème sera résolu.

Shashank Pandey
la source