स्थापना त्रुटि: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?


93

मैं एक छोटा एप्लिकेशन विकसित कर रहा हूं जो एंड्रॉइड डिवाइस पर मौजूद / इंस्टॉल किए गए सभी एप्लिकेशन को सूचीबद्ध करता है। लेकिन मैं नीचे त्रुटि हो रही है, जबकि मैं कोड चलाने की कोशिश कर रहा हूँ।

स्थापना त्रुटि: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

कृपया कोई भी इस त्रुटि को सुलझाने में मेरी मदद कर सकता है।


1
मैनिफ़ेस्ट.xml फ़ाइल में कई त्रुटियां हैं जो इस त्रुटि कोड का कारण बन सकती हैं, नीचे पैकेजपर्सर.जावा त्रुटि सूची उत्तर देखें।
रिबो सिप

1
आपने एक उत्तर स्वीकार नहीं किया?
ढालगेंटर 7

इस लिंक का पालन करें आप अपने जवाब stackoverflow.com/questions/16015033/…
श्रीतम जगदेव

एक स्पष्ट उत्तर के लिए इस लिंक की जाँच करें
विष्णुवथसन

यदि आपकी परियोजना में अलग-अलग पैकेज और कक्षाएं हैं। ऊपरी अक्षरों से निचले अक्षरों तक पैकेज नाम।
वहीद अख्तर

जवाबों:


79

इस त्रुटि का एक और कारण हो सकता है। विशेषता है

android:taskAffinity="string" 

हमेशा डॉट के साथ शुरू करना चाहिए, जैसे:

android:taskAffinity=".string" 

4
मेरे लिए समस्या हल हो गई है, लेकिन मैं प्रलेखन में यह जानकारी कहां पा सकता हूं? यहाँ DOT के बारे में कुछ भी नहीं है: developer.android.com/guide/topics/manifest/…
Beto Caldas

68

गतिविधि का नाम "" के साथ उपसर्ग होना चाहिए। आपके मैनिफ़ेस्ट फ़ाइल में।


मेनिफेस्ट में आपने पैकेज के साथ पैकेज विशेषता घोषित की है, इसलिए जब आप गतिविधि डालते हैं तो आप "।" पैकेज नाम से पहले, आप गतिविधि का पूरा नाम भी टाइप कर सकते हैं जैसे: "com.example.test.Activity_Name", या "
.Activity_Name

42

मुझे यह त्रुटि हो रही थी क्योंकि मेरे पास मेरे पैकेज के नाम में इस तरह से बड़े अक्षर थे

Com.Example.packagename

बाद मैंने इसे कुछ इस तरह बदल दिया था

com.example.packagename

इसे हल किया गया था


इससे मेरी समस्या हल हो गई। मेरी गतिविधि कक्षा एक पैकेज के तहत थी जिसे गतिविधियाँ कहा जाता है, और मैं इस त्रुटि के प्रकट होने से पहले इसे प्रकट करने के लिए जोड़ता हूं। जब मैंने एक्टिविटी पैकेज नाम को गतिविधियों में बदल दिया, तो यह हल हो गया। धन्यवाद
alicanbatur

2
मुझे लगता है कि आपके पास पैकेज के नाम में बड़े अक्षर हो सकते हैं, हालांकि, पैकेज के नाम का पहला अक्षर कैपिटल लेटर नहीं हो सकता है। तो "myActivity" = OK लेकिन "MyActivity" = Not OK
जीन

29

INSTALL_PARSE_FAILED_MANIFEST_MALFORMED त्रुटि कोड PackageParser.java द्वारा लौटाया जाता है जब वह मैनिफ़ेस्ट.xml फ़ाइल में बड़ी संख्या में त्रुटियों का पता लगाता है।

त्रुटि को अलग करने के लिए, logcat में देखें (जब आप 'adb install foo.apk' कमांड करते हैं)। जिस समस्या का मुझे सामना करना पड़ा, उसमें logcat समाहित था:

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

ऊपर की चौथी पंक्ति में, आप देख सकते हैं कि PackageParser मेनिफ़ेस्ट #xml फ़ाइल की उस लाइन # 214 पर शिकायत करता है "<प्रदाता> में प्राधिकरण विशेषता शामिल नहीं है" । PackageParser में सभी मामलों के नीचे लिस्टिंग देखें जो उस त्रुटि कोड को लौटाता है। (PackageParser एकमात्र ऐसा वर्ग है जो PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED त्रुटि कोड का उत्पादन करता है)

