Lỗi cài đặt: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?


93

Tôi đang phát triển một ứng dụng nhỏ liệt kê tất cả các ứng dụng hiện có / được cài đặt trên thiết bị Android. Nhưng tôi gặp lỗi bên dưới khi đang cố chạy mã.

Lỗi cài đặt: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Xin vui lòng bất kỳ ai có thể giúp tôi để giải quyết lỗi này.


1
Có nhiều lỗi trong tệp manifest.xml có thể gây ra mã lỗi này, hãy xem câu trả lời danh sách lỗi PackageParser.java bên dưới.
Ribo

1
Bạn không chấp nhận một câu trả lời?
Shieldgenerator 7

Theo liên kết này Bạn sẽ nhận được câu trả lời của mình stackoverflow.com/questions/16015033/…
Sritam Jagadev

Kiểm tra liên kết này để có câu trả lời rõ ràng
Vishnuvathsan

Nếu bạn có các gói khác nhau và các lớp trong tên gói project.Change của bạn từ chữ hoa để hạ tên letters.Package nên bắt đầu với chữ thường
Waheed Akhtar

Câu trả lời:


79

Có thể có một lý do khác cho lỗi này. Thuộc tính

android:taskAffinity="string" 

Luôn bắt đầu bằng dấu chấm, như:

android:taskAffinity=".string" 

4
Vấn đề đã được giải quyết cho tôi nhưng tôi có thể tìm thông tin này ở đâu trong tài liệu? không có gì về DOT ở đây: developer.android.com/guide/topics/manifest/…
Beto Caldas

68

Tên hoạt động phải được bắt đầu bằng "." trong tệp kê khai của bạn.


trong Manifest, bạn đã khai báo thuộc tính package với package, vì vậy khi tạo hoạt động, bạn đặt "." đứng trước tên gói, bạn cũng có thể nhập tên đầy đủ của hoạt động như: "com.example.test.Activity_Name" hoặc "
.Activity_Name

42

Tôi gặp lỗi này vì tôi đã viết hoa trong tên gói hàng của mình như thế này

Com.Example.packagename

sau khi tôi đã thay đổi nó thành một cái gì đó giống như

com.example.packagename

nó đã được giải quyết


điều này đã giải quyết vấn đề của tôi. Lớp hoạt động của tôi nằm trong một gói có tên Hoạt động và tôi thêm nó vào tệp kê khai trước khi lỗi này xuất hiện. khi tôi thay đổi tên gói Hoạt động thành các hoạt động, nó đã giải quyết được. Cảm ơn
alicanbatur

2
Tôi nghĩ rằng bạn có thể viết hoa trong tên gói, tuy nhiên, chữ cái đầu tiên trong tên gói không thể là chữ in hoa. Vì vậy, "myActivity" = OK nhưng "MyActivity" = Không OK
Gene

29

Mã lỗi INSTALL_PARSE_FAILED_MANIFEST_MALFORMED được PackageParser.java trả lại khi phát hiện bất kỳ lỗi nào trong số lượng lớn các lỗi trong tệp kê khai.xml.

Để cách ly lỗi, hãy tìm trong logcat (khi bạn thực hiện lệnh 'adb install foo.apk'). Trong sự cố tôi gặp phải, logcat chứa:

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

Trong dòng thứ tư ở trên, bạn có thể thấy PackageParser khiếu nại rằng dòng # 214 của tệp kê khai.xml "<provider> không bao gồm thuộc tính ủy quyền" . Xem danh sách bên dưới về tất cả các trường hợp trong PackageParser trả về mã lỗi đó. (PackageParser là lớp duy nhất tạo ra mã lỗi PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)

Trong trường hợp của tôi, thông báo "<provider> không bao gồm thuộc tính Authority" được tạo ra bởi dòng 2490 của PackagerParser.java trong hàm parseProvider được gọi bởi parseApplication.


Từ phiên bản 4.1.1 của framework / base / core / java / android / content / pm / PackageParser.java, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED được tham chiếu trên các dòng này trong các phương thức này. Nếu số dòng mã nguồn được theo sau bởi một chuỗi được trích dẫn thì đó là thông báo được in trong logcat. nếu số dòng được theo sau bởi một biểu thức Java là mã gây ra mã lỗi đó được trả về thì hàm đó cần được điều tra để xem điều gì đã gây ra thông báo lỗi được trả về. Trong một số trường hợp, tôi không thể tách nguyên nhân lỗi thành một lệnh gọi phương thức cụ thể.

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

Thật đáng tiếc khi bạn phải xem xét logcat và nguồn để tìm ra nguyên nhân gây ra sự cố.


