安装错误: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED? ?

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

Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

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

138479 次浏览

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

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

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

在清单文件中,活动名称应该以“ .”开头。

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

我的问题是我写了(注意-vs. _) :

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

这可能也是导致你问题的原因。

出现此错误可能还有其他原因

android:taskAffinity="string"

应该总是以点开头,比如:

android:taskAffinity=".string"

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

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

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

字符串 @string/version_name意外地传递到一个新添加的本地化字符串文件中(它只出现在新文件中)。 在检查了所有的本地化并从除了 englocale 之外的所有文件中删除 @string/version_name之后,一切都恢复正常了

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

Com.Example.packagename

在我把它改成

com.example.packagename

已经解决了

可能还有其他格式不正常但在 IDE 中没有突出显示的文件,例如清单可能引用的 res/value/string,比如标签。

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

My problem was as follows:

I was specifying my permissions in the following way and it was not working.

<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 设备日志来诊断这个错误。期待“ W/PackageParser”一行来解释这个问题。

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

android:protectionLevel="developer"

After I've changed it to

android:protectionLevel="signature"

问题解决了

PackageParser.java 返回 INSTALL _ PARSE _ FAILED _ MANIFEST _ MALFORMED 错误代码 当它检测到 Manif.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 抱怨输出文件 “ < 提供者 > 不包括权限属性”的第214行。请参见下面 PackageParser 中返回错误代码的所有情况的清单。(PackageParser 是唯一产生 PackageManager.INSTALL _ PARSE _ FAILED _ MANIFEST _ MALFORMED 错误代码的类)

在我的示例中,PackagerParser.java 的第2490行在 parseApplication 调用的 parseProvider 函数中生成消息“ < Provider > does not include authority Attribute”。


在4.1.1版本的框架/base/core/java/android/content/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 和源代码中查找,以找出导致问题的原因。

<activity/>

之前必须定义

<activity-alias/>

我也有同样的问题,但是当我像这样调用 process 时:

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

当我换到:

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

一切开始运转。

After struggling with this issue i found out that all values which are used as a string resource value (aka @string/) in the manifests (of the libraries you are using too), are not allowed to be part of strings.xml of localizations. 示例: 如果您的清单文件使用@string/app _ name,那么 string/app _ name 的定义只能在默认值/strings.xml 中使用,而不能在您为本地化提供的替代 string.xml 文件中使用。 我希望这能帮上忙。

我以前也遇到过同样的问题,在 android 的 医生中,他们说如果你在 android:process中不使用“ :”作为前缀,你应该使用一个小写字母,但是他们从来没有说过,那么它应该是一个类似于进程名的包,就像 com.company.app.services.MyService

我出现这个错误是因为下面的代码

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

如果在清单中使用 multidex,那么应该使用 value 或 resource 添加它。 比如。

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

或者

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

then clean the project and reinstall the app.

I had the very same error. i didn't have uppercase character in my package/application name and clean the project and other solutions also didn't help me out. after all i created new project and copy my stuff to the new one step by step and check if the problem pops up. after all i had a nice and error free project without any redundancy. 有时很难找到这个错误的来源,所以很容易采取另一种方法。

i hope this helps somebody!

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

目标 <activity>需要指定为 之前<activity-alias>

In my case I was referring to an icon using an attribute like this:

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

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

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

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

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

This tag is incomplete and causes this error.

App Manifest Overview

<meta-data>中使用 android:resource而不是 android:srcandroid:srcCompat

I know it's late to answer here but i do strange mistake so post my answer if it help someone,In my case by mistake I Added Main launcher activity as alias

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

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

Error while Installing APK

失败[ INSTALL _ Parse _ FAILED _ MANIFEST _ MALFORMED ]

我只是从活动注册中删除了“-alias”这个词,我的应用程序就成功启动了。

我创建了一个新的应用程序,并将其定位为 仿生人派。一切都很好,然后最近我发现我的应用程序不安装到 Android 无及以下版本的 Android 操作系统。

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

邮件 INSTALL _ PARSE _ FAILED _ MANIFEST _ MALFORMED 导致安装失败。

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

