web-dev-qa-db-fra.com

Erreur d'installation: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

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?.

83
S.P

Le nom de l'activité doit être précédé de "." dans votre fichier manifeste.

66
suresha Chilukuri

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" 
64
Andy

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

39
Samuel

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.

27
Ribo

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>
9
Diptendu

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.

9
Dawid Drozd

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

8
4gus71n

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 ....

7
user942821

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.

7
Ymabob

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é

2
vir us

Vous avez la même erreur! avait une étiquette d'autorisation vide et cela causait le problème!

2
bhumika singh
<activity/>

doit être défini AVANT

<activity-alias/>
2
Ajvo

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.

2
Ke Di

Consultez votre journal de périphérique Android pour diagnostiquer cette erreur. Attendez-vous à une ligne "W/PackageParser" expliquant le problème.

2
Dan Fabulich

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.

1
Khan

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.

1
M.Sameer

<activity-alias> cible <activity> doit être spécifié avant l'alias.

1
Eugen Pechanec

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.

1
Sam

Utilisation Android:resource dans <meta-data> au lieu de Android:src et Android:srcCompat

0
Bibin Johny

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.

0
Ajay Pandya

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.

0
Gena Batsyan

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!

0
Mehran Zamani

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" />
0
shahensha

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.

0
Harpreet

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 ..

0
Ozzz

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.

Aperçu du manifeste de l'application

0
gadolf

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

0
Swalih

J'ai rencontré cette erreur lorsque j'ai mis la classe Application dans un mauvais package!

0
farhad.kargaran

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.

0
m_cheung