Yükleme hatası: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?


96

Android cihazda bulunan / yüklü tüm uygulamaları listeleyen küçük bir uygulama geliştiriyorum. Ancak kodu çalıştırmaya çalışırken aşağıdaki hatayı alıyorum.

Yükleme hatası: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Lütfen herhangi biri bu hatayı çözmeme yardımcı olabilir.


1
Manifest.xml dosyasında bu hata koduna neden olabilecek birçok hata vardır, aşağıdaki PackageParser.java hata listesi cevabına bakın.
Ribo

1
Bir cevabı kabul etmedin mi?
shieldgenerator7

Bu bağlantıyı takip edin Cevabınızı stackoverflow.com/questions/16015033/…
Sritam Jagadev

Net bir cevap için bu bağlantıyı kontrol edin
Vishnuvathsan

Projenizde farklı paketler ve sınıflar varsa Paket adını büyük harflerden küçük harflere değiştirin Paket adı küçük harflerle başlamalıdır
Waheed Akhtar

Yanıtlar:



69

Etkinlik adının önüne "." Gelmelidir. manifest dosyanızda.


Manifest'te paket özniteliğini paketle bildirdiniz, bu nedenle etkinlik oluşturduğunuzda "" koyarsınız. paket adının önüne gelecek şekilde, aynı zamanda etkinliğin tam adını da yazabilirsiniz: "com.example.test.Activity_Name" veya "
.Activity_Name

43

Bu hatayı alıyordum çünkü paket adımda bunun gibi büyük harfler vardı

Com.Example.packagename

Ben onu gibi bir şeye değiştirdikten sonra

com.example.packagename

çözüldü


bu benim sorunumu çözdü. Aktivite sınıfım Aktiviteler adlı bir paketin altındaydı ve bu hata görünmeden önce onu manifest'e ekliyorum. Aktiviteler paket adını aktiviteler olarak değiştirdiğimde çözüldü. Teşekkürler
alicanbatur

2
Paket adında büyük harfler olabileceğini düşünüyorum, ancak paket adındaki 1. harf büyük harf olamaz. Yani "myActivity" = Tamam ama "MyActivity" = Tamam Değil
Gene

29

INSTALL_PARSE_FAILED_MANIFEST_MALFORMED hata kodu, manifest.xml dosyasında çok sayıda hatayı tespit ettiğinde PackageParser.java tarafından döndürülür.

Hatayı izole etmek için logcat'e bakın ('adb install foo.apk' komutunu yaptığınızda). Karşılaştığım problemde logcat şunları içeriyordu:

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

Yukarıdaki dördüncü satırda, PackageParser'ın manifest.xml dosyasının 214 numaralı satırının "<provider> yetkililer özniteliğini içermediğinden" şikayet ettiğini görebilirsiniz . PackageParser'da bu hata kodunu döndüren tüm durumların aşağıdaki listesine bakın. (PackageParser, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED hata kodunu üreten tek sınıftır)

Benim durumumda, "<sağlayıcı>, yetkililer özniteliğini içermez" mesajı, parseApplication tarafından çağrılan parseProvider işlevinde PackagerParser.java'nın 2490 satırı tarafından üretilir.


Frameworks / base / core / java / android / content / pm / PackageParser.java'nın 4.1.1 sürümünden, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED bu yöntemlerde bu satırlarda referans alınır. Kaynak kodu satır numarasının ardından, logcat'te yazdırılan mesaj olan tırnak içine alınmış bir dize gelir. satır numarasının ardından hata kodunun döndürülmesine neden olan kod olan bir Java ifadesi gelirse, bu işlevin hata mesajının döndürülmesine neyin sebep olduğunu görmek için araştırılması gerekir. Birkaç durumda, hata nedenini belirli bir yöntem çağrısına ayıramadım.

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

Bir soruna neyin yol açtığını anlamak için logcat ve kaynağı araştırmak zorunda olmanız üzücü.


1
Belirli bir çözüm sunmanın yanı sıra genel sorunu nasıl çözeceğimizi anlamamıza yardımcı olduğunuz için teşekkür ederiz.
Vinay W