मेरे मामले में संदेश "<प्रदाता> में अधिकारियों की विशेषता शामिल नहीं है" पैसेपोराइडर फ़ंक्शन द्वारा parseApplication द्वारा कहा गया ParseProvider फ़ंक्शन में PackagerParser.java की लाइन 2490 द्वारा निर्मित है।


4.1.1 संस्करण से चौखटे / आधार / कोर / जावा / Android / सामग्री / दोपहर / PackageParser.java, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED को इन विधियों में इन पंक्तियों पर संदर्भित किया जाता है। यदि स्रोत कोड लाइन संख्या एक उद्धृत स्ट्रिंग के बाद होती है जो लॉगकैट में मुद्रित संदेश है। यदि पंक्ति संख्या एक जावा एक्सप्रेशन के बाद है जो कि कोड है जो उस त्रुटि कोड को वापस करता है, तो उस फ़ंक्शन को यह देखने के लिए जांचना चाहिए कि त्रुटि संदेश किस कारण से लौटा है। कुछ मामलों में मैं एक विशिष्ट विधि कॉल के कारण त्रुटि को अलग नहीं कर सका।

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

यह अफसोस की बात है कि आपको लॉगकैट में चारों ओर प्रहार करना पड़ता है और यह पता लगाने के लिए कि समस्या क्या होती है।


1
एक विशिष्ट समाधान देने के अलावा सामान्य समस्या को हल करने के तरीके को समझने में हमारी मदद करने के लिए धन्यवाद।
विनय डब्ल्यू

1
इस अपवाद के कई कारण हैं। यह सबसे तार्किक उत्तर है।
मेघल शाह

1
धन्यवाद - मेरे मामले में IntentFilter.MalformedMimeTypeExceptionमुझे याद था कि मैं चूक गया था।
CzarMatt

यह अब तक सही जवाब है। लॉगकट कितना उपयोगी है?
कृष्णभद्र

10

मेनिफ़ेस्ट फ़ाइल में अपना गतिविधि नाम जांचें

या मुख्य गतिविधि / कक्षा में पैकेज का नाम

<activity android:name="MainActivity"></activity>

10

मेरे पास एक ही मुद्दा है लेकिन जब मैं इस तरह की प्रक्रिया को कॉल करता हूं:

<service
    android:name="com.dexode.tama.AppService"
    android:process="screen" >
</service>

जब मैं इसे बदलूं:

<service
    android:name="com.dexode.tama.AppService"
    android:process=":screen" >
</service>

सब कुछ काम करने लगता है।


2
':' को जोड़कर आपने कोड के शब्दार्थ को बदल दिया। दूसरे मामले में आवेदन सेवा के लिए एक नई प्रक्रिया बनाएगा जो केवल उस आवेदन के लिए उपलब्ध है। डेवलपर .android.com/guide/topics/manifest/… । इसके बजाय केवल 'स्क्रीन' शब्द के बजाय पूर्ण पैकेज नाम का उल्लेख करके त्रुटि को ठीक किया जा सकता है।
शशांक

10

मैं एक ही समस्या में समय से पहले भागा था, एंड्रॉइड डॉक्स में उन्होंने कहा था कि यदि आप उपयोग नहीं करते हैं ":" जैसा कि android:processआप में उपसर्ग कम केस लेटर का उपयोग करना चाहिए, लेकिन उन्होंने कभी ऐसा नहीं कहा, तो यह प्रक्रिया जैसा पैकेज होना चाहिए नाम, जैसेcom.company.app.services.MyService


1
यहां तक ​​कि मुझे भी यही समस्या थी। उन्होंने उल्लेख किया है कि हमें '': 'का उपयोग नहीं करने के लिए पैकेज का नाम शामिल करना चाहिए
shshnk

8

किसी भी नाम जैसे android:name, android:processपैकेज के नाम के रूप में होना चाहिए: के साथ शुरू होता है a..z, दूसरों के साथ संयोजन करता है ., के साथ समाप्त नहीं होता है ....


@IgorG। क्षमा करें, मैंने अपनी बात खो दी है :-( लेकिन नए एसडीके ने उस क्षेत्र ( यहां ) को हटा दिया ।

1
धन्यवाद। मैंने एक प्रक्रिया को इस तरह से बुलाया: android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services वह पैकेज है जहां मेरी सेवा है) और स्थापना त्रुटि उसके बाद दिखाई नहीं देगी।
मक्सिम दिमित्री

