安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

时间:2011-05-19 09:30:51

标签: android manifest failed-installation

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

安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

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

35 个答案:

答案 0 :(得分:66)

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

答案 1 :(得分:63)

此错误可能还有其他原因。属性

android:taskAffinity="string" 

应始终以点开头,例如:

android:taskAffinity=".string" 

答案 2 :(得分:38)

我遇到了这个错误,因为我的包名中有大写字母,如此

Com.Example.packagename

在我将其改为

之后
com.example.packagename

它已经解决了

答案 3 :(得分:27)

PackageParser.java返回INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误代码 当它检测到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行&#34;&lt; provider&gt;不包括权限属性&#34; 。请参阅PackageParser中返回该错误代码的所有案例的下面列表。 (PackageParser是唯一产生PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误代码的类)

在我的情况下,消息&#34;&lt; provider&gt;不包括权限属性&#34;由parseApplication调用的parseProvider函数中的PackagerParser.java的第2490行生成。


在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和来源中找出原因,找出导致问题的原因。

答案 4 :(得分:9)

检查清单文件

中的活动名称

或主要活动/类

中的包名称
<activity android:name="MainActivity"></activity>

答案 5 :(得分:9)

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

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

当我改为:

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

一切都开始了。

答案 6 :(得分:8)

我之前遇到了同样的问题,在android docs中他们说如果你不使用“:”作为android:process中的前缀,你应该使用小写字母,但是他们从来没有说过,那么它应该像流程名称一样包,如com.company.app.services.MyService

答案 7 :(得分:7)

我的问题是我写过(注意 - 与_相比):

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

根据活动。这也可能是您的问题的原因。

答案 8 :(得分:7)

android:nameandroid:process等任何名称都应采用包名称的形式:以a..z开头,与其他人.合并,不以{{结尾1}} ...

答案 9 :(得分: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意外地传入了一个新添加的本地化字符串文件(它只出现在新文件中)。 在检查了所有本地化并从除了eng locale之外的每个文件中删除@string/version_name之后,一切都再次起作用

答案 10 :(得分:2)

得到了同样的错误! 有空权限标签,这导致了问题!

答案 11 :(得分:2)

<activity/>

必须在之前定义

<activity-alias/>

答案 12 :(得分: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="*/*"时修复了此错误。

答案 13 :(得分:1)

阅读您的Android设备日志以诊断此错误。期待&#34; W / PackageParser&#34;解释问题的一行。

答案 14 :(得分:1)

就我而言,我指的是一个使用如下属性的图标:

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

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

答案 15 :(得分:1)

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

答案 16 :(得分: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" />

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

答案 17 :(得分:1)

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

答案 18 :(得分:1)

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

在安装时,我会看到失败消息

  

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

因此,我所做的修复如下,它们都只需要在<?php include 'includes/notif-info-display.php'; ?>文件中完成。

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

AndroidManifest.xml

对于清单权限

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

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

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

答案 19 :(得分:0)

group1 group2 aggGroup1.2 1 b -1.0341 2 a -0.5696 中使用android:resource,而不是<meta-data>android:src

答案 20 :(得分:0)

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

答案 21 :(得分:0)

我知道在这里回答已经晚了,但是我犯了一个奇怪的错误,因此如果有帮助,请发布我的答案。在我的情况下,我错误地添加了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”一词,然后我的应用程序成功启动。

答案 22 :(得分:0)

在我看来,原因是:

android:resource="@color/app_green"

答案 23 :(得分:0)

就我而言,这是由于这一行:

<application
        android:cantSaveState="true"

对于 Android 11 无法识别 android:cantSaveState 的任何评论,我将不胜感激。谢谢!

答案 24 :(得分:0)

可能所有这些答案都不适用于 Android 12 或 Android S 中的某人(对我不起作用)[您可以检查以将 targetSdkVersion "S" 设为 targetSdkVersion 30,它会正常工作]。为此,为了工作,我们需要将所有依赖项更新到最新的依赖项,并且必须添加 -

android:exported="true"

到任何在应用程序的 AndroidManifest.xml 文件中声明的 、 或 组件。因为 Android 12 中的 behaviors changed 很少。

答案 25 :(得分:0)

就我而言,我删除了 <action android:name="android.intent.action.MAIN" /> 行,将其添加回来让应用运行

<queries>

    <!-- Intent filter signatures that you are going to query: -->
    <intent>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent>
</queries>

答案 26 :(得分:0)

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

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

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

App Manifest Overview

答案 27 :(得分:0)

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

答案 28 :(得分:0)

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

答案 29 :(得分:0)

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

我希望这有助于某人!

答案 30 :(得分:0)

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

答案 31 :(得分:0)

我遇到了这个错误,因为我有下面一行。

android:protectionLevel="developer"

在我将其更改为

之后
android:protectionLevel="signature"

问题已解决

答案 32 :(得分: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" />

答案 33 :(得分:0)

在我的情况下,原因是&lt;中缺少android:name属性activity-alias&gt;。 它必须是&lt; activity-alias&gt;虽然它不能命名现有的类。 有趣的是 - 项目编译没有问题。

答案 34 :(得分:-1)

我遇到了同样的问题。我通过删除最后一个包含的 plugin.LocalNotification nuget 找到了解决方案,它确实解决了