1
Cảm ơn vì đã giúp chúng tôi hiểu cách giải quyết vấn đề chung ngoài việc đưa ra giải pháp cụ thể.
Vinay W

1
Có nhiều lý do, cho ngoại lệ này. Đây là câu trả lời hợp lý nhất.
Meghal Shah

1
Cảm ơn bạn - trong trường hợp của tôi, tôi đã có một IntentFilter.MalformedMimeTypeExceptioncái mà tôi đã bỏ lỡ.
CzarMatt

Đây là câu trả lời chính xác cho đến nay. Logcat hữu ích như thế nào?
Krishnabhadra

10

Kiểm tra tên Hoạt động của bạn trong tệp kê khai

hoặc tên Gói trong hoạt động / lớp học chính

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

10

Tôi gặp vấn đề tương tự nhưng khi tôi gọi quá trình như thế này:

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

Khi tôi thay đổi thành:

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

Mọi thứ bắt đầu hoạt động.


2
Bằng cách thêm ':', bạn đã thay đổi ngữ nghĩa của mã. Trong trường hợp thứ hai, ứng dụng sẽ tạo một quy trình mới cho dịch vụ mà chỉ dành cho ứng dụng đó. developer.android.com/guide/topics/manifest/… . Thay vào đó, lỗi có thể được khắc phục bằng cách đề cập đến tên gói hoàn chỉnh thay vì chỉ từ 'màn hình'.
shshnk

10

Tôi đã gặp phải vấn đề tương tự cách đây, trong tài liệu android, họ nói rằng nếu bạn không sử dụng tiền tố ":" làm tiền tố, android:processbạn nên sử dụng một chữ cái thường, nhưng họ chưa bao giờ nói điều đó, thì nó phải là một gói như process tên, nhưcom.company.app.services.MyService


1
Ngay cả tôi đã có cùng một vấn đề. Họ nên đã đề cập, chúng ta cần phải bao gồm tên gói cho khi không sử dụng ':'
shshnk

8

Bất kỳ tên nào chẳng hạn như android:name, android:processphải ở dạng tên gói: bắt đầu bằng a..z, kết hợp với những tên khác bằng ., không kết thúc bằng ....


@IgorG. Xin lỗi, tôi đã đánh mất điểm của mình :-( Nhưng SDK mới đã xóa trường đó ( ở đây ).

1
Cảm ơn bạn. Tôi đã gọi một quy trình theo cách như vậy: android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services là gói chứa dịch vụ của tôi) và lỗi cài đặt sẽ không hiển thị sau đó.
Maksim Dmitriev

8

Vấn đề của tôi là tôi đã viết (Lưu ý - so với _):

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

dưới một hoạt động. Đây cũng có thể là nguyên nhân gây ra sự cố của bạn.


3

Gặp lỗi tương tự! có thẻ quyền trống và điều đó đang gây ra sự cố!


Vui lòng thêm một số chi tiết hơn để trả lời của bạn
kolossus

3

Tôi gặp phải vấn đề tương tự sau khi thêm bản địa hóa

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

Chuỗi @string/version_namevô tình được chuyển vào một trong các tệp chuỗi bản địa hóa mới được thêm vào (nó chỉ xuất hiện trong các tệp mới). Sau khi kiểm tra tất cả các bản địa hóa và xóa @string/version_namekhỏi mọi tệp ngoại trừ ngôn ngữ bản địa, mọi thứ đã hoạt động trở lại


3

Đọc nhật ký thiết bị Android của bạn để chẩn đoán lỗi này. Mong đợi một dòng "W / PackageParser" giải thích sự cố.


3
<activity/>

phải được xác định TRƯỚC

<activity-alias/>

Tôi ước tôi có thể ủng hộ điều này một lần nữa. Lần thứ hai câu trả lời này đã giúp tôi
cottonBallPaws

3

Tôi gặp lỗi này vì mã bên dưới

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

Khi tôi thay đổi android:mimeType="*"để android:mimeType="*/*"sửa lỗi này.


3

Thư mục tên hoạt động được tạo phải là chữ nhỏ, Không sử dụng chữ in hoa cho tên thư mục hoạt động .... tốt hơn hết là sử dụng chữ nhỏ.


3

điều này có thể vì nhiều lý do, nhưng đối với tôi nó đã được giải quyết bằng cách thay đổi tên của gói bằng tên viết thường (tên gói là Hoạt động, được giải quyết bằng các hoạt động).


2

Nếu bạn đang sử dụng multidex trong tệp kê khai thì nó phải được thêm giá trị hoặc tài nguyên. Giống..

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

HOẶC LÀ

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

sau đó làm sạch dự án và cài đặt lại ứng dụng.


