Der Fehlercode INSTALL_PARSE_FAILED_MANIFEST_MALFORMED wird von PackageParser.java zurückgegeben, wenn eine große Anzahl von Fehlern in der Datei manifest.xml erkannt wird.
Um den Fehler zu isolieren, schauen Sie in logcat nach (wenn Sie den Befehl 'adb install foo.apk' ausführen). In dem Problem, auf das ich gestoßen bin, enthielt 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
In der vierten Zeile oben sehen Sie, dass PackageParser sich darüber beschwert, dass Zeile 214 der Datei manifest.xml "<Anbieter> enthält kein Berechtigungsattribut" . In der folgenden Liste sind alle Fälle in PackageParser aufgeführt, die diesen Fehlercode zurückgeben. (PackageParser ist die einzige Klasse, die den Fehlercode PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED erzeugt.)
In meinem Fall wird die Nachricht "<Anbieter> enthält kein Berechtigungsattribut" in Zeile 2490 von PackagerParser.java in der von parseApplication aufgerufenen Funktion parseProvider erzeugt.
Ab der Version 4.1.1 von Frameworks / base / core / java / android / content / pm / PackageParser.java wird in diesen Methoden in diesen Zeilen auf PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED verwiesen. Wenn auf die Zeilennummer des Quellcodes eine Zeichenfolge in Anführungszeichen folgt, handelt es sich um die in logcat gedruckte Nachricht. Wenn auf die Zeilennummer ein Java-Ausdruck folgt, der der Code ist, der die Rückgabe dieses Fehlercodes verursacht hat, sollte diese Funktion untersucht werden, um festzustellen, warum die Fehlermeldung zurückgegeben wurde. In einigen Fällen konnte ich die Fehlerursache nicht auf einen bestimmten Methodenaufruf beschränken.
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
Es ist bedauerlich, dass Sie in logcat und der Quelle herumstöbern müssen, um herauszufinden, was ein Problem verursacht.