Kesalahan penginstalan: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

95

Saya mengembangkan aplikasi kecil yang mencantumkan semua aplikasi yang ada / diinstal di perangkat android. Tetapi saya mendapatkan kesalahan di bawah ini ketika saya mencoba menjalankan kode.

Kesalahan penginstalan: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Tolong adakah yang bisa membantu saya untuk menyelesaikan kesalahan ini.

SP
sumber
1
Ada banyak kesalahan dalam file manifest.xml yang dapat menyebabkan kode kesalahan ini, lihat jawaban daftar kesalahan PackageParser.java di bawah ini.
Ribo
1
Anda tidak menerima jawaban?
shieldgenerator7
Ikuti tautan ini Anda akan mendapatkan jawaban stackoverflow.com/questions/16015033/…
Sritam Jagadev
Periksa tautan ini untuk jawaban yang jelas
Vishnuvathsan
Jika Anda memiliki paket dan kelas yang berbeda dalam proyek Anda, Ubah nama paket dari huruf besar ke huruf kecil Nama paket harus dimulai dengan huruf kecil
Waheed Akhtar

Jawaban:

80

Mungkin ada alasan lain untuk kesalahan ini. Atribut

android:taskAffinity="string" 

Harus selalu dimulai dengan titik, seperti:

android:taskAffinity=".string" 
Andy
sumber
4
Masalah terpecahkan bagi saya, tetapi di mana saya dapat menemukan informasi ini dalam dokumentasi? tidak ada apa-apa tentang DOT di sini: developer.android.com/guide/topics/manifest/…
Beto Caldas
Anda menyelamatkan hari saya
Waldmann
69

Nama aktivitas harus diawali dengan "." dalam file manifes Anda.

suresha Chilukuri
sumber
dalam Manifes Anda mendeklarasikan atribut paket dengan paket, jadi ketika Anda membuat aktivitas Anda meletakkan "." diawali dengan nama paket, Anda juga dapat mengetikkan nama lengkap aktivitas seperti: "com.example.test.Activity_Name", atau ".Activity_Name"
Amt87
43

Saya mengalami kesalahan ini karena saya memiliki huruf kapital di nama paket saya seperti ini

Com.Example.packagename

setelah saya mengubahnya menjadi sesuatu seperti

com.example.packagename

itu terpecahkan

Samuel
sumber
ini memecahkan masalah saya. Kelas aktivitas saya berada di bawah paket yang disebut Aktivitas, dan saya menambahkannya ke manifes sebelum kesalahan ini muncul. ketika saya mengubah nama paket Aktivitas menjadi aktivitas, itu diselesaikan. Terima kasih
alicanbatur
2
Saya rasa Anda dapat menggunakan huruf kapital di nama paket, namun, huruf pertama di nama paket tidak boleh huruf kapital. Jadi "myActivity" = OK tapi "MyActivity" = Tidak OK
Gene
29

Kode kesalahan INSTALL_PARSE_FAILED_MANIFEST_MALFORMED dikembalikan oleh PackageParser.java ketika mendeteksi kesalahan dalam jumlah besar dalam file manifest.xml.

Untuk mengisolasi kesalahan, lihat di logcat (saat Anda melakukan perintah 'adb install foo.apk'). Dalam masalah yang saya temui, logcat berisi:

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

Pada baris keempat di atas, Anda dapat melihat bahwa PackageParser mengeluh bahwa baris # 214 dari file manifest.xml "<provider> tidak menyertakan atribut otoritas" . Lihat daftar di bawah ini dari semua kasus di PackageParser yang mengembalikan kode kesalahan itu. (PackageParser adalah satu-satunya kelas yang menghasilkan PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED kode kesalahan)

Dalam kasus saya, pesan "<provider> tidak menyertakan atribut otoritas" dihasilkan oleh baris 2490 dari PackagerParser.java dalam fungsi parseProvider yang dipanggil oleh parseApplication.


Dari versi 4.1.1 framework / base / core / java / android / content / pm / PackageParser.java, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED direferensikan pada baris ini dalam metode ini. Jika nomor baris kode sumber diikuti dengan string yang dikutip, itu adalah pesan yang dicetak di logcat. Jika nomor baris diikuti oleh ekspresi Java yang merupakan kode yang menyebabkan kode kesalahan dikembalikan, fungsi itu harus diselidiki untuk melihat apa yang menyebabkan pesan kesalahan dikembalikan. Dalam beberapa kasus, saya tidak dapat mengisolasi penyebab kesalahan ke satu panggilan metode tertentu.

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

Sangat disayangkan bahwa Anda harus melihat-lihat di logcat dan sumbernya untuk mencari tahu apa yang menyebabkan masalah.