2

Trong trường hợp của tôi, tôi đang đề cập đến một biểu tượng bằng cách sử dụng thuộc tính như sau:

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

thay vì có thể vẽ:

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

Tôi đang sử dụng thuộc tính này ở một số nơi nhưng có vẻ như nó không hoạt động trong tệp kê khai.


Chính xác là trường hợp của tôi. Tôi cần nó có một màu khác tùy theo sở thích của người dùng. Đáng buồn thay, android: resource không chấp nhận các thuộc tính ...
Elyakim Levi 16/02

2

Tôi tạo một ứng dụng mới và nhắm mục tiêu nó đến Android Pie . Mọi thứ đều hoạt động tốt và tốt thì gần đây tôi thấy rằng ứng dụng của mình không cài đặt được phiên bản Android Naught trở xuống của hệ điều hành Android.

Trong khi cài đặt, tôi thấy thông báo lỗi

Cài đặt không thành công với thông báo INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.

Vì vậy, những bản sửa lỗi mà tôi đã thực hiện như sau và tất cả chúng chỉ cần được thực hiện trong AndroidManifest.xmltệp.

Đối với hoạt động, dịch vụ, người nhận và tất cả

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

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

Đối với quyền trên Tệp kê khai

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

Đó là tất cả những thay đổi mà tôi phải thực hiện để làm cho nó hoạt động cho cả các thiết bị phiên bản thấp hơn.


Trong Xamarin android đã sửa thuộc tính Tên hoạt động. Đó là công việc đối với tôi
Sovary


1

Có thể có các tệp khác không đúng định dạng nhưng không được đánh dấu trong IDE, chẳng hạn như res / giá trị / chuỗi mà tệp kê khai có thể tham chiếu cho những thứ như nhãn.


1

Trong trường hợp của tôi, nguyên nhân là do không có thuộc tính android: name trong <activity-alias>. Nó là bắt buộc đối với <activity-alias> mặc dù nó không được đặt tên cho một lớp hiện có. Điều buồn cười là - dự án biên dịch mà không gặp vấn đề gì.


1

Vấn đề của tôi như sau:

Tôi đã chỉ định các quyền của mình theo cách sau và nó không hoạt động.

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

Nó hoạt động tốt khi tôi thay đổi nó thành như sau:

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

1

Tôi gặp lỗi này vì tôi có dòng bên dưới.

android:protectionLevel="developer"

Sau khi tôi thay đổi nó thành

android:protectionLevel="signature"

vấn đề đã được giải quyết


1

Sau khi đấu tranh với vấn đề này, tôi phát hiện ra rằng tất cả các giá trị được sử dụng làm giá trị tài nguyên chuỗi (còn gọi là @ string /) trong tệp kê khai (của các thư viện bạn cũng đang sử dụng), đều không được phép trở thành một phần của chuỗi bản địa hóa. Xml . Ví dụ: nếu tệp kê khai của bạn sử dụng @ string / app_name, thì định nghĩa chuỗi / app_name chỉ được phép trong các giá trị mặc định / string.xml của bạn và không được phép trong tệp string.xml thay thế mà bạn cung cấp cho bản địa hoá. Tôi hy vọng điều đó sẽ giúp ..


1

Tôi đã có cùng một lỗi. Tôi không có ký tự hoa trong tên gói / ứng dụng của mình và làm sạch dự án và các giải pháp khác cũng không giúp tôi được. Sau tất cả, tôi đã tạo dự án mới và sao chép nội dung của mình sang dự án mới từng bước một và kiểm tra xem vấn đề có xuất hiện hay không. sau tất cả, tôi đã có một dự án đẹp và không có lỗi mà không có bất kỳ sự dư thừa nào. đôi khi rất khó để tìm ra nguồn gốc của lỗi này, vì vậy nó dễ dàng hơn để thực hiện một cách tiếp cận khác.

tôi hi vọng nó sẽ giúp ích cho mọi người!




1

Sử dụng android:resourcetrong <meta-data>thay vì android:srcandroid:srcCompat


1

Tôi biết là đã muộn để trả lời ở đây nhưng tôi mắc lỗi kỳ lạ vì vậy hãy đăng câu trả lời của mình nếu nó giúp ích cho ai đó, Trong trường hợp của tôi do nhầm lẫn, tôi đã thêm hoạt động của trình khởi chạy Chính làm bí danh

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

Vì vậy, khi tôi cố chạy ứng dụng của mình gặp lỗi

Lỗi khi cài đặt APK

Không thành công [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

Tôi chỉ xóa từ "-alias" khỏi đăng ký hoạt động và khởi chạy ứng dụng của tôi thành công.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.