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


95

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

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

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


1
В файле manifest.xml есть много ошибок, которые могут вызвать этот код ошибки, см. Ниже ответ на список ошибок PackageParser.java.
Ribo

1
Вы не приняли ответ?
shieldgenerator7

Перейдите по этой ссылке. Вы получите ответ stackoverflow.com/questions/16015033/…
Шритам Джагадев

Проверьте эту ссылку, чтобы получить четкий ответ
Vishnuvathsan

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

Ответы:


80

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

android:taskAffinity="string" 

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

android:taskAffinity=".string" 

4
Проблема решена, но где я могу найти эту информацию в документации? здесь нет ничего о DOT: developer.android.com/guide/topics/manifest/…
Бето Калдас,

Ты спас мне день
Вальдманн

69

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


в манифесте вы объявили атрибут пакета с помощью package, поэтому при создании действия вы ставите "." чтобы ему предшествовало имя пакета, вы также можете ввести полное имя действия, например: "com.example.test.Activity_Name" или ".Activity_Name"
Amt87

43

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

Com.Example.packagename

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

com.example.packagename

это было решено


это решило мою проблему. Мой класс активности находился в пакете под названием «Действия», и я добавляю его в манифест до появления этой ошибки. когда я изменил имя пакета действий на действия, он решил. Спасибо
alicanbatur

2
Я думаю, вы можете использовать заглавные буквы в названии пакета, однако первая буква в названии пакета не может быть заглавной. Итак, "myActivity" = OK, но "MyActivity" = Not OK
Gene

29

Код ошибки 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 «<provider> не включает атрибут полномочий» . См. Приведенный ниже список всех случаев в 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 и источнике, чтобы выяснить, что вызывает проблему.


1
спасибо за то, что помогли нам понять, как решить общую проблему, в дополнение к предоставлению конкретного решения.
Vinay W

1
Для этого исключения есть несколько причин. Это наиболее логичный ответ.
Meghal Shah

1
Спасибо - в моем случае у меня была ошибка, IntentFilter.MalformedMimeTypeExceptionкоторую я пропустил.
CzarMatt 04

Это безусловно правильный ответ. Насколько полезен logcat?
Кришнабхадра

10

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

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

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

10

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

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

Когда я перехожу на:

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

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


2
Добавив ":", вы изменили семантику кода. Во втором случае приложение создаст новый процесс для службы, доступной только этому приложению. developer.android.com/guide/topics/manifest/… . Вместо этого ошибку можно исправить, указав полное имя пакета вместо слова «экран».
shshnk

10

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


1
Даже у меня была такая же проблема. Они должны были упомянуть, что нам нужно включить имя пакета, если не используется ':'
shshnk

8

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


@IgorG. Извините, я потерял свою точку зрения :-( Но новый SDK удалил это поле ( здесь ).

1
Спасибо. Я назвал процесс таким образом: android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services - это пакет, в котором находится моя служба), и после этого ошибка установки не появится.
Максим Дмитриев

8

Моя проблема заключалась в том, что я написал (обратите внимание на - vs. _):

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

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


3

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


Пожалуйста, дополните свой ответ подробностями
kolossus

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, все снова заработало


3

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


3
<activity/>

должно быть определено ДО

<activity-alias/>

Хотел бы я снова проголосовать за это. Второй раз мне помог этот ответ
cottonBallPaws

3

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

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


3

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


3

это может быть по многим причинам, но для меня это было решено путем изменения имени пакета на имя в нижнем регистре (имя пакета было «Действия», решенное с помощью действий).


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

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


2

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

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

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


Собственно мой случай. Мне нужно, чтобы он был другого цвета в зависимости от предпочтений пользователя. К сожалению, android: resource не принимает атрибуты ...
Эльяким Леви

2

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

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

Ошибка установки с сообщением 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" />

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


В Xamarin android исправлен атрибут имени действия. Это работа для меня
Sovary


1

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


1

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


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

1

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

android:protectionLevel="developer"

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

android:protectionLevel="signature"

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


1

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


1

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

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


1

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




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» из регистрации активности, и мое приложение успешно запускается.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.