Код помилки 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 #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
У четвертому рядку вище ви бачите, що PackageParser скаржиться, що рядок № 214 файлу manifest.xml "<provider> не включає атрибут повноважень" . Перегляньте перелік усіх випадків у PackageParser, який повертає цей код помилки. (PackageParser - єдиний клас, який виробляє PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED код помилки)
У моєму випадку повідомлення "<provider> не включає атрибут повноважень" видається рядком 2490 з PackagerParser.java у функції parseProvider, що викликається parseApplication.
З версії 4.1.1 framework / 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 та джерелі, щоб з’ясувати, що викликає проблему.