รหัสข้อผิดพลาด INSTALL_PARSE_FAILED_MANIFEST_MALFORMED ถูกส่งคืนโดย PackageParser.java เมื่อตรวจพบข้อผิดพลาดจำนวนมากในไฟล์ manifest.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
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
ในบรรทัดที่สี่ข้างต้นจะเห็นได้ว่า PackageParser บ่นบรรทัดที่ # 214 ของไฟล์ manifest.xml "<ผู้ให้บริการ> ไม่รวมถึงเจ้าหน้าที่แอตทริบิวต์" ดูรายการด้านล่างของกรณีทั้งหมดใน PackageParser ที่ส่งคืนรหัสข้อผิดพลาดนั้น (PackageParser เป็นคลาสเดียวที่สร้างรหัสข้อผิดพลาด PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)
ในกรณีของฉันข้อความ "<provider> ไม่รวมแอ็ตทริบิวต์ทางการ" ถูกสร้างโดยบรรทัด 2490 ของ PackagerParser.java ในฟังก์ชัน parseProvider ที่เรียกโดย parseApplication
จากเวอร์ชัน 4.1.1 ของ frameworks / base / core / java / android / content / pm / PackageParser.java, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED ถูกอ้างอิงบนบรรทัดเหล่านี้ในวิธีการเหล่านี้ หากหมายเลขบรรทัดของซอร์สโค้ดตามด้วยสตริงที่ยกมาซึ่งเป็นข้อความที่พิมพ์ใน logcat หากหมายเลขบรรทัดตามด้วยนิพจน์ Java ที่เป็นรหัสที่ทำให้รหัสข้อผิดพลาดนั้นถูกส่งกลับให้ตรวจสอบฟังก์ชันนั้นเพื่อดูว่าอะไรเป็นสาเหตุของข้อความแสดงข้อผิดพลาดที่จะส่งคืน ในสองกรณีฉันไม่สามารถแยกสาเหตุของข้อผิดพลาดกับการเรียกใช้เมธอดเฉพาะวิธีเดียวได้
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
เป็นเรื่องน่าเสียใจที่คุณต้องโผล่เข้าไปใน logcat และแหล่งที่มาเพื่อหาสาเหตุของปัญหา