8

मेरा मुद्दा यह था कि मैंने लिखा था (ध्यान दें - बनाम द _):

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

एक गतिविधि के तहत। यह आपके मुद्दे का कारण भी हो सकता है।



3

मैं स्थानीयकरणों को जोड़ने के बाद उसी समस्या में चलता हूं

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.package"
    android:versionCode="10"
    android:versionName="@string/version_name" >

स्ट्रिंग @string/version_nameगलती से नए जोड़े गए स्थानीय स्ट्रिंग-फ़ाइल में से एक में पारित हो गया (यह केवल नई फ़ाइलों में दिखाई दिया)। सभी स्थानीयकरणों की जाँच करने और @string/version_nameप्रत्येक फ़ाइल से हटाए जाने के बाद, सब कुछ फिर से काम करने के अलावा


3

इस त्रुटि का निदान करने के लिए अपने Android डिवाइस लॉग पढ़ें। समस्या की व्याख्या करने वाली "W / PackageParser" लाइन की अपेक्षा करें।


3
<activity/>

पहले परिभाषित किया जाना चाहिए

<activity-alias/>

काश मैं इसे फिर से बढ़ा सकता। दूसरी बार इस जवाब ने मेरी मदद की है
कपासनबॉल्स

3

मेरे पास यह त्रुटि थी क्योंकि नीचे दिया गया कोड

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

जब मैं इस त्रुटि android:mimeType="*"को बदल दिया android:mimeType="*/*"


3

एक्टिविटी क्रिएट नेम फोल्डर छोटे अक्षर होने चाहिए, एक्टिविटी फोल्डर के नाम के लिए कैपिटल लेटर्स का उपयोग न करें .... यह हमेशा छोटे अक्षरों का उपयोग करने के लिए बेहतर होता है।


3

यह कई कारणों से हो सकता है, लेकिन मेरे लिए यह लोअरकेस नाम के साथ पैकेज का नाम बदलकर हल किया गया था (पैकेज का नाम गतिविधियों था, गतिविधियों से हल किया गया था)।


2

यदि आप प्रकट में मल्टीडेक्स का उपयोग कर रहे हैं तो इसे मूल्य या संसाधन के साथ जोड़ा जाना चाहिए। पसंद..

<meta-data android:name="android.support.multidex.MultiDexApplication"
android:value="@string/yourValue" />

या

<meta-data android:name="android.support.multidex.MultiDexApplication"
android:resource="@string/yourValue" />

फिर प्रोजेक्ट को साफ़ करें और ऐप को फिर से इंस्टॉल करें।


2

मेरे मामले में मैं इस तरह की विशेषता का उपयोग करते हुए एक आइकन की बात कर रहा था:

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="?attr/ic_notify" />

ड्रा करने योग्य के बजाय:

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_notify" />

मैं कई स्थानों पर इस विशेषता का उपयोग कर रहा हूं, लेकिन ऐसा लगता है कि यह प्रकट रूप में काम नहीं करता है।


बिल्कुल मेरा मामला। मुझे उपयोगकर्ता की वरीयताओं के आधार पर एक अलग रंग होना चाहिए। अफसोस की बात है कि, एंड्रॉइड: संसाधन विशेषताओं को स्वीकार नहीं करता है ...
एलाकिम लेवी

2

मैं एक नया एप्लिकेशन बनाता हूं और इसे Android Pie पर लक्षित करता हूं । सब कुछ अच्छी तरह से और अच्छा काम कर रहा था, हाल ही में मैंने पाया कि मेरा आवेदन एंड्रॉइड नूगा और एंड्रॉइड ओएस के नीचे के संस्करण में स्थापित नहीं है ।

स्थापित करते समय, मुझे विफलता संदेश दिखाई देता है

संदेश INSTALL_PARSE_FAILED_MANIFEST_MALFORMED के साथ स्थापना विफल रही।

तो जो सुधार मैंने किए हैं, वे इस प्रकार हैं और इन सभी को AndroidManifest.xmlकेवल फ़ाइल में करने की आवश्यकता है ।

गतिविधि, सेवा, रिसीवर और सभी के लिए

Instead of:
    android:name=".service.MyService"

Used: 
    android:name="com.complete.appicationID.service.MyService"

प्रकट अनुमति के लिए

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

