105

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

安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

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

4

38 回答 38

89

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

android:taskAffinity="string" 

应始终以点开头,例如:

android:taskAffinity=".string" 
于 2012-12-23T21:30:33.713 回答
69

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

于 2011-07-25T12:24:28.557 回答
47

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

Com.Example.packagename

在我把它改成类似的东西之后

com.example.packagename

解决了

于 2013-09-04T06:45:18.750 回答
37

当 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 文件的第 #214 行"<provider> doesn't include authority attribute"。请参阅下面的 PackageParser 中返回该错误代码的所有情况的列表。(PackageParser 是唯一产生 PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 错误代码的类)

在我的情况下,消息“<provider> 不包括权限属性”是由 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 和源代码中四处寻找导致问题的原因。

于 2014-09-03T13:44:20.213 回答
10

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

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

当我更改为:

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

一切都开始工作。

于 2015-01-08T15:53:01.450 回答
10

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

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

<activity android:name="MainActivity"></activity>
于 2011-05-19T16:54:16.237 回答
10

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

于 2015-08-28T15:11:06.297 回答
8

任何名称如android:name,android:process都应采用包名的形式:以 开头a..z,与其他以 结合.,不要以....结尾

于 2012-02-11T21:23:23.173 回答
8

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

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

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

于 2012-12-03T10:36:16.253 回答
4

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

于 2014-07-15T05:12:15.180 回答
4

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

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

于 2016-05-30T08:30:12.230 回答
4

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

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

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

于 2017-04-09T13:59:14.417 回答
4

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

android:exported="true"

到任何在应用程序的 AndroidManifest.xml 文件中声明了意图过滤器的活动、活动别名、服务或接收器组件。因为在 Android 12中几乎没有改变行为。

于 2021-07-13T14:56:18.530 回答
3

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

于 2013-01-26T18:32:02.247 回答
3
<activity/>

必须在之前定义

<activity-alias/>
于 2014-10-27T17:06:30.383 回答
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 之外的每个文件中删除后,一切都恢复正常

于 2013-07-30T14:15:50.577 回答
3

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

于 2019-11-07T12:06:28.583 回答
3

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

于 2017-07-08T17:57:38.773 回答
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" />

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

于 2019-08-27T10:38:06.833 回答
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" />

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

于 2016-12-12T10:27:59.390 回答
2

目标<activity>需要<activity-alias>. _

于 2017-03-29T14:39:05.510 回答
1

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

于 2013-11-21T15:48:46.507 回答
1

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

于 2013-09-19T13:01:28.580 回答
1

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

于 2015-03-13T11:44:06.327 回答
1

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

android:protectionLevel="developer"

在我将其更改为

android:protectionLevel="signature"

问题已解决

于 2014-07-24T06:03:30.383 回答
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" />
于 2013-12-21T08:39:43.247 回答
1

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

我希望这对某人有帮助!

于 2017-02-04T14:48:20.813 回答
1

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

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

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

应用清单概述

于 2018-08-07T05:27:55.107 回答
1

我知道在这里回答已经很晚了,但是我犯了一个奇怪的错误,所以如果它对某人有帮助,请发布我的答案,在我的情况下,我错误地将主启动器活动添加为别名

   <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”字样,我的应用程序成功启动。

于 2019-06-25T04:57:01.040 回答
1

使用android:resourcein<meta-data>代替android:srcandandroid:srcCompat

于 2018-11-27T18:17:24.487 回答
1

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

于 2017-02-21T10:46:27.397 回答
0

就我而言,原因是:

android:resource="@color/app_green"
于 2020-08-17T22:51:55.507 回答
0

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

com.App.videoeditor

//到 com.app.videoeditor

于 2021-11-11T13:53:28.830 回答
0

就我而言,这是由于这条线:

<application
        android:cantSaveState="true"

我将不胜感激任何评论为什么android:cantSaveState不能被 Android 11 识别。谢谢!

于 2021-05-17T12:46:18.367 回答
0

如果任何人在运行 androidTest 时遇到同样的问题。请遵循这个

请注意:androidTest install_parse_failed_manifest_malformed 相关问题。可以应用此解决方案

无法安装应用程序:install_parse_failed_manifest_malformed

  • 我们使用 android studio 调试了 apk,它给出了 Manifest 格式错误的错误。
  • 但是对于格式错误的 Manifest,我们已经通过添加 export 关键字来处理该案例。
  • 再次对清单进行逐行修改以检查是否解决。问题仍然没有解决

解决方案

  • 我对 androidTest apk 进行了逆向工程,在那里我发现,我们使用的是较旧的库,这是不支持 android 12 的较旧的清单格式。以及带有意图过滤器的活动和服务不使用 export 关键字
  • 回到android依赖库repo并找到新版本并一一替换,这解决了我的问题。

依赖页面链接:

https://developer.android.com/jetpack/androidx/releases/test

于 2021-11-18T04:15:38.240 回答
0

今天我在测试一个项目时发现了同样的问题,但是线程中提供的解决方案都不起作用,我会发布我的解决方案以防有人尝试类似的东西。

我的错误是包含连字符的包名称(例如“my -home”),并且在 taskAffinity 中翻译的内容类似于(“com.skd.my-home”)导致错误。当我删除连字符并设置下划线之类的另一个有效字符时,我的代码可以正常工作并安装在我的设备中。

于 2021-08-18T15:31:41.707 回答
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>
于 2021-07-24T19:27:46.430 回答
-1

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

于 2021-08-05T14:22:14.947 回答