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