Ribo
sumber
1
terima kasih telah membantu kami memahami cara menyelesaikan masalah umum selain memberikan solusi khusus.
Vinay W
1
Ada banyak alasan, untuk pengecualian ini. Ini adalah jawaban yang paling logis.
Meghal Shah
1
Terima kasih - dalam kasus saya, saya memiliki sesuatu IntentFilter.MalformedMimeTypeExceptionyang saya lewatkan.
CzarMatt
Sejauh ini, ini adalah jawaban yang benar. Seberapa berguna logcat?
Krishnabhadra
10

Periksa nama Aktivitas Anda di file manifes

atau nama paket dalam aktivitas / kelas utama

<activity android:name="MainActivity"></activity>
Diptendu
sumber
10

Saya memiliki masalah yang sama tetapi ketika saya memanggil proses seperti ini:

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

Ketika saya mengubah ke:

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

Semuanya mulai bekerja.

Dawid Drozd
sumber
2
Dengan menambahkan ':' Anda mengubah semantik kode. Dalam kasus kedua, aplikasi akan membuat proses baru untuk layanan yang hanya tersedia untuk aplikasi itu. developer.android.com/guide/topics/manifest/… . Sebaliknya kesalahan dapat diperbaiki dengan menyebutkan nama paket lengkap, bukan hanya kata 'layar'.
shshnk
10

Saya mengalami masalah yang sama beberapa waktu lalu, di dokumen android mereka mengatakan bahwa jika Anda tidak menggunakan ":" sebagai awalan di android:processAnda harus menggunakan huruf kecil, tetapi mereka tidak pernah mengatakan itu, maka itu harus menjadi proses seperti paket nama, seperticom.company.app.services.MyService

4gus71n
sumber
1
Bahkan saya punya masalah yang sama. Mereka seharusnya menyebutkan bahwa kita perlu menyertakan nama paket ketika tidak menggunakan ':'
shshnk
8

Nama apapun seperti android:name, android:processharus dalam bentuk nama paket: dimulai dengan a..z, gabungkan dengan yang lain dengan ., jangan diakhiri dengan ....


sumber
@Digeeembok. Maaf saya kehilangan maksud saya :-( Tetapi SDK baru menghapus bidang itu (di sini ).
1
Terima kasih. Saya menyebut proses seperti itu: android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services adalah paket tempat layanan saya) dan kesalahan instalasi tidak akan muncul setelah itu.
Maksim Dmitriev
8

Masalah saya adalah bahwa saya telah menulis (Perhatikan - vs. _):

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

di bawah suatu aktivitas. Ini mungkin penyebab masalah Anda juga.

Ymabob
sumber
3

Punya kesalahan yang sama! memiliki tanda izin kosong dan itulah yang menyebabkan masalah!

bhumika singh
sumber
Tolong tambahkan lebih banyak detail pada jawaban Anda
kolossus
3

Saya mengalami masalah yang sama setelah menambahkan pelokalan

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

String tersebut @string/version_namesecara tidak sengaja diteruskan ke salah satu file string lokal baru yang ditambahkan (hanya muncul di file baru). Setelah memeriksa semua pelokalan dan menghapus @string/version_namedari setiap file kecuali bahasa lokal semuanya bekerja kembali

virus
sumber
3

Baca log perangkat Android Anda untuk mendiagnosis kesalahan ini. Harapkan baris "W / PackageParser" yang menjelaskan masalahnya.

Dan Fabulich
sumber
3
<activity/>

harus didefinisikan SEBELUM

<activity-alias/>
Ajvo
sumber
Saya berharap saya dapat meningkatkan ini lagi. Kedua kalinya jawaban ini telah membantu saya
cottonBallPaws
3

Saya mengalami kesalahan ini karena kode di bawah ini

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

Ketika saya berubah android:mimeType="*"untuk android:mimeType="*/*"memperbaiki kesalahan ini.

Ke Di
sumber
3

aktivitas membuat nama folder harus huruf kecil, jangan gunakan huruf kapital untuk nama folder aktivitas .... selalu lebih baik menggunakan huruf kecil.

Khan
sumber
3

ini bisa karena berbagai alasan, tetapi bagi saya itu diselesaikan dengan mengubah nama paket dengan nama huruf kecil (nama paket adalah Aktivitas, diselesaikan dengan aktivitas).

Diyako
sumber
2

Jika Anda menggunakan multidex dalam manifes maka itu harus ditambahkan dengan nilai atau sumber daya. Suka..

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

ATAU

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

kemudian bersihkan proyek dan instal ulang aplikasi.

Sam
sumber
2

Dalam kasus saya, saya mengacu pada ikon menggunakan atribut seperti ini:

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

alih-alih drawable:

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

