2011-05-19 66 views
75

我正在开发一个小应用程序,其中列出了android设备上存在/安装的所有应用程序。但是当我试图运行代码时,我得到了下面的错误。安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

请任何一个可以帮助我弄清楚这个错误。

+1

manifest.xml文件中有很多错误会导致此错误代码,请参阅下面的PackageParser.java错误列表答案。 – Ribo 2014-09-03 13:54:40

+0

您没有接受答案? – shieldgenerator7 2014-12-16 13:26:02

+0

按照此链接您将得到您的答案 http://stackoverflow.com/questions/16015033/installation-error-install-parse-failed-manifest-malformed/27520216#27520216 – 2014-12-17 07:29:59

回答

9

清单文件

或主要活动包名/类

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

活动名称应为前缀检查活动名称“”在你的清单文件中。

+0

而原因? – Pacerier 2012-02-10 13:10:46

+0

在声明你声明包的包装属性,所以当你创建活动时你把“。”在包名称前面,还可以键入活动的完整名称,如:“com.example.test.Activity_Name”或“.Activity_Name” – Amt87 2012-09-18 07:40:59

7

任何名称,如android:nameandroid:process应在包名的形式:与a..z开始,与他人结合.,不.结束...

+0

@IgorG。对不起,我失去了我的观点:-(但新的SDK删除了该字段([here](http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.PackageManager.html))。 – 2012-05-06 02:08:57

+1

谢谢,我调用了一个这样的过程:'android:process =“com.my_pack.services.MyServiceProcess”'(com.my_pack.services是我的服务所在的包)并且安装错误不会显示 – 2013-02-01 06:21:36

7

我的问题是,我写了(注 - 对 - _):

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

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

56

可能还有这个错误的另一个原因。属性

android:taskAffinity="string" 

应始终以点开始,如:

android:taskAffinity=".string" 
+2

问题已解决,但我在哪里可以在文档中找到这些信息? 这里没有关于DOT的信息:https://developer.android.com/guide/topics/manifest/activity-element.html#aff – 2016-05-19 13:07:46

+0

为我工作,但这是一个bug的地狱=/ – 2017-06-01 21:13:24

2

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

+0

请添加一些更多的细节到您的答案 – kolossus 2013-01-26 18:52:04

+0

相关的原因 - 空元数据标记 – k29 2014-01-30 22:27:38

2

我加入本地化

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

意外传入新增本地化的字符串文件之一(它仅出现在新文件)的字符串@string/version_name后遇到了同样的问题。 检查所有的本地化,并从不同的工程现场的一切所有文件删除@string/version_name后再次合作

36

我是有这个错误,因为我在我的包的名称有大写字母这样

Com.Example.packagename 

我已经改变后,为类似

com.example.packagename 

它解决了

+0

这解决了我的问题我的活动类是在一个包所谓的活动,一个d我将它添加到清单出现此错误之前。当我将活动包名称更改为活动时,它解决了。谢谢 – alicanbatur 2013-11-26 11:38:09

+2

我认为你可以在包名中包含大写字母,但是包名中的第一个字母不能是大写字母。所以“myActivity”=好,但 “MyActivity”=不好 – Gene 2014-08-18 22:17:25

0

可能有其他的文件s的格式不正确,但在IDE中未突出显示,例如清单可能为标签等内容引用的res/values/strings。

0

在我的情况下,原因是< activity-alias>中没有android:name属性。 <活动别名是必须的,尽管它不能命名现有的类。有趣的是 - 项目编译没有问题。

0

我的问题如下:

我以下列方式确定我的权限,它不能正常工作。

<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" /> 
1

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

0

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

android:protectionLevel="developer" 

后,我把它改成

android:protectionLevel="signature" 

问题得到解决

24

的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抱怨Manifest.xml文件的那条线#214 “<提供商>不包括当局属性” 。请参阅下面的PackageParser中所有情况下的列表,返回错误代码。 (PackageParser是产生PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误代码的唯一类)

在我的情况消息“<提供商>不包括当局属性”是通过在由parseApplication称为parseProvider函数PackagerParser.java的2490系产生。


从4.1.1版本框架/碱/核心/ JAVA /机器人/内容/ 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中找出问题并找出导致问题的原因。

+1

感谢您帮助我们了解如何解决一般问题,除了提供特定的解决方案。 – 2015-10-06 11:14:34

+1

这个例外有多种原因。这是最合乎逻辑的答案。 – 2015-11-12 06:14:14

+1

谢谢 - 在我的情况下,我有一个我错过的IntentFilter.MalformedMimeTypeException。 – CzarMatt 2016-03-04 00:04:25

2
<activity/> 

必须定义之前

<activity-alias/> 
+0

我希望我能再次对此表示赞赏。第二次这个答案对我有帮助 – cottonBallPaws 2015-11-19 16:09:02

9

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

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

当我更改为:

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

一切开始工作。

+2

通过添加':'你改变了代码的语义。在第二种情况下,应用程序将为该应用程序仅可用的服务创建新的进程。 http://developer.android.com/guide/topics/manifest/service-element.html#proc。 相反,错误可以通过提及完整的软件包名称而不是“屏幕”这个词来解决。 – shshnk 2015-10-15 08:19:03

0

在与这个问题挣扎之后,我发现所有在清单(您使用的库)中用作字符串资源值(aka @ string /)的值都不允许成为字符串的一部分.xml的本地化。 示例:如果您的清单文件使用@ string/app_name,那么string/app_name的定义只允许在您的默认值/ strings.xml中,而不是在您为本地化提供的替代string.xml文件中。 我希望帮助..

8

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

+1

即使我有同样的问题。他们应该提到我们需要在不使用':'时包含软件包名称:' – shshnk 2015-10-15 08:11:45

+0

是否有人为此打开了一个错误? – 2016-06-21 10:34:14

2

我有这个错误,因为下面

<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="*/*"解决了这个错误。

1

如果您在清单中使用multidex,那么它应该添加值或资源。 如..

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

OR

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

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

0

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

我希望这可以帮助别人!

0

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

1

<activity-alias>目标<activity>需要指定之前的别名。

1

在我来说,我指的是一个图标使用像这样的属性:

<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" /> 

我在几个地方使用这个属性,但现在看来,这在清单中不起作用。

+0

恰恰我的情况。我需要它是一个不同的颜色,取决于用户的喜好。可悲的是,android:资源不接受属性... – 2018-02-16 20:12:14

0

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