Eroare de instalare: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED? (Programare, Android, Android Manifest, Manifest, Instalare Eșuată)

S.P a intrebat.

Dezvolt o mică aplicație care listează toate aplicațiile prezente/ instalate pe dispozitivul android. Dar primesc eroarea de mai jos în timp ce încerc să execut codul.

Eroare de instalare: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Vă rog să mă ajute cineva să rezolv această eroare.

Comentarii

  • Există multe erori în fișierul manifest.xml care pot cauza acest cod de eroare, consultați răspunsul de mai jos la lista de erori PackageParser.java. –  > Por Ribo.
  • Nu ați acceptat un răspuns? –  > Por shieldgenerator7.
  • Urmați acest link Veți primi răspunsul stackoverflow.com/questions/16015033/… – –  > Por Sritam Jagadev.
  • Verifică acest link pentru un răspuns clar –  > Por Vishnuvathsan.
  • Dacă aveți diferite pachete și clase în proiectul dvs. schimbați numele pachetului de la litere mari la litere mici. numele pachetului ar trebui să înceapă cu litere mici –  > Por Waheed Akhtar.
31 răspunsuri
Andy

Ar putea exista un alt motiv pentru această eroare. Atributul

android:taskAffinity="string" 

ar trebui să înceapă întotdeauna cu un punct, cum ar fi:

android:taskAffinity=".string" 

Comentarii

  • Problema a fost rezolvată pentru mine, dar, unde pot găsi această informație în documentație? nu există nimic despre un PUNCT aici: developer.android.com/guide/topics/manifest/… –  > Por Beto Caldas.
  • mi-ai salvat ziua –  > Por Waldmann.
suresha Chilukuri

Numele activității trebuie să fie prefixat cu „.” în fișierul manifest.

Comentarii

  • în Manifest ați declarat atributul de pachet cu pachet, deci atunci când creați activitatea puneți „.” pentru a fi precedat de numele pachetului, puteți, de asemenea, să introduceți numele complet al activității, cum ar fi : „com.example.test.nume_activitate” sau „.nume_activitate”.  > Por Amt87.
Samuel

Aveam această eroare pentru că aveam majuscule în numele pachetului meu, astfel

Com.Example.packagename

după ce l-am schimbat în ceva de genul

com.example.packagename

s-a rezolvat

Comentarii

  • acest lucru mi-a rezolvat problema. Clasa mea de activitate era sub un pachet care se numea Activities și am adăugat-o la manifest înainte de apariția acestei erori. când am schimbat numele pachetului Activities în activities, s-a rezolvat. Mulțumiri.  > Por alicanbatur.
  • Cred că puteți avea majuscule în numele pachetului, însă, prima literă din numele pachetului nu poate fi o majusculă. Deci, „ActivitateMea” = OK, dar „ActivitateMea”= Nu este OK –  > Por Gene.
Ribo

Codul de eroare INSTALL_PARSE_FAILED_MANIFEST_MALFORMED este returnat de PackageParser.java atunci când detectează una dintre numeroasele erori din fișierul manifest.xml.

Pentru a izola eroarea, căutați în logcat (atunci când executați comanda „adb install foo.apk”). În problema pe care am întâlnit-o eu, logcat conținea:

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

În a patra linie de mai sus, puteți vedea că PackageParser se plânge că linia #214 din fișierul manifest.xml „<provider> nu include atributul authorities”. Vedeți lista de mai jos a tuturor cazurilor din PackageParser care returnează acest cod de eroare. (PackageParser este singura clasă care produce codul de eroare PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)

În cazul meu, mesajul „<provider> does not include authorities attribute” este produs de linia 2490 din PackagerParser.java în funcția parseProvider apelată de parseApplication.


Din versiunea 4.1.1 a frameworks/base/core/java/android/content/pm/PackageParser.java, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED este menționată pe aceste linii în aceste metode. Dacă numărul liniei de cod sursă este urmat de un șir de caractere între ghilimele, acesta este mesajul tipărit în logcat. dacă numărul liniei este urmat de o expresie Java, acesta este codul care a cauzat returnarea codului de eroare, această funcție trebuie investigată pentru a vedea ce a cauzat returnarea mesajului de eroare. În câteva cazuri, nu am putut izola cauza erorii de un apel de metodă specific.

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

Este regretabil faptul că trebuie să vă uitați în logcat și în sursă pentru a afla ce cauzează o problemă.

Comentarii

  • vă mulțumim pentru că ne-ați ajutat să înțelegem cum să rezolvăm problema generală, pe lângă faptul că ați oferit o soluție specifică. –  > Por Vinay W.
  • Există mai multe motive, pentru această excepție. Acesta este cel mai logic răspuns. –  > Por Meghal Shah.
  • Mulțumesc – în cazul meu am avut un IntentFilter.MalformedMimeTypeException care mi-a scăpat. –  > Por CzarMatt.
  • Acesta este de departe răspunsul corect. Cât de util este logcat? –  > Por Krishnabhadra.
