Ошибка установки: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

Я разрабатываю небольшое приложение, в котором перечислены все приложения, присутствующие/установленные на устройстве Android. Но я получаю ошибку ниже, пока я пытаюсь запустить код.

Ошибка установки: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Пожалуйста, помогите мне разобраться с этой ошибкой.

Ответ 1

Название действия должно иметь префикс ".". в файле манифеста.

Ответ 2

У этой ошибки может быть другая причина. Атрибут

android:taskAffinity="string" 

Всегда следует начинать с точки, например:

android:taskAffinity=".string" 

Ответ 3

У меня была эта ошибка, потому что у меня были заглавные буквы в имени моего пакета, подобном этому

Com.Example.packagename

после того, как я изменил его на что-то вроде

Com.Example.packagename

было решено

Ответ 4

Код ошибки INSTALL_PARSE_FAILED_MANIFEST_MALFORMED возвращается PackageParser.java когда он обнаруживает любое из большого количества ошибок в файле 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 жалуется, что строка # 214 файла manifest.xml "< поставщик > не включает атрибут полномочий. См. Список ниже всех случаев в PackageParser, который возвращает этот код ошибки. (PackageParser - единственный класс, который создает код ошибки PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)

В моем случае сообщение "<provider> не включает атрибут полномочий" создается по линии 2490 PackagerParser.java в функции parseProvider, вызванной parseApplication.


В версии 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 и источнике, чтобы выяснить, что вызывает проблему.

Ответ 5

Проверьте название действия в файле манифеста

или имя пакета в основной активности/классе

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

Ответ 6

У меня такая же проблема, но когда я вызываю процесс следующим образом:

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

Когда я меняю на:

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

Все начинает работать.

Ответ 7

Я столкнулся с той же проблемой, что и в android docs, они сказали, что если вы не используете ":" в качестве префикса в android:process, вы должны используйте строчную букву, но они никогда не говорили об этом, тогда это должен быть пакет, такой как имя процесса, например com.company.app.services.MyService

Ответ 8

Любое имя, такое как android:name, android:process должно быть в виде имени пакета: начинается с a..z, объединяется с другими с ., не заканчивается на ....

Ответ 9

Моя проблема была в том, что я написал (обратите внимание на - против _):

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

под действием. Это может быть причиной вашей проблемы.

Ответ 10

Получена такая же ошибка! имел пустой тег разрешения, и это вызывало проблему!

Ответ 11

Я столкнулся с той же проблемой после добавления локализации

<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 из каждого файла, кроме русского языка, все снова работало

Ответ 12

Прочтите свои журналы устройств Android, чтобы диагностировать эту ошибку. Ожидайте строку "W/PackageParser", объясняющую проблему.

Ответ 13

<activity/>

должен быть определен ПЕРЕД

<activity-alias/>

Ответ 14

У меня была эта ошибка, потому что код ниже

<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="*/*", исправил эту ошибку.

Ответ 15

Если вы используете 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" />

затем очистите проект и переустановите приложение.

Ответ 16

<activity-alias> target <activity> должен быть указан перед псевдонимом.

Ответ 17

В моем случае я имел в виду значок с атрибутом, подобным этому:

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

Я использую этот атрибут в нескольких местах, но кажется, что он не работает в манифесте.

Ответ 18

активность, созданная папкой имен, должна быть маленькими буквами. Не используйте заглавные буквы для имени папки активности... всегда лучше использовать маленькие буквы.

Ответ 19

Могут быть другие файлы, которые были искажены, но не выделены в среде IDE, например res/values ​​/string, которые манифест может ссылаться на такие вещи, как метки.

Ответ 20

В моем случае причиной было отсутствие атрибута android: name в < псевдоним активности > . Это необходимо для < псевдоним активности, хотя он не должен называть существующий класс. Забавно - проект компилируется без проблем.

Ответ 21

Моя проблема была следующей:

Я указывал свои права следующим образом и не работал.

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

Ответ 22

У меня была эта ошибка, потому что у меня была строка ниже.

android:protectionLevel="developer"

После того, как я изменил его на

android:protectionLevel="signature"

проблема решена

Ответ 23

После борьбы с этой проблемой я узнал, что все значения, которые используются как значение строкового ресурса (aka @string/) в манифесте (из библиотек, которые вы используете), не могут быть частью строк. xml локализации. Пример: если файл манифеста с использованием @string/app_name, определение string/app_name разрешено только в ваших значениях по умолчанию /strings.xml, а не в альтернативном файле string.xml, который вы предоставляете для локализации. Надеюсь, это поможет...

Ответ 24

У меня была такая же ошибка. у меня не было символа верхнего регистра в моем названии пакета/приложения и очистка проекта, а другие решения также не помогли мне. ведь я создал новый проект и копировал свои материалы на новый шаг за шагом и проверял, всплывает ли проблема. в конце концов, у меня был хороший проект без ошибок без избыточности. иногда трудно найти источник этой ошибки, поэтому легче принять другой подход.

Надеюсь, это поможет кому-то!

Ответ 25

Я столкнулся с этой ошибкой, когда я поместил класс Application в неправильный пакет!

Ответ 26

Возможно, вы не следовали правилам синтаксиса тега. например:

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

Этот тег является неполным и вызывает эту ошибку.

Обзор манифеста приложения

Ответ 27

Используйте android:resource в <meta-data> вместо android:src и android:srcCompat

Ответ 28

Я знаю, что уже поздно отвечать здесь, но я делаю странную ошибку, поэтому опубликуйте свой ответ, если он кому-то поможет, В моем случае по ошибке я добавил активность 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" из регистрации активности, и мое приложение успешно запускается.

Ответ 29

Я создаю новое приложение и нацеливаю его на Android Pie. Все работало хорошо и хорошо, тогда в последнее время я обнаружил, что мое приложение не устанавливается на Android Naught и ниже версии ОС Android.

При установке я вижу сообщение об ошибке

Installation failed with message 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" />

Это были все изменения, которые я должен был выполнить, чтобы заставить его работать и на устройствах с более низкой версией.