安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?


93

我正在开发一个小型应用程序,其中列出了存在/已安装在android设备上的所有应用程序。但是我在尝试运行代码时遇到以下错误。

安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

请谁能帮助我解决此错误。


1
manifest.xml文件中有很多错误可能导致此错误代码,请参阅下面的PackageParser.java错误列表答案。
Ribo 2014年

1
您没有接受答案吗?
shieldgenerator14年6

请点击此链接,你会得到你的答案 stackoverflow.com/questions/16015033/...
Sritam Jagadev

检查此链接以获得明确的答案
Vishnuvathsan

如果项目中有不同的程序包和类,请将程序包名称从大写字母更改为小写字母。程序包名称应以小写字母开头
Waheed Akhtar

Answers:



68

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


在清单中,您使用package声明了package属性,因此,在创建活动时,请输入“。”。要在软件包名称之前添加,您还可以键入活动的全名,例如:“ com.example.test.Activity_Name”或“
.Activity_Name

42

我遇到此错误是因为我的包裹名称中有这样的大写字母

Com.Example.packagename

在我将其更改为

com.example.packagename

解决了


这解决了我的问题。我的活动类在一个名为“活动”的程序包下,我将其添加到清单中以显示此错误。当我将活动包名称更改为活动时,它解决了。谢谢
alicanbatur

2
我认为您可以在包装名称中使用大写字母,但是,包装名称中的第一个字母不能是大写字母。因此,“ myActivity” = OK,但“ MyActivity” = OK
Gene

29

当PackageParser.java在manifest.xml文件中检测到大量错误中的任何错误时,将返回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错误代码的类)

在我的情况下,PackagerParser.java的第2490行在parseApplication调用的parseProvider函数中生成了消息“ <provider>不包括授权机构属性”。


从frameworks / base / core / java / android / content / pm / PackageParser.java的4.1.1版本开始,在这些方法中的这些行上引用了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
感谢您帮助我们了解除提供特定解决方案外如何解决一般问题。
Vinay W

1
造成此异常的原因有多种。这是最合乎逻辑的答案。
Meghal Shah 2015年

1
谢谢-就我而言IntentFilter.MalformedMimeTypeException,我错过了。
CzarMatt

到目前为止,这是正确的答案。logcat有多有用?
Krishnabhadra'3

10

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

或主要活动/类别中的包裹名称

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

10

我有同样的问题,但是当我这样调用流程时:

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

当我更改为:

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

一切开始工作。


2
通过添加“:”,您可以更改代码的语义。在第二种情况下,应用程序将为该服务创建一个仅适用于该应用程序的新过程。developer.android.com/guide/topics/manifest/…。而是可以通过提及完整的软件包名称而不是仅仅提及“ screen”一词来解决错误。
shshnk

10

我前段时间遇到了同样的问题,在android 文档中,他们说如果您不使用“:”作为前缀,android:process则应使用小写字母,但他们从来没有说过,那么它应该是像process这样的包名字,像com.company.app.services.MyService


1
即使我也有同样的问题。:他们应该提到的,我们需要包括在不使用的包名“”
shshnk

8

任何名称,例如android:nameandroid:process都应以软件包名称的形式出现:以开头a..z,以开头与其他内容组合.,而不以.... 结尾


@IgorG。对不起,我失去了我的观点,但:-(新的SDK中删除该字段(在这里)。

1
谢谢。我这样称呼进程:android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services是我的服务所在的软件包),此后将不会显示安装错误。
Maksim Dmitriev

8

我的问题是我已经写过(请注意-与_)。

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

在一项活动下。这也可能是造成您问题的原因。



3

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

<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从eng locale之外的每个文件中删除后,一切又恢复了



3
<activity/>

必须在之前定义

<activity-alias/>

我希望我能再次投票赞成。此答案第二次帮助了我
cottonBallPaws

3

我遇到此错误,因为下面的代码

<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="*/*"修复此错误时。


3

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


3

这可能有很多原因,但是对我来说,这是通过使用小写名称更改程序包的名称来解决的(程序包名称为Activity,由活动解决)。


2

如果在清单中使用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" />

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


2

就我而言,我使用这样的属性来引用图标:

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

而不是drawable:

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

我在多个地方使用了此属性,但似乎在清单中不起作用。


完全是我的情况。我需要根据用户的喜好将其设置为其他颜色。可悲的是,android:resource不接受属性...
Elyakim Levi

2

我创建一个新应用程序并将其定位到Android Pie。一切正常,然后好,最近我发现我的应用程序无法安装到Android Naught及以下版本的Android OS。

安装时,我看到失败消息

安装失败,并显示消息INSTALL_PARSE_FAILED_MANIFEST_MALFORMED。

因此,我所做的修复如下,它们AndroidManifest.xml都只需要在文件中完成。

对于活动,服务,接收者和所有

Instead of:
    android:name=".service.MyService"

Used: 
    android:name="com.complete.appicationID.service.MyService"

对于清单权限

Instead of: 
     <uses-permission android:name="{applicationId}.permission.MAPS_RECEIVE" />
     <permission
         android:name="{applicationId}.permission.MAPS_RECEIVE"
         android:protectionLevel="signature" />

Used:
     <uses-permission android:name="com.complete.appicationID.permission.MAPS_RECEIVE" />
     <permission
         android:name="com.complete.appicationID.permission.MAPS_RECEIVE"
         android:protectionLevel="signature" />

这些都是我必须执行的所有更改,以使其也适用于较低版本的设备。


在Xamarin中,android修复了“活动名称”属性。这对我来说是工作
星期六


1

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


1

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


1

我的问题如下:

我正在通过以下方式指定我的权限,但它不起作用。

<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:protectionLevel="developer"

我将其更改为

android:protectionLevel="signature"

问题解决了


1

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


1

我有同样的错误。我的程序包/应用程序名称中没有大写字母,并且清理项目,其他解决方案也没有帮助我。毕竟,我创建了一个新项目,并将我的东西一步一步地复制到新项目中,然后检查问题是否弹出。毕竟我有一个不错的,没有错误的项目,没有任何冗余。有时很难找到此错误的根源,因此更容易采用其他方法。

我希望这对某人有帮助!



1

您可能没有遵循标签的语法规则。例如:

<meta-data
      android:name="preloaded_fonts"/>

该标签不完整,并导致此错误。

应用清单概述



1

我知道在这里回答已经很晚了,但我犯了一个奇怪的错误,所以如果有帮助,请发布我的答案,以我为例,我错误地添加了Main Launcher活动作为别名

   <activity-alias
        android:name=".activities.SplashActivity"
        android:targetActivity=".activities.SplashActivity">

        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity-alias>

所以当我尝试运行我的应用程序时出现错误

安装APK时出错

失败[INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

我只是从活动注册中删除“ -alias”一词,然后我的应用程序成功启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.