For activity, service, receiver and all

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

这些都是我必须执行的更改,以使其在较低版本的设备上也能正常工作。

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

我的原因是:

android:resource="@color/app_green"

In my case it was due of this line:

<application
android:cantSaveState="true"

如果有任何关于为什么 android:cantSaveState不被 Android 11认可的评论,我将不胜感激。谢谢!

希望所有这些答案都不适用于 Android 12或 Android S 中的某人(对我来说不适用)[你可以检查一下,将 targetSdkVersion“ S”设置为 targetSdkVersion 30,它会工作得很好]。为此,我们需要将所有依赖项更新为最新的依赖项,并且必须添加-

android:exported="true"

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

在我的情况下,我已经删除了行 <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>

我也有同样的问题。我通过删除最后一个插件找到了解决方案。LocalNotificationnuget,它确实解决了这个问题

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

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

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

com.App.videoeditor

//to 视频编辑器

如果有人在运行 androidTest 时遇到同样的问题,请按照下面的步骤操作

请注意: androidTest install _ parse _ error _ Manif- malform 相关问题。此解决方案可以应用

无法安装应用程序: install _ parse _ false _ Manif_ malform

  • we debugged the apk using android studio, it gave error as Manifest malformed.
  • 但是对于格式不正确的 Manifest,我们已经通过添加导出关键字来处理这种情况。
  • 再次做了逐行修改,对清单进行了检查,是否解决了。还是问题没有解决

解决方案

  • 我做了 androidTest apk 的逆向工程,在那里我发现,我们使用的是较旧的库,这是旧的清单格式不支持 android 12。以及具有意图过滤器的活动和服务,而不使用 export 关键字
  • went back to android dependency library repo and found the new releases and replaced one by one and this solved my problem.

附属页面链接:

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

android:exported="true"

to your activity in Manifest.xml

像这样

<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />


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

如果您在 Android 12或 Android S中使用 目标 api 31或32,那么您将面临这个错误来解决这个问题

将此行添加到 旅客名单中的 发射活动

android:exported="true"

这个元素决定活动是否可以由其他应用程序的组件启动:

  • 如果是 “真实”,则该活动对任何应用程序都是可访问的,并且是可启动的 确切的类名。
  • 如果是 “假”,则活动只能由 相同的应用程序、具有相同用户 ID 或特权的应用程序 这是没有意图时的默认值 过滤器。

是否应该为此活动启用硬件加速呈现ーー如果应该启用,则为“ true”,如果不启用,则为“ false”。默认值为“ false”。

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

I had same issue on Android 12 and fixed it this:

如果您的应用程序针对 Android 12或更高版本,并且包含使用意图过滤器的活动、服务或广播接收器,则必须显式声明这些应用程序组件的 Android: export 属性。 如果应用程序组件包含 LAUNCHER 类别,则将 android: 导出设置为 true。

我还更新了第三方依赖关系。

我已经将我的代码更新到 Android12,并且通过在我的

AndroidManifest.xml

android:exported="true"

如果 android:exported="true"不适合你,

打开文件 build.gradle (:app) 删除这一行:

debugImplementation 'androidx.fragment:fragment-testing:1.3.6'

如果你有 AndroidStudio 4.1.2,尝试添加: 文件“ AndroidManifest.xml”中的 android:exported="true"android.name=".MainActivity"

Platform/android/AndroidManifest.xml

你的申请和活动应该是这样的:

<application .....
<activity android:exported="true" android:name=".MainActivity"

[解决方案] 转到您的项目文件夹并打开 AndroidManifest.xml 文件

在活动中添加以下代码

输出 = “ true”

例子

<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
</activity>

Since now app update requires to target API level 31 (Android 12), you will need to add android:exported (true for main activity) flag to activity, service or receivers which includes intent:filter

 <activity android:exported="false" >
<intent-filter>
</intent-filter>
</activity>


<service android:exported="false">
<intent-filter>
</intent-filter>
</service>

您可以尝试在清单文件中添加此内容 申请-> 活动

android:exported="true"

希望这个能帮上忙。