Помилка встановлення: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?


93

Я розробляю невеликий додаток, в якому перераховані всі програми, наявні / встановлені на пристрої Android. Але я отримую помилку нижче, поки я намагаюся запустити код.

Помилка встановлення: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Будь ласка, хтось може допомогти мені розібратися з цією помилкою.


1
У файлі manifest.xml є багато помилок, які можуть спричинити цей код помилки, див. Відповідь на список помилок PackageParser.java нижче.
Рібо

1
Ви не прийняли відповідь?
shieldgenerator7

Перейдіть по цьому посиланню Ви отримаєте відповідь stackoverflow.com/questions/16015033 / ...
Sritam Jagadev

Перевірте це посилання, щоб отримати чітку відповідь
Вішнуватсан

Якщо у вас є різні пакети та класи у вашому проекті. Змініть назву пакета з верхніх літер на нижчі літери. Ім'я пакета має починатися з нижчих літер
Waheed Akhtar,

Відповіді:


79

Ця помилка може бути іншою. Атрибут

android:taskAffinity="string" 

Починати завжди з крапки, наприклад:

android:taskAffinity=".string" 

4
Проблема вирішена для мене, але де я можу знайти цю інформацію в документації? тут немає нічого про DOT: developer.android.com/guide/topics/manifest/…
Beto Caldas

68

У назві діяльності слід вводити префікс "." у вашому файлі маніфесту.


у Manifest ви оголосили атрибут package разом із пакетом, тому при створенні активності ви ставите "." перед ім'ям пакета ви також можете ввести повне ім'я діяльності, наприклад: "com.example.test.Activity_Name" або ".Activity_Name"
Amt87

42

У мене сталася ця помилка, тому що в назві мого пакета були такі великі літери, як це

Com.Example.packagename

після того, як я змінив його на щось на зразок

com.example.packagename

це було вирішено


це вирішило мою проблему. Мій клас активності знаходився в пакеті, який називався Activity, і я додаю його до маніфесту до появи цієї помилки. коли я змінив ім'я пакета Activity на activities, це вирішилось. Дякую
alicanbatur

2
Я думаю, ви можете мати великі літери в назві пакета, однак перша буква в назві пакету не може бути великою літерою. Отже, "myActivity" = ОК, але "MyActivity" = Не в порядку
Ген

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 framework / 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
Для цього винятку існує кілька причин. Це найбільш логічна відповідь.
Мегал Шах

1
Дякую - у моєму випадку у мене було IntentFilter.MalformedMimeTypeExceptionте, що я пропустив.
CzarMatt

На сьогоднішній день це правильна відповідь. Наскільки корисний 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

Моя проблема полягала в тому, що я написав (Зверніть увагу - проти _):

<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 locale, все запрацювало знову


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

це може бути з багатьох причин, але для мене це було вирішено шляхом зміни назви пакета з нижньою літерою (ім'я пакета - Activity, вирішується за допомогою діяльності).


2

Якщо ви використовуєте мультидекс у маніфесті, тоді його слід додати зі значенням або ресурсом. Подібно до..

<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: ресурс не приймає атрибути ...
Еляким Леві

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 андроїд виправлено на атрибуті Activity Name. Це робота для мене
Совари


1

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


1

У моєму випадку причиною була відсутність атрибута android: name у <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

Після боротьби з цією проблемою я виявив, що всі значення, які використовуються як значення рядкового значення ресурсу (aka @ string /) у маніфестах (бібліотек, які ви також використовуєте), не можуть бути частиною strings.xml локалізацій . Приклад: якщо ваш файл маніфестів використовує @ string / app_name, визначення рядка / 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.