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?
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é.
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:
Si seules les cibles 7.0 sont prévues, il n'est pas nécessaire d'inclure la signature V1.
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}" />
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
La plupart du temps, la solution à cette erreur est très simple:
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.
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:
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é
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.
Cela peut se produire si vous essayez d'inclure une bibliothèque .jar
contenant un fichier AndroidManifest.xml
.
La définition de la variable d’environnement Java_HOME
sur JDK 5 ou 6 (au lieu de JDK 7) a corrigé l’erreur.
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 " />
J'avais cette erreur parce que j'ai publié que mon ant release
échouait parce que je n'avais plus d'espace disque.
Ce problème se produira si vous installez une version non signée de l'APK. Vérifiez si vous êtes installé correctement APK.
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).
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.
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.
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.
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.