Je développe une petite application qui répertorie toutes les applications présentes/installées sur le périphérique Android. Mais je reçois l'erreur ci-dessous pendant que j'essaie d'exécuter le code.
Erreur d'installation: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
S'il vous plaît, quelqu'un peut-il m'aider à résoudre cette erreur?.
Le nom de l'activité doit être précédé de "." dans votre fichier manifeste.
Il pourrait y avoir une autre raison pour cette erreur. L'attribut
Android:taskAffinity="string"
Devrait toujours commencer par un point, comme:
Android:taskAffinity=".string"
J'avais cette erreur parce que j'avais des lettres majuscules dans mon nom de paquet comme celui-ci
Com.Example.packagename
après l'avoir changé pour quelque chose comme
com.example.packagename
c'était résolu
Le code d'erreur INSTALL_PARSE_FAILED_MANIFEST_MALFORMED est renvoyé par PackageParser.Java lorsqu'il détecte un grand nombre d'erreurs dans le fichier manifest.xml.
Pour isoler l'erreur, consultez logcat (lorsque vous exécutez la commande "adb install foo.apk"). Dans le problème que j'ai rencontré, logcat contenait:
W/ActivityManager( 360): No content provider found for permission revoke: file:///data/local/tmp/foo.apk
D/Finsky (32707): [1] PackageVerificationReceiver.onReceive: Verification requested, id = 6
D/Finsky (32707): [1] WorkerTask.onPreExecute: Verification Requested for id = 6, data=file:///data/local/tmp/foo.apk flags=112 fromVerificationActivity=false
W/PackageParser(32707): /data/local/tmp/foo.apk (at Binary XML file line #214): <provider> does not include authorities attribute
D/Finsky (32707): [716] PackageVerificationService.getPackageInfo: Cannot read archive for file:///data/local/tmp/foo.apk in request id=6
D/Finsky (32707): [1] PackageVerificationReceiver.onReceive: Verification requested, id = 6
W/ActivityManager( 360): No content provider found for permission revoke: file:///data/local/tmp/foo.apk
I/PackageManager( 360): Copying native libraries to /data/app-lib/vmdl1205566381
W/PackageParser( 360): /data/app/vmdl1205566381.tmp (at Binary XML file line #214): <provider> does not include authorities attribute
Dans la quatrième ligne ci-dessus, vous pouvez voir que PackageParser se plaint que la ligne # 214 du fichier manifest.xml "<fournisseur> n'inclut pas l'attribut autorités". Consultez la liste ci-dessous de tous les cas dans PackageParser qui retournent ce code d'erreur. (PackageParser est la seule classe qui génère le code d'erreur PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)
Dans mon cas, le message "<fournisseur> n'inclut pas l'attribut autorités" est généré par la ligne 2490 de PackagerParser.Java dans la fonction parseProvider appelée par parseApplication.
A partir de la version 4.1.1 de frameworks/base/core/Java/Android/content/pm/PackageParser.Java, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED est référencé sur ces lignes dans ces méthodes. Si le numéro de ligne du code source est suivi d'une chaîne entre guillemets, c'est-à-dire le message imprimé dans logcat. si le numéro de ligne est suivi d'une expression Java qui est le code à l'origine du renvoi du code d'erreur, cette fonction doit être examinée afin de déterminer la cause du renvoi du message d'erreur. Dans certains cas, je ne pouvais pas isoler la cause de l'erreur en appelant une méthode spécifique.
in parsePackage:
536: (only used in 'core apps' with no 'pkg')
973: "<manifest> has more than one <application>"
1275: "Bad element under <manifest>: " --if RIGID_PARSER
in parsePermissionGroup:
1464: !parsePackageItemInfo(owner, perm.info, outError,
"<permission-group>", sa,
com.Android.internal.R.styleable.AndroidManifestPermissionGroup_name,
com.Android.internal.R.styleable.AndroidManifestPermissionGroup_label,
com.Android.internal.R.styleable.AndroidManifestPermissionGroup_icon,
com.Android.internal.R.styleable.AndroidManifestPermissionGroup_logo)
1482: !parseAllMetaData(res, parser, attrs, "<permission-group>", perm,
outError)
in parsePermission:
1506: !parsePackageItemInfo(owner, perm.info, outError,
"<permission>", sa,
com.Android.internal.R.styleable.AndroidManifestPermission_name,
com.Android.internal.R.styleable.AndroidManifestPermission_label,
com.Android.internal.R.styleable.AndroidManifestPermission_icon,
com.Android.internal.R.styleable.AndroidManifestPermission_logo)
1530: "<permission> does not specify protectionLevel"
1541: "<permission> protectionLevel specifies a flag but is not based on signature type"
1548: !parseAllMetaData(res, parser, attrs, "<permission>", perm, outError)
in parsePersmissionTree:
1572: !parsePackageItemInfo(owner, perm.info, outError,
"<permission-tree>", sa,
com.Android.internal.R.styleable.AndroidManifestPermissionTree_name,
com.Android.internal.R.styleable.AndroidManifestPermissionTree_label,
com.Android.internal.R.styleable.AndroidManifestPermissionTree_icon,
com.Android.internal.R.styleable.AndroidManifestPermissionTree_logo)
1585: "<permission-tree> name has less than three segments: "+perm.info.name
1595: !parseAllMetaData(res, parser, attrs, "<permission-tree>", perm, outError)
in parseInstrumentation:
1625: new Instrumentation(mParseInstrumentationArgs, new InstrumentationInfo())
1648: "<instrumentation> does not specify targetPackage"
1654: !parseAllMetaData(res, parser, attrs, "<instrumentation>", a, outError)
in parseApplication:
1678: buildClassName(pkgName, name, outError) == null
1851: (Set by various other functions)
1869: parseActivity(owner, res, parser, attrs, flags, outError, false, hardwareAccelerated) == null
1878: parseActivity(owner, res, parser, attrs, flags, outError, true, false) == null
1887: parseService(owner, res, parser, attrs, flags, outError) == null
1896: parseProvider(owner, res, parser, attrs, flags, outError) == null
2484: "Heavy-weight applications can not have providers in main process"
2890: "<provider> does not incude authorities attribute"
1905: parseActivityAlias(owner, res, parser, attrs, flags, outError) == null
1917: parseMetaData(res, parser, attrs, owner.mAppMetaData, outError) == null
1969: "Bad element under <application>: "+tagName
Il est regrettable que vous deviez fouiller dans logcat et la source pour déterminer la cause d'un problème.
Vérifiez votre Nom de l'activité dans le fichier manifeste
ou le nom du package dans l'activité principale/la classe
<activity Android:name="MainActivity"></activity>
J'ai le même problème mais quand j'appelle un processus comme celui-ci:
<service
Android:name="com.dexode.tama.AppService"
Android:process="screen" >
</service>
Quand je change pour:
<service
Android:name="com.dexode.tama.AppService"
Android:process=":screen" >
</service>
Tout commence à fonctionner.
J'ai rencontré le même problème il y a longtemps, dans le Android docs ils disaient que si vous n'utilisez pas ":" comme préfixe dans Android:process
vous devriez utiliser une lettre minuscule, mais ils ne l’ont jamais dit, alors cela devrait être un paquetage comme nom de processus, comme com.company.app.services.MyService
N'importe quel nom tel que Android:name
, Android:process
devrait être sous la forme du nom du paquet: commence par a..z
, se combine avec les autres avec .
, ne finissez pas par .
...
Mon problème était que j'avais écrit (Notez le - vs le _):
<meta_data ... />
<!-- instead of -->
<meta-data ... />
sous une activité. Cela pourrait aussi être la cause de votre problème.
Je rencontre le même problème après avoir ajouté des localisations
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="my.package"
Android:versionCode="10"
Android:versionName="@string/version_name" >
La chaîne @string/version_name
est passé accidentellement dans l’un des nouveaux fichiers chaîne localisés ajoutés (il n’apparaissait que dans les nouveaux fichiers). Après vérification de toutes les localisations et suppression de @string/version_name
de tous les fichiers sauf eng locale, tout a encore fonctionné
Vous avez la même erreur! avait une étiquette d'autorisation vide et cela causait le problème!
<activity/>
doit être défini AVANT
<activity-alias/>
J'ai eu cette erreur parce que le code ci-dessous
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<data Android:mimeType="*" Android:Host="*" Android:scheme="content" />
</intent-filter>
Quand j'ai changé Android:mimeType="*"
à Android:mimeType="*/*"
corrigé cette erreur.
Consultez votre journal de périphérique Android pour diagnostiquer cette erreur. Attendez-vous à une ligne "W/PackageParser" expliquant le problème.
le dossier de noms créé par l'activité doit être composé de lettres minuscules, n'utilisez pas de lettres majuscules pour le nom du dossier d'activité ... il est toujours préférable d'utiliser des lettres minuscules.
Dans mon cas, je faisais référence à une icône utilisant un attribut comme celui-ci:
<meta-data Android:name="com.google.firebase.messaging.default_notification_icon" Android:resource="?attr/ic_notify" />
au lieu du drawable:
<meta-data Android:name="com.google.firebase.messaging.default_notification_icon" Android:resource="@drawable/ic_notify" />
J'utilise cet attribut à plusieurs endroits, mais il semble que cela ne fonctionne pas dans manifest.
<activity-alias>
cible <activity>
doit être spécifié avant l'alias.
Si vous utilisez multidex dans manifest, vous devez l'ajouter avec une valeur ou une ressource. Comme..
<meta-data Android:name="Android.support.multidex.MultiDexApplication"
Android:value="@string/yourValue" />
OR
<meta-data Android:name="Android.support.multidex.MultiDexApplication"
Android:resource="@string/yourValue" />
puis nettoyez le projet et réinstallez l'application.
Utilisation Android:resource
dans <meta-data>
au lieu de Android:src
et Android:srcCompat
Je sais qu'il est tard pour répondre ici, mais je fais une erreur étrange, alors postez ma réponse si cela aide quelqu'un. Dans mon cas, par erreur, j'ai ajouté l'activité principale du lanceur comme pseudonyme.
<activity-alias
Android:name=".activities.SplashActivity"
Android:targetActivity=".activities.SplashActivity">
<intent-filter>
<action Android:name="Android.intent.action.MAIN"/>
<category Android:name="Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
Alors, quand j'essaie d'exécuter mon application en obtenant une erreur
Erreur lors de l'installation de APK
Échec [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]
Je supprime simplement "-alias" Word de l'enregistrement de l'activité et le lancement de mon application a réussi.
Dans mon cas, la cause était l'absence d'Android: attribut name dans <alias-activité>. Il est obligatoire pour <activity-alias> bien qu'il ne doive pas nommer une classe existante. Ce qui est drôle, c'est que le projet se compile sans problèmes.
J'ai eu la même erreur. Je n'avais pas de caractère majuscule dans mon nom de paquet/application et nettoyais le projet et d'autres solutions ne m'ont pas non plus aidé. Après tout, j'ai créé un nouveau projet et copié mon contenu dans le nouveau, étape par étape, et vérifier si le problème se présente. après tout, j’ai eu un projet agréable et sans erreur, sans aucune redondance. Parfois, il est difficile de trouver la source de cette erreur, il est donc plus facile d'adopter une autre approche.
j'espère que cela aide quelqu'un!
Mon problème était comme suit:
Je spécifiais mes autorisations de la manière suivante et cela ne fonctionnait pas.
<permission Android:name="Android.permission.INTERNET">
<meta-data />
</permission>
<permission Android:name="Android.permission.ACCESS_NETWORK_STATE">
<meta-data />
</permission>
Cela fonctionnait bien quand je l'ai changé pour être comme suit:
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Je crée une nouvelle application et la cible pour Android Pie. Tout fonctionnait bien et bien ces derniers temps, j’ai constaté que mon application ne s’installe pas sur Android Naught et sous la version de Android OS.
Pendant l'installation, je vois un message d'échec
L'installation a échoué avec le message INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.
Donc, quels correctifs que j'ai faits sont les suivants et ils doivent tous être faits en AndroidManifest.xml
fichier seulement.
Pour activité, service, récepteur et tout
Instead of:
Android:name=".service.MyService"
Used:
Android:name="com.complete.appicationID.service.MyService"
Pour les autorisations Manifest
Instead of:
<uses-permission Android:name="{applicationId}.permission.MAPS_RECEIVE" />
<permission
Android:name="{applicationId}.permission.MAPS_RECEIVE"
Android:protectionLevel="signature" />
Used:
<uses-permission Android:name="com.complete.appicationID.permission.MAPS_RECEIVE" />
<permission
Android:name="com.complete.appicationID.permission.MAPS_RECEIVE"
Android:protectionLevel="signature" />
C’est tous ces changements que j’ai dû effectuer pour que cela fonctionne également pour les périphériques de version inférieure.
Après avoir lutté contre ce problème, j’ai découvert que toutes les valeurs utilisées comme valeur de ressource de chaîne (@ string /) dans les manifestes (des bibliothèques que vous utilisez aussi) ne sont pas autorisées à faire partie de strings.xml des localisations. . Exemple: si votre fichier de manifeste utilise @ string/app_name, la définition de string/app_name n'est autorisée que dans votre valeur par défaut/strings.xml et non dans le fichier alternatif string.xml que vous indiquez pour les localisations. J'espère que ça aide ..
Vous n'avez probablement pas suivi les règles de syntaxe d'une balise. par exemple:
<meta-data
Android:name="preloaded_fonts"/>
Cette balise est incomplète et provoque cette erreur.
J'avais cette erreur parce que j'avais la ligne ci-dessous.
Android:protectionLevel="developer"
Après l'avoir changé en
Android:protectionLevel="signature"
problème a été résolu
J'ai rencontré cette erreur lorsque j'ai mis la classe Application dans un mauvais package!
Il se peut que d’autres fichiers soient mal formés mais ne soient pas mis en évidence dans l’EDI, par exemple les res/values / chaînes que le manifeste peut référencer pour des éléments tels que les libellés.