1
Bu istisna için birden fazla neden var. Bu en mantıklı cevap.
Meghal Şah

1
Teşekkür ederim - benim durumumda IntentFilter.MalformedMimeTypeExceptionkaçırdığım bir şey vardı .
CzarMatt

Bu açık ara doğru cevap. Logcat ne kadar yararlıdır?
Krishnabhadra

10

Manifest dosyasında Aktivite adınızı kontrol edin

veya ana aktivite / sınıftaki Paket adı

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

10

Aynı sorunu yaşıyorum ama süreci şöyle çağırdığımda:

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

Değiştirdiğimde:

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

Her şey çalışmaya başlar.


2
':' Ekleyerek kodun anlamını değiştirdiniz. İkinci durumda, uygulama, yalnızca o uygulamanın kullanabileceği hizmet için yeni bir süreç yaratacaktır. developer.android.com/guide/topics/manifest/… . Bunun yerine, hata sadece 'ekran' kelimesi yerine tam paket adı söylenerek düzeltilebilir.
shshnk

10

Bir süre önce aynı problemle karşılaştım, android dokümanlarında , önek olarak ":" android:processkullanmazsanız, küçük harf kullanmanız gerektiğini söylediler, ancak bunu asla söylemediler, o zaman paket gibi bir süreç olmalı isim gibicom.company.app.services.MyService


1
Bende bile aynı sorun vardı. ':' Kullanmadığımız zamanlar için paket adını
eklememiz gerektiğinden bahsetmeleri gerekirdi

8

android:name, Gibi herhangi bir ad android:process, paket adı biçiminde olmalıdır: ile başlar a..z, diğerleriyle birleşir, ile .bitmez ....


@IgorG. Üzgünüm,

1
Teşekkür ederim. Bir süreci şu şekilde android:process="com.my_pack.services.MyServiceProcess"çağırdım : (com.my_pack.services, servisimin olduğu pakettir) ve bundan sonra kurulum hatası görünmeyecek.
Maksim Dmitriev

8

