安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

问题描述 投票:81回答:27

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

安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

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

android manifest failed-installation
27个回答
66
投票

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


2
投票

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


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之后,一切都恢复了


2
投票
<activity/>

必须在之前定义

<activity-alias/>

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

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


1
投票

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

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


1
投票

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


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

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


0
投票

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


0
投票

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


63
投票

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

android:taskAffinity="string" 

应始终以点开头,例如:

android:taskAffinity=".string" 

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

0
投票

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

android:protectionLevel="developer"

我把它改成之后

android:protectionLevel="signature"

问题解决了


0
投票

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


0
投票

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

我希望这有助于某人!


0
投票

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


0
投票

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


0
投票

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

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

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

App Manifest Overview


0
投票

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


38
投票

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

Com.Example.packagename

在我改变它之后

com.example.packagename

它解决了


27
投票

当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行不包含authority属性”。请参阅PackageParser中返回该错误代码的所有案例的下面列表。 (PackageParser是唯一生成PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误代码的类)

在我的例子中,消息“<provider>不包括authority属性”由parseApplication调用的parseProvider函数中的PackagerParser.java的第2490行产生。


从4.1.1版本的frameworks / 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和源代码中找到解决问题原因的方法。


9
投票

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

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

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

9
投票

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

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

当我改为:

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

一切都开始了。


8
投票

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


7
投票

任何名称,如android:nameandroid:process应该是包名称的形式:从a..z开始,与.的其他人结合,不要以.结束...


7
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.