安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

我正在开发一个小应用程序,列出所有的应用程序目前/安装在Android设备上。 但是我正在尝试运行代码时遇到下面的错误。

安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

请任何人帮我解决这个错误。

活动名称应该以“。”作为前缀。 在你的清单文件中。

这个错误可能是另一个原因。 属性

android:taskAffinity="string" 

应始终以点开始,如:

 android:taskAffinity=".string" 

我有这个错误,因为我的包名中有大写字母

 Com.Example.packagename 

在我改变了它之后

 com.example.packagename 

它被解决了

当它检测到manifest.xml文件中有大量错误时,PackageParser.java将返回INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误代码。

要隔离错误,请查看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抱怨manifest.xml文件“<provider>的第214行不包含权限属性” 。 请参阅PackageParser中所有情况下的列表,返回错误代码。 (PackageParser是生成PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误代码的唯一类)

在我的情况下,消息“<provider>不包含权限属性”是由parseApplication调用的parseProvider函数中的PackagerParser.java的第2490行产生的。


从4.1.1版本的frameworks / base / core / java / android / content / pm / PackageParser.java,PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED在这些方法的这些行中被引用。 如果源代码的行号后面跟着一个带有引号的string,这是在logcat中打印的消息。 如果行号后跟一个Javaexpression式,该expression式是导致返回错误代码的代码,应调查该函数以查看导致错误消息返回的原因。 在一些情况下,我无法将错误原因分离到一个特定的方法调用。

 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和源头上找出是什么原因造成问题。

在清单文件中检查您的活动名称

或主要活动/课程中的包名称

 <activity android:name="MainActivity"></activity> 

我有同样的问题,但是当我打电话像这样的过程:

 <service android:name="com.dexode.tama.AppService" android:process="screen" > </service> 

当我更改为:

 <service android:name="com.dexode.tama.AppService" android:process=":screen" > </service> 

一切开始工作。

我之前碰到过同样的问题,在android 文档中他们说如果你不用“:”作为android:process前缀,你应该用小写字母,但是他们从来没有说过,那应该是一个包像进程名,比如com.company.app.services.MyService

任何名称如android:nameandroid:process都应该以包名的forms:以a..z ,与其他人结合. ,不要结束.

我的问题是我写了(注意 – 与_):

 <meta_data ... /> <!-- instead of --> <meta-data ... /> 

在一个活动下。 这也可能是你的问题的原因。

得到了同样的错误! 有空的许可标签,这是造成这个问题!

添加本地化后,我遇到了同样的问题

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="my.package" android:versionCode="10" android:versionName="@string/version_name" > 

string@string/version_name意外地传入新添加的本地化string文件之一(它只出现在新文件中)。 检查完所有的本地化后,除了eng locale以外的每个文件中删除@string/version_name ,所有的东西都再次运行

 <activity/> 

必须在之前定义

 <activity-alias/> 

我有这个错误,因为下面的代码

 <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*" android:host="*" android:scheme="content" /> </intent-filter> 

当我更改android:mimeType="*"android:mimeType="*/*"修正了这个错误。

阅读您的Android设备日志来诊断此错误。 期待一个解释问题的“W / PackageParser”行。

如果您在清单中使用multidex,则应该添加值或资源。 喜欢..

 <meta-data android:name="android.support.multidex.MultiDexApplication" android:value="@string/yourValue" /> 

要么

 <meta-data android:name="android.support.multidex.MultiDexApplication" android:resource="@string/yourValue" /> 

然后清理项目并重新安装应用程序。

需要在别名之前指定<activity-alias> target <activity>

可能有其他文件格式不正确,但在IDE中未突出显示,例如清单可能参考标签之类的res / values / strings。

在我的情况下,原因是在<activity-alias>中缺lessandroid:name属性。 对于<activity-alias>是必须的,尽pipe它不能命名现有的类。 有趣的是 – 项目编译没有问题。

我的问题如下:

我以下面的方式指定了我的权限,并且不能正常工作。

 <permission android:name="android.permission.INTERNET"> <meta-data /> </permission> <permission android:name="android.permission.ACCESS_NETWORK_STATE"> <meta-data /> </permission> 

当我把它改成如下时,它工作的很好:

 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

我有这个错误,因为我有下面的行。

 android:protectionLevel="developer" 

在我改变它之后

 android:protectionLevel="signature" 

问题解决了

在解决这个问题之后,我发现所有在清单(也是你使用的库)中作为string资源值(aka @ string /)使用的值都不允许成为本地化string的一部分。 示例:如果您的清单文件使用@ string / app_name,则string/ app_name的定义仅在默认值/ strings.xml中允许,而不在您为本地化提供的备用string.xml文件中。 我希望帮助..

我有同样的错误。 我的软件包/应用程序名称中没有大写字母,并且清理项目,其他解决scheme也没有帮助我。 毕竟我创build了新的项目,并将我的东西一步一步地复制到新的项目中,并检查问题是否会popup。 毕竟,我有一个很好的,没有错误的项目没有任何冗余。 有时很难find这个错误的来源,所以采取另一种方法更容易。

我希望这可以帮助别人!

当我把Application类放在一个错误的包中时,我遇到了这个错误!

在我的情况下,我指的是使用像这样的属性的图标:

 <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="?attr/ic_notify" /> 

而不是可绘制的:

 <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_notify" /> 

我在几个地方使用这个属性,但它似乎不工作在清单。

活动创build的名称文件夹必须是小写字母,不要使用大写字母作为活动文件夹名称….它总是最好使用小写字母。