Saya menggunakan atribut ini di beberapa tempat tetapi sepertinya atribut ini tidak berfungsi secara nyata.

M. Samer
sumber
Persis kasus saya. Saya membutuhkannya dengan warna yang berbeda tergantung pada preferensi pengguna. Sayangnya, android: resource tidak menerima atribut ...
Elyakim Levi
2

Saya membuat aplikasi baru dan menargetkannya ke Android Pie . Semuanya bekerja dengan baik dan bagus, kemudian baru-baru ini saya menemukan bahwa aplikasi saya tidak dapat diinstal ke Android Tidak ada dan versi di bawah OS Android.

Saat menginstal, saya melihat pesan kegagalan

Instalasi gagal dengan pesan INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.

Jadi perbaikan apa yang saya buat adalah sebagai berikut dan semuanya perlu dilakukan dalam AndroidManifest.xmlfile saja.

Untuk aktivitas, layanan, penerima dan semuanya

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

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

Untuk izin Manifes

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

Itu semua perubahan yang harus saya lakukan untuk membuatnya berfungsi untuk perangkat versi yang lebih rendah juga.

Harpreet
sumber
Di Xamarin android diperbaiki pada atribut Nama Aktivitas. Itu berhasil untuk saya
Sovary
2

Target <activity>harus ditentukan sebelum itu <activity-alias>.

Eugen Pechanec
sumber
1

Mungkin ada file lain dengan format yang salah tetapi tidak disorot di IDE, misalnya res / values ​​/ strings yang mungkin dirujuk oleh manifes untuk hal-hal seperti label.

m_cheung
sumber
1

Dalam kasus saya, penyebabnya adalah tidak adanya atribut android: name di <activity-alias>. Ini wajib untuk <activity-alias> meskipun tidak boleh memberi nama kelas yang ada. Lucunya - proyek ini terkompilasi tanpa masalah.

Gena Batsyan
sumber
1

Masalah saya adalah sebagai berikut:

Saya menentukan izin saya dengan cara berikut dan tidak berhasil.

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

Itu berfungsi dengan baik ketika saya mengubahnya menjadi sebagai berikut:

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

Saya mengalami kesalahan ini karena saya memiliki baris di bawah ini.

android:protectionLevel="developer"

Setelah saya mengubahnya menjadi

android:protectionLevel="signature"

masalah terpecahkan

Swalih
sumber
1

Setelah berjuang dengan masalah ini, saya menemukan bahwa semua nilai yang digunakan sebagai nilai sumber daya string (alias @ string /) dalam manifes (dari pustaka yang Anda gunakan juga), tidak diizinkan untuk menjadi bagian dari strings.xml pelokalan . Contoh: jika file manifes Anda menggunakan @ string / app_name, definisi string / app_name hanya diizinkan di nilai default / strings.xml dan tidak di file string.xml alternatif yang Anda berikan untuk pelokalan. Saya harap itu membantu..

Ozzz
sumber
1

Saya mengalami kesalahan yang sama. Saya tidak memiliki karakter huruf besar di nama paket / aplikasi saya dan membersihkan proyek dan solusi lain juga tidak membantu saya. setelah semua saya membuat proyek baru dan menyalin barang-barang saya ke yang baru selangkah demi selangkah dan memeriksa apakah masalah muncul. setelah semua saya memiliki proyek yang bagus dan bebas dari kesalahan tanpa redundansi. terkadang sulit menemukan sumber kesalahan ini sehingga lebih mudah untuk mengambil pendekatan lain.

Saya harap ini membantu seseorang!

Mehran Zamani
sumber
1

Saya menghadapi kesalahan ini ketika saya menempatkan kelas Aplikasi dalam paket yang salah!

farhad.kargaran
sumber
1

Anda mungkin belum mengikuti aturan sintaks dari sebuah tag. sebagai contoh:

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

Tag ini tidak lengkap dan menyebabkan kesalahan ini.

Ringkasan Manifes Aplikasi

gadolf
sumber
1

Gunakan android:resourcedi <meta-data>bukannya android:srcdanandroid:srcCompat

Bibin Johny
sumber
1

Saya tahu terlambat untuk menjawab di sini tetapi saya melakukan kesalahan aneh jadi kirimkan jawaban saya jika itu membantu seseorang, Dalam kasus saya karena kesalahan, saya Menambahkan aktivitas peluncur Utama sebagai 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>

Jadi ketika saya mencoba menjalankan aplikasi saya mendapatkan kesalahan

Kesalahan saat Menginstal APK

Kegagalan [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

Saya baru saja menghapus kata "-alias" dari pendaftaran aktivitas dan peluncuran aplikasi saya berhasil.

Ajay Pandya
sumber