Diptendu

Verificați Numele activității în fișierul manifest

sau numele pachetului din activitatea principală/clasa

<activity android_name="MainActivity"></activity>

Dawid Drozd

Am aceeași problemă, dar când apelez procesul astfel:

<service
    android_name="com.dexode.tama.AppService"
    android_process="screen" >
</service>

Când schimb în:

<service
    android_name="com.dexode.tama.AppService"
    android_process=":screen" >
</service>

Totul începe să funcționeze.

Comentarii

  • Prin adăugarea lui „:” ați schimbat semantica codului. În al doilea caz aplicația va crea un nou proces pentru serviciul care este disponibil doar pentru acea aplicație. developer.android.com/guide/topics/manifest/…. În schimb, eroarea poate fi corectată prin menționarea numelui complet al pachetului în loc de doar cuvântul „ecran”. –  > Por shshnk.
4gus71n

M-am lovit de aceeași problemă cu ceva timp în urmă, în android docs au spus că dacă nu folosiți „:” ca prefix în android:process ar trebui să folosiți o literă minusculă, dar nu au spus niciodată că, atunci ar trebui să fie un pachet ca nume de proces, cum ar fi com.company.app.services.MyService

Comentarii

  • Chiar și eu am avut aceeași problemă. Ar fi trebuit să menționeze că trebuie să includem numele pachetului atunci când nu folosim „:” –  > Por shshnk.
user942821

Orice nume, cum ar fi android:name, android:process ar trebui să fie sub formă de nume de pachet: începe cu a..z, se combină cu altele cu ., nu se termină cu .

Comentarii

  • @IgorG. Îmi pare rău că mi-am pierdut punctul de vedere 🙁 Dar noul SDK a eliminat acel câmp (aici). – user942821
  • Vă mulțumim. Am apelat un proces în așa fel: android:process="com.my_pack.services.MyServiceProcess" (com.my_pack.services este pachetul în care se află serviciul meu) și eroarea de instalare nu va mai apărea după aceea. –  > Por Maksim Dmitriev.
Ymabob

Problema mea era că scrisesem (Observați – față de _):

<meta_data ... /> 
<!-- instead of -->
<meta-data ... />

sub o activitate. Aceasta ar putea fi și cauza problemei tale.

bhumika singh

Am primit aceeași eroare!Aveam eticheta de permisiune goală și asta a cauzat problema!

Comentarii

  • Vă rugăm să adăugați mai multe detalii la răspunsul dumneavoastră –  > Por kolossus.
vir us

Am întâmpinat aceeași problemă după ce am adăugat localizări

<manifest xmlns_android="http://schemas.android.com/apk/res/android"
    package="my.package"
    android_versionCode="10"
    android_versionName="@string/version_name" >

Șirul @string/version_name a trecut din greșeală într-unul din noile fișiere de șir de caractere localizate adăugate (a apărut doar în noile fișiere).După ce am verificat toate localizările și am eliminat @string/version_name din fiecare fișier cu excepția eng locale totul a funcționat din nou

Dan Fabulich

Citiți jurnalele dispozitivului Android pentru a diagnostica această eroare. Așteptați-vă la o linie „W/PackageParser” care să explice problema.

Ajvo
<activity/>

trebuie să fie definit ÎNAINTE de

<activity-alias/>

Comentarii

  • Mi-aș dori să pot să votez din nou acest lucru. A doua oară când acest răspuns m-a ajutat –  > Por cottonBallPaws.
Ke Di

Am avut această eroare deoarece codul de mai jos

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

Când am schimbat android:mimeType="*" în android:mimeType="*/*" a reparat această eroare.

Khan

activitatea creată numele folderului trebuie să fie litere mici, Nu folosiți litere mari pentru numele folderului de activitate…. este întotdeauna mai bine să folosiți litere mici.

Diyako

acest lucru poate fi din mai multe motive , dar pentru mine a fost rezolvat prin schimbarea numelui pachetului cu numele minuscul (numele pachetului a fost Activități , rezolvat cu activități) .

Sam

Dacă utilizați multidex în manifest, atunci ar trebui să fie adăugat cu valoare sau resursă. Cum ar fi…

<meta-data android_name="android.support.multidex.MultiDexApplication"
android_value="@string/yourValue" />

SAU

<meta-data android_name="android.support.multidex.MultiDexApplication"
android_resource="@string/yourValue" />

apoi curățați proiectul și reinstalați aplicația.

M.Sameer

În cazul meu, mă refeream la o pictogramă folosind un atribut ca acesta:

<meta-data android_name="com.google.firebase.messaging.default_notification_icon" android_resource="?attr/ic_notify" />

