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