Benim sorunum yazmış olmamdı (- ve _'ye dikkat edin):

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

bir aktivite altında. Sorununuzun nedeni de bu olabilir.


3

Aynı hatayı aldım! boş izin etiketi vardı ve bu soruna neden oluyordu!


Lütfen cevabınıza biraz daha ayrıntı ekleyin
kolossus

3

Yerelleştirmeleri ekledikten sonra aynı problemle karşılaşıyorum

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

Dize @string/version_nameyanlışlıkla yeni eklenen yerelleştirilmiş dizgi dosyasından birine geçti (yalnızca yeni dosyalarda görünüyordu). Tüm yerelleştirmeleri kontrol ettikten ve @string/version_nameeng locale hariç her dosyadan kaldırdıktan sonra her şey tekrar çalıştı


3

Bu hatayı teşhis etmek için Android cihaz günlüklerinizi okuyun. Sorunu açıklayan bir "W / PackageParser" satırı bekleyin.


3
<activity/>

ÖNCE tanımlanmalıdır

<activity-alias/>

Keşke buna tekrar oy verebilseydim. Bu cevap ikinci kez bana yardımcı oldu
cottonBallPaws

3

Bu hatayı aldım çünkü aşağıdaki kod

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

Bu hatayı düzeltmek android:mimeType="*"için değiştirdiğimde android:mimeType="*/*".


3

Etkinlik oluşturulmuş ad klasörü küçük harf olmalıdır, Etkinlik klasörü adı için büyük harf kullanmayın .... her zaman küçük harf kullanmak daha iyidir.


3

bu birçok nedenden dolayı olabilir, ancak benim için sorun, küçük harfli adla paketin adını değiştirerek çözüldü (paket adı Etkinliklerdi, etkinliklerle çözüldü).


2

Manifestte multidex kullanıyorsanız, değer veya kaynak ile eklenmelidir. Sevmek..

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

VEYA

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

ardından projeyi temizleyin ve uygulamayı yeniden yükleyin.


2

Benim durumumda, bunun gibi bir öznitelik kullanan bir simgeden bahsediyordum:

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

çekilebilir yerine:

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

Bu özelliği birkaç yerde kullanıyorum ama görünüşe göre çalışmıyor.


Aynen benim durumum. Kullanıcının tercihlerine bağlı olarak farklı bir renk olmasına ihtiyacım var. Ne yazık ki, android: kaynak öznitelikleri kabul etmiyor ...
Elyakim Levi

2

Yeni bir uygulama oluşturup onu Android Pie'ye hedefliyorum . Her şey yolunda ve iyi çalışıyordu, sonra son zamanlarda uygulamamın Android Naught ve Android OS'nin daha düşük sürümlerine yüklenmediğini fark ettim .

Kurulum sırasında hata mesajı görüyorum

INSTALL_PARSE_FAILED_MANIFEST_MALFORMED mesajıyla yükleme başarısız oldu.

Öyleyse, yaptığım düzeltmeler aşağıdaki gibidir ve hepsinin AndroidManifest.xmlyalnızca dosyada yapılması gerekir .

Aktivite, servis, alıcı ve hepsi için

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

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

Manifest izinleri için

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

Bunlar, daha düşük sürüm cihazlarda da çalışmasını sağlamak için gerçekleştirmem gereken değişikliklerdi.


Xamarin'de android, Activity Name özelliğine göre düzeltildi. Bu benim için çalışıyor
Sovary


1

Hatalı biçimlendirilmiş ancak IDE'de vurgulanmamış başka dosyalar olabilir, örneğin etiketler gibi şeyler için manifestin başvurabileceği res / değerler / dizeler.


1

Benim durumumda nedeni, <activity-alias> içindeki android: name özniteliğinin olmamasıydı. <Activity-alias> için zorunludur, ancak var olan bir sınıfı adlandırmamalıdır. İşin garibi - proje sorunsuz bir şekilde derleniyor.


1

Benim sorunum şuydu:

İzinlerimi aşağıdaki şekilde belirliyordum ve çalışmıyordu.

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

Aşağıdaki gibi değiştirdiğimde iyi çalışıyordu:

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

1

Bu hatayı alıyordum çünkü aşağıdaki satıra sahiptim.

android:protectionLevel="developer"

Olarak değiştirdikten sonra

android:protectionLevel="signature"

sorun çözüldü


1

Bu sorunla uğraştıktan sonra, bildirimlerde (sizin de kullandığınız kitaplıkların) bir dize kaynağı değeri (aka @ string /) olarak kullanılan tüm değerlerin, yerelleştirmelerin strings.xml'sinin parçası olmasına izin verilmediğini öğrendim. . Örnek: @ string / app_name kullanan bildirim dosyanız varsa, string / app_name tanımına yalnızca varsayılan değerlerinizde / strings.xml'de izin verilir ve yerelleştirmeler için sağladığınız alternatif string.xml dosyasında izin verilmez. Umarım bu yardımcı olur..


1

Ben de aynı hatayı aldım. Paket / uygulama adımda büyük harf yoktu ve projeyi temizledim ve diğer çözümler de bana yardımcı olmadı. Sonuçta yeni proje oluşturdum ve eşyalarımı yenisine adım adım kopyaladım ve sorunun ortaya çıkıp çıkmadığını kontrol ettim. Sonuçta güzel ve hatasız, fazlalık olmayan bir projem oldu. bazen bu hatanın kaynağını bulmak zordur, bu nedenle başka bir yaklaşım benimsemek daha kolaydır.

Umarım bu birine yardımcı olur!




1

Kullanım android:resourceiçinde <meta-data>yerine android:srcveandroid:srcCompat


1

Burada cevap vermenin geç olduğunu biliyorum ama garip bir hata yapıyorum, bu yüzden birine yardım ederse cevabımı gönder, Benim durumumda yanlışlıkla Ana başlatıcı etkinliğini takma ad olarak ekledim

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

Bu yüzden uygulamamı çalıştırmayı denediğimde hata alıyorum

APK Yüklenirken Hata

Hata [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

Etkinlik kaydından "-alias" kelimesini kaldırdım ve uygulamam başarıyla başlatıldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.