în loc de drawable:

<meta-data android_name="com.google.firebase.messaging.default_notification_icon" android_resource="@drawable/ic_notify" />

Folosesc acest atribut în mai multe locuri, dar se pare că nu funcționează în manifest.

Comentarii

  • Exact cazul meu. Am nevoie ca aceasta să fie de o culoare diferită în funcție de preferințele utilizatorului. Din păcate, android:resource nu acceptă atribute… –  > Por Elyakim Levi.
Harpreet

Creez o nouă aplicație și o direcționez către Android Pie. Totul a fost de lucru bine și bine, apoi în ultima vreme am constatat că aplicația mea nu se instalează la Android Naught și versiunile ulterioare a sistemului de operare Android.

În timpul instalării, văd mesajul de eșec

Instalarea a eșuat cu mesajul INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.

Deci, ce remedieri am făcut sunt următoarele și toate trebuie să fie făcute în AndroidManifest.xml numai în fișier.

Pentru activitate, serviciu, receptor și toate

Instead of:
    android_name=".service.MyService"

Used: 
    android_name="com.complete.appicationID.service.MyService"

Pentru permisiunile Manifestului

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

Acestea au fost toate modificările pe care a trebuit să le efectuez pentru a face să funcționeze și pentru dispozitivele cu versiuni mai mici.

Comentarii

  • În Xamarin android, am reparat atributul Activity Name. Pentru mine, asta a funcționat.  > Por Sovary.
Eugen Pechanec

Țintă <activity> trebuie să fie specificat înainte de <activity-alias>.

m_cheung

Ar putea exista și alte fișiere care sunt malformate, dar care nu sunt evidențiate în IDE, de exemplu res/values/strings la care manifestul poate face referire pentru lucruri precum etichete.

Gena Batsyan

În cazul meu, cauza a fost absența atributului android:name în < activity-alias >. este obligatoriu pentru < activity-alias > deși nu trebuie să numească o clasă existentă. lucru amuzant este – proiectul se compilează fără probleme.

shahensha

Problema mea a fost după cum urmează:

Îmi specificam permisiunile în felul următor și nu funcționa.

<permission android_name="android.permission.INTERNET">
    <meta-data />
</permission>
<permission android_name="android.permission.ACCESS_NETWORK_STATE">
    <meta-data />
</permission>

Funcționa bine când am schimbat-o în felul următor:

<uses-permission android_name="android.permission.INTERNET" />
<uses-permission android_name="android.permission.ACCESS_NETWORK_STATE" />

Swalih

Aveam această eroare pentru că aveam linia de mai jos.

android:protectionLevel="developer"

După ce am schimbat-o în

android:protectionLevel="signature"

problema a fost rezolvată

Ozzz

După ce m-am luptat cu această problemă, am aflat că toate valorile care sunt folosite ca valoare de resursă string (aka @string/) în manifeste (și ale bibliotecilor pe care le folosiți), nu au voie să facă parte din strings.xml al localizărilor. Exemplu: dacă fișierul dvs. manifests utilizează @string/app_name, definiția string/app_name este permisă numai în fișierul values/strings.xml implicit și nu în fișierul alternativ string.xml pe care îl furnizați pentru localizări.Sper că vă ajută…

Mehran Zamani

Am avut aceeași eroare. nu am avut caractere majuscule în numele pachetului/aplicației și am curățat proiectul și alte soluții nu m-au ajutat. după toate acestea am creat un nou proiect și am copiat lucrurile mele în cel nou pas cu pas și am verificat dacă apare problema. după toate acestea am avut un proiect frumos și fără erori fără nici o redundanță. uneori este greu să găsești sursa acestei erori, deci este mai ușor să adopți o altă abordare.

Sper că acest lucru ajută pe cineva!

farhad.kargaran

M-am confruntat cu această eroare când am pus clasa Application într-un pachet greșit!

gadolf

Probabil că nu ați respectat regulile de sintaxă ale unui tag.de exemplu:

<meta-data
      android_name="preloaded_fonts"/>

Acest tag este incomplet și provoacă această eroare.

Prezentare generală a manifestului aplicației

Bibin Johny

Utilizați android:resource în <meta-data> în loc de android:src și android:srcCompat

Ajay Pandya

Știu că este târziu să răspund aici, dar am făcut o greșeală ciudată, așa că postați răspunsul meu dacă ajută pe cineva, în cazul meu, din greșeală, am adăugat activitatea principală de lansare ca alias.

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

Deci, atunci când încerc să ruleze aplicația mea obtinerea de eroare

Eroare în timpul instalării APK

Eșec [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

Tocmai am eliminat cuvântul „-alias” din înregistrarea activității și aplicația mea se lansează cu succes.

Yvgen

În cazul meu cauza a fost cauza:

android:resource="@color/app_green"