यह सभी बदलाव थे जो मुझे कम संस्करण वाले उपकरणों के लिए भी काम करने के लिए करने थे।


गतिविधि नाम विशेषता पर तय Xamarin Android में। यह मेरे लिए काम कर रहा है
सोवेरी


1

ऐसी अन्य फाइलें हो सकती हैं जो विकृत हैं, लेकिन IDE में हाइलाइट नहीं की गई हैं, उदाहरण के लिए Res / मान / स्ट्रिंग्स, जो प्रकट हो सकता है जैसे कि लेबल जैसी चीजों के लिए संदर्भ।


1

मेरे मामले में इसका कारण एंड्रॉइड की अनुपस्थिति थी: <गतिविधि-उपनाम में नाम विशेषता। यह <गतिविधि-उर्फ> के लिए अनिवार्य है, हालांकि इसमें एक मौजूदा वर्ग का नाम नहीं होना चाहिए। मजेदार बात है - परियोजना समस्याओं के बिना संकलित है।


1

मेरी समस्या इस प्रकार थी:

मैं निम्नलिखित तरीके से अपनी अनुमति निर्दिष्ट कर रहा था और यह काम नहीं कर रहा था।

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

जब मैं इसे निम्नानुसार बदल रहा था तो यह ठीक काम कर रहा था:

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

1

मुझे यह त्रुटि आ रही थी क्योंकि मेरे पास नीचे की रेखा थी।

android:protectionLevel="developer"

के बाद मैंने इसे बदल दिया है

android:protectionLevel="signature"

समस्या हल हो गई थी


1

इस मुद्दे से जूझने के बाद मुझे पता चला कि वे सभी मूल्य जो स्ट्रिंग रिसोर्स वैल्यू (उर्फ @ स्ट्रिंग /) के रूप में मैनिफ़ेस्ट में उपयोग किए जा रहे हैं (आपके द्वारा उपयोग किए जा रहे पुस्तकालयों के), स्ट्रिंग्स का हिस्सा बनने की अनुमति नहीं है। । उदाहरण: यदि आपका मैनिफ़ेस्ट @ स्ट्रिंग / app_name का उपयोग करके फ़ाइल करता है, तो स्ट्रिंग / app_name की परिभाषा को केवल आपके डिफ़ॉल्ट मानों / स्ट्रिंग्स.xml में अनुमति दी जाती है, न कि वैकल्पिक string.xml फ़ाइल में, जो आप स्थानीयकरणों के लिए प्रदान करते हैं। मुझे आशा है कि वह मदद करेंगे..


1

मेरी वही त्रुटि थी। मेरे पैकेज / एप्लिकेशन नाम में अपरकेस चरित्र नहीं था और परियोजना को साफ करना और अन्य समाधानों ने भी मेरी मदद नहीं की। आखिरकार मैंने नया प्रोजेक्ट बनाया और स्टेप बाय स्टेप अपने सामान को कॉपी किया और जाँच की कि क्या समस्या है। आखिरकार मेरे पास बिना किसी अतिरेक के एक अच्छी और त्रुटि मुक्त परियोजना थी। कभी-कभी इस त्रुटि का स्रोत ढूंढना कठिन होता है इसलिए दूसरा तरीका अपनाना आसान होता है।

मुझे आशा है कि यह किसी की मदद करता है!


1

मुझे इस त्रुटि का सामना करना पड़ा जब मैंने एक गलत पैकेज में एप्लिकेशन क्लास लगाई!


1

आपने शायद किसी टैग के वाक्यविन्यास नियमों का पालन नहीं किया है। उदाहरण के लिए:

<meta-data
      android:name="preloaded_fonts"/>

यह टैग अधूरा है और इस त्रुटि का कारण बनता है।

ऐप मैनिफेस्ट अवलोकन



1

मुझे पता है कि यहाँ जवाब देने की देर है लेकिन मैं अजीब गलती करता हूँ इसलिए अपना जवाब पोस्ट करें अगर यह किसी की मदद करता है, तो गलती से मेरे मामले में मैंने मुख्य लांचर गतिविधि को उपनाम के रूप में जोड़ा

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

जब मैं अपने ऐप को एरर देने की कोशिश करता हूं

एपीके इंस्टॉल करते समय त्रुटि

विफलता [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

मैं सिर्फ गतिविधि पंजीकरण और मेरे ऐप लॉन्च से "-लियास" शब्द को सफलतापूर्वक हटा देता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.