QU'est-ce que INSTALL PARSE a échoué sans erreur de certificats?
j'essayais de changer mon activité par défaut/main/startup (quel que soit son nom) en éditant le fichier androidmanifest.xml
. Tout ce que j'ai fait, c'est changer la propriété android:name
. cependant, cela a complètement cassé l'application entière. quand j'essaie d'installer, il ne fonctionne pas 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 le même erreur... Qu'ai-je fait?
15 réponses
avez-vous édité le AndroidManifest.xml
directement dans le fichier .apk
? Si oui, cela ne marchera pas.
chaque Android .apk
doit être signé si elle doit être installée sur un téléphone , même si vous n'installez pas à travers le marché. 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 ce est donc un dispositif peut dire si un .apk
est une mise à niveau valide pour une application installée, car si c'est les Certificats seront les mêmes.
Donc, si vous apportez des modifications à votre application, vous aurez besoin de reconstruire le .apk
de sorte qu'il devient signé correctement.
j'ai trouvé que cette erreur peut maintenant se produire aussi en utilisant la 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 le JAR, comme le fait le schéma V1. Si vous signez avec seulement V2, et tentez d'installer sur une cible pre-7.0, vous obtiendrez cette erreur puisque les bocaux eux-mêmes ne sont pas signés et le pré-7.0 PackageManager ne détecte pas 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 boîtes de version de signature dans générer signé APK dialogue comme montré ici:
si seulement 7.0 cibles sont prévues, il n'est pas nécessaire d'inclure la signature V1.
j'ai trouvé que c'était causé par ma version JDK.
j'avais ce problème avec 'ant' et c'était dû à cette mise en garde mentionnée dans la documentation:
http://developer.android.com/guide/publishing/app-signing.html#signapp
attention: à partir de JDK 7, la signature par défaut algorithim a changé, vous demandant de spécifier la signature et de digérer algorithims (- sigalg et - digestalg) quand vous signez un APK.
j'ai JDK 7. Dans mon livre de fourmi, j'ai utilisé-v pour verbose 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 bocal manuellement et l'ai zipaligné, mais il 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é la réponse ici.
Comment faire avec INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES sans désinstallation parce que
j'avais seulement besoin de le désinstaller et puis ça a marché!
$ 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 besoin que de modifier la construction.xml pour utiliser ces options lors de la signature!
Ok voici: C:\Program fichiers\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}" />
résolu (pour moi) en utilisant dans un clavier l'args
-sigalg MD5withRSA -keyalg RSA -keysize 1024
et en utilisant dans jarsigner
-sigalg MD5withRSA -digestalg SHA1
solution trouvée dans
la plupart du temps, la solution pour cette erreur est vraiment simple:
- désinstallez votre apk
- nettoyer votre projet Android
- construire votre projet Android
- Installer / exécuter votre apk
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) et installé JDK 6. Qu'il fixe. Une meilleure solution rendrait ant uses JDK 6 (sans désinstaller 7). Peut-être possible Modifier / définir cette propriété:
de java.bibliothèque.chemin
dans local.fichier de propriétés. C'est dans le répertoire du projet (racine).
Android ne fonctionne pas avec JDK 7 de toute façon (seulement 6 ou 5), donc faire que le script ant utilise également JDK 6 ou 5 est probablement une bonne solution.
dans mon cas, je pouvais compiler et exécuter des compilations, mais j'ai eu l'erreur INSTALL_PARSE_FAILED_NO_CERTIFICATES
en essayant de faire une compilation de débogage.
la solution était de supprimer mon fichier debug.keystore
et laisser ADT le recréer. Il avait apparemment expiré.
une meilleure solution à long terme est de 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
entrez ces valeurs:
- prénom et nom de famille: Android Debug
- unité organisationnelle: Android
- nom de l'organisation: inconnu
- ville ou localité: inconnu
- État ou Province: inconnu
- code de pays: US
Réglage de la variable d'environnement JAVA_HOME
pour JDK 5 ou 6 (au lieu de JDK 7) correction de l'erreur.
cela pourrait se produire si vous essayez d'inclure une bibliothèque .jar
qui contient un fichier AndroidManifest.xml
.
- si C'est du pur Java, assurez-vous de ne pas l'inclure dans le .pot d'exportation
- si ce N'est pas du pur Java (ce qui signifie que c'est un projet Android) alors vous devez l'inclure comme un projet de bibliothèque
Its parce qu'il y a un conflit dans la version signature entre v1 (signature jar) et v2(signature APK complète),
Pour corriger tique signature de la version en vertu de Générer Signé APK boîte de dialogue
après un certain temps et de multiples threads en ligne sur le sujet, j'ai réussi à corriger mon projet.
c'est principalement en prenant en considération les derniers fichiers ( pourrait être des images ou des layouts ) que vous mettez en. Si vous les supprimez, cela marchera, et vous pourrez reconstruire votre projet à nouveau.
j'avais cette erreur dans ma Console Eclipse. Il s'avère que j'avais deux bocaux avec le même contenu mais des noms différents et ils étaient en conflit l'un avec l'autre. Je viens d'en supprimer un et j'ai réussi à installer l'application sur l'appareil.
j'ai eu cette erreur parce que j'ai publié que mon ant release
était en panne parce que je n'avais plus d'espace disque.
j'ai eu cette erreur quand j'ai essayé d'installer un projet Xamarin construit contre Android n preview sur un téléphone tournant api v23. La Solution est de ne pas faire ça.
une autre façon d'obtenir cette erreur est de construire en utilisant ant
sur macOS et avoir un fichier d'icône de Finder ( Icon\r
) dans l'arbre des sources de l'application. Il apparaît jarsigner
ne peut pas faire face au retour de chariot dans le nom de fichier et, bien qu'il va prétendre que la signature est valide si vous -verify
L'APK, il en résulte toujours un APK qui ne sera pas installer sur un appareil. Ironiquement, le plugin Google Drive Finder est une excellente source de fichiers d'icônes de Finder.
le la solution est d'exclure les fichiers offensants (qui sont inutiles dans L'APK de toute façon) avec un spécificateur comme celui-ci dans le fileset
:
<exclude name="**/Icon " />