安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

S.P*_*S.P 86 android manifest failed-installation

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

安装错误:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

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

小智 67

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


And*_*ndy 67

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

android:taskAffinity="string" 
Run Code Online (Sandbox Code Playgroud)

应始终以点开头,例如:

android:taskAffinity=".string" 
Run Code Online (Sandbox Code Playgroud)

  • 问题解决了,但是,我在哪里可以在文档中找到这些信息?这里没有关于DOT的信息:https://developer.android.com/guide/topics/manifest/activity-element.html#aff (2认同)
  • 我们到底该怎么知道的? (2认同)
  • 从技术上讲,taskAffinity 不必以点开头,只需包含即可。 (2认同)

Baj*_*dda 51

在Android 12或Android S中[您可以检查将targetSdkVersion“S”设置为targetSdkVersion 30,它将正常工作]。为此,为了工作,我们需要将所有依赖项更新到最新的依赖项,并且必须添加 -

\n
android:exported="true"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n


小智 41

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

Com.Example.packagename
Run Code Online (Sandbox Code Playgroud)

在我改变它之后

com.example.packagename
Run Code Online (Sandbox Code Playgroud)

它解决了

  • 我认为你可以在包名中加上大写字母,但是包名中的第一个字母不能是大写字母.所以"myActivity"= OK但"MyActivity"=不行 (2认同)

Sam*_*man 29

添加

android:exported="true"
Run Code Online (Sandbox Code Playgroud)

到 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>
Run Code Online (Sandbox Code Playgroud)

  • 在这里您可以找到解释:https://developer.android.com/guide/topics/manifest/activity-element#exported (2认同)

Rib*_*ibo 28

当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
Run Code Online (Sandbox Code Playgroud)

在上面的第四行中,您可以看到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
Run Code Online (Sandbox Code Playgroud)

遗憾的是你必须在logcat和源代码中找到解决问题原因的方法.

  • 感谢您除了提供具体的解决方案之外,还帮助我们了解如何解决一般问题。 (2认同)

小智 10

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

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

<activity android:name="MainActivity"></activity>
Run Code Online (Sandbox Code Playgroud)


Daw*_*ozd 10

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

<service
    android:name="com.dexode.tama.AppService"
    android:process="screen" >
</service>
Run Code Online (Sandbox Code Playgroud)

当我改为:

<service
    android:name="com.dexode.tama.AppService"
    android:process=":screen" >
</service>
Run Code Online (Sandbox Code Playgroud)

一切都开始了.

  • 通过添加':',您更改了代码的语义.在第二种情况下,应用程序将为该服务创建一个新流程,该流程仅适用于该应用程序.http://developer.android.com/guide/topics/manifest/service-element.html#proc.相反,可以通过提及完整的包名称而不仅仅是单词"screen"来修复错误. (2认同)

4gu*_*71n 9

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


小智 8

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


Yma*_*bob 8

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

<meta_data ... /> 
<!-- instead of -->
<meta-data ... />
Run Code Online (Sandbox Code Playgroud)

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


Dan*_*ich 5

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


M.S*_*eer 5

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

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="?attr/ic_notify" />
Run Code Online (Sandbox Code Playgroud)

而不是可绘制的:

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_notify" />
Run Code Online (Sandbox Code Playgroud)

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


小智 5

        <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>
Run Code Online (Sandbox Code Playgroud)

如果您使用的是目标API 31+,则必须添加导出true