Збірка маніфесту не вдалася з декількома помилками в Android Studio


250

Отже, я початківець в Android та Java. Я тільки почав вчитися. Поки я сьогодні експериментував з Намір , я допустив помилку.

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed with multiple errors, see logs

Я знайшов тут деякі рішення і спробував їх здійснити, але це не вийшло.

Це мій build.gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.0"

defaultConfig {
    applicationId "com.example.rohan.petadoptionthing"
    minSdkVersion 10
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.0'
}

Це мій AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>

package="com.example.rohan.petadoptionthing" >

<application

    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".Second"
        />

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


</application>

Це мій перший тиждень кодування, мені шкода, якщо це справді нерозумно. Я справді новачок у цьому і не знайшов іншого місця, щоб запитати. Вибачте, якщо я порушив якісь правила


2
видаліть рядок <активність android: name = ". MainActivity" /> у своєму файлі menifest.xml
Pankaj Talaviya

10
Щоб отримати детальну інформацію про помилку, ви можете перевірити Gradle Console в Android Studio в нижньому правому куті.
DragonT

Сподіваюся, це посилання стане в нагоді.
Мортреза н.е.

Я отримав ту саму помилку. Але вирішив це, зберігаючи однаковий мінімум SDK в проекті та бібліотеці.
Раджа Джавахар

youtu.be/K88WaSm3q8Y "Злиття маніфесту не вдалось із численними помилками в Android Studio"?
Роман Покровський

Відповіді:


966

Відкрийте маніфест програми ( AndroidManifest.xml) та натисніть на Merged Manifest. Перевірте зображення нижче:

андроїд-маніфест-злиття-особливість

З зображення ви бачите помилку в правому стовпці, спробуйте вирішити помилку. Можливо, це допоможе комусь із тією ж проблемою. Детальніше читайте тут .


5
блискучий ... не можу знайти слів, щоб висловити свою подяку
Шахзад

2
у моєму випадку я прокрутив її трохи вниз, щоб побачити помилки
CodeToLife

На жаль, в Android Studio 3.5.2 немає вкладки "Об'єднаний маніфест".
FractalBob

@FractalBob Я працюю в розділі 3.5.2 і переглядаю вкладку "Об'єднаний маніфест". Можливо, у вас виникли інші помилки перед об'єднанням маніфестів.
sonyisda1

@ sonyisda1 Ви працюєте в середовищі Linux? У мене є Ubuntu 18.04 LTS.
FractalBob

120

Видаліть <activity android:name=".MainActivity"/>з вашого основного файлу. Як ви вже визначили це:

 <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Отже, файл Manifest демонструє неоднозначність.


31
Це дуже погано, що це прийнята відповідь, коли вона фіксує лише код Роуен, але абсолютно не корисна для будь-кого іншого. Відповідь CLIFFORD насправді показує вам, як "бачити журнали", як підказує повідомлення про помилку.
Андрій Костер

Це дуже добре, лише перевірити та видалити будь-який повторюваний запис у файлі AndroidManifest.xml.
vishwajit76

61

Для мене ЦЕ працює -

Пошук помилок об’єднання в AndroidManifest.xml

введіть тут опис зображення

Клацніть на об'єднаний маніфест у AndroidManifest.xml

введіть тут опис зображення

Ви можете переглянути явну помилку злиття у правій колонці. Це може допомогти вирішити цю проблему.


3
Це загальне виправлення цієї проблеми. Це допоможе вам знайти справжню причину будь-якої проблеми з цього приводу.
JoeGalind

60

Я також стикався з тими ж проблемами, і після багатьох досліджень знайшов рішення:

  1. Ваша версія min sdk повинна бути такою ж, як і в модулях, які ви використовуєте, наприклад: версія вашого модуля min sdk - 14, а версія min sdk додатка - 9.
  2. Якщо збірка версії вашого додатка та модулів не однакова. Знову ж це має бути ** Коротше кажучи, ваш додаток build.gradleта маніфест повинні мати однакові конфігурації **
  3. У файлі маніфесту двічі не додано жодних копій на зразок однакових дозволів, двічі згадується однакова активність.
  4. Якщо ви видалите будь-яку активність зі свого проекту, видаліть її також із файлу маніфесту.
  5. Іноді це пов’язано з міткою, значком тощо тегом файлу маніфесту:

а) Додайте xmlns:toolsрядок до тегу маніфесту.

b) Додати tools:replace=або tools:ignore=в тег програми.

Приклад:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.slinfy.ikharelimiteduk"
    xmlns:tools="http://schemas.android.com/tools"
    android:versionCode="1"
    android:versionName="1.0" >

  <application
      tools:replace="icon, label"
      android:label="myApp"
      android:name="com.example.MyApplication"
      android:allowBackup="true"
      android:hardwareAccelerated="false"
      android:icon="@drawable/ic_launcher"
      android:theme="@style/Theme.AppCompat" >
  </application>

</manifest>
  1. Якщо дві залежності мають не той самий приклад версії: ви використовуєте залежність для appcompat v7: 26.0.0 та для facebook com.facebook.android: підтримка: cardview-v7: 25.3.1 та appcompat v7: 26.0.0 використовує перегляд карти версії v7: 26.0.0, тому в двох бібліотеках є розбіжність і, таким чином, дають помилку

Помилка: Не вдалося виконати завдання ": app: processDebugManifest".

Помилка злиття маніфесту: Attribute meta-data#android.support.VERSION@value value = (26.0.0-alpha1) from [com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml: 27: 9 -38 також присутній у [com.android.support:cardview-v7:25.3.1] AndroidManifest.xml: 24: 9-31 значення = (25.3.1). Пропозиція: додайте до інструменту AndroidManifest.xml: 25: 5-27: 41 елемент "tools: substitute =" android: value "" для переосмислення.

Отже, використовуючи appcompat версії 25.3.1, ми можемо уникнути цієї помилки

Розглядаючи вищезазначені моменти на увазі, ви позбудетеся цього дратівливого питання. Ви також можете перевірити мій блог https://wordpress.com/post/dhingrakimmi.wordpress.com/23


1
в моєму випадку це було пов’язано з темою модуля, який я додав, тому я використовував як інструменти: заміни "піктограму, мітку, тему"
turbandroid

у моєму випадку це було пов’язано з темою модуля, який я додав, тому я використовував як інструменти: заміну "значок, мітка, тема" та xmlns: tools = " schemas.android.com/tools ". дякую @ O'one
alfo888_ibg

14

Окрім наявних рішень, будь ласка, перевірте це також.
Якщо ви встановили android:allowBackup="false"у своєму, AndroidManifest.xmlто може виникнути конфлікт для android:allowBackup="true"інших залежностей.

Рішення
Як запропонував @CLIFFORD PY, перейдіть до Merged Manifestсвого AndroidManifest.xml. Android - студія запропонує додати tools:replace="android:allowBackup"в <application />у вашому AndroidManifest.xml.


12

Я зіткнувся з тією ж проблемою, і я щойно додав один рядок у свій маніфест.xml, і він працював на мене.

tools:replace="android:allowBackup,icon,theme,label,name"> 

додати цей рядок під

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:screenOrientation="portrait"
    android:supportsRtl="true"
    android:theme="@style/AppThemecustom"
    tools:replace="android:allowBackup,icon,theme,label">

Сподіваюся, це допоможе.


Дуже дякую! Я стикався з цією проблемою у дуже специфічному сценарії, спричиненому сторінкою підтримки Zendesk, коли натискав на "вкласти файл". Спробував так багато відповідей з різних питань, і лише ваш коментар допоміг!
Наталі

@Natalie Я радий, що це допомогло :)
Pre_hacker

11

Просто додайте код нижче в тег програми Manifest програми ...

<application
        tools:node="replace">

Дякую тобі
tej shah

8

У моєму випадку вона виявляла помилку, оскільки було надмірність <uses-permission>елемента. Отже, будь ласка, перевірте у своєму AndroidManifest.xmlфайлі те саме.

Версія Android Studio - 3.0.1

Операційна система - це Windows 7

Ось скріншот для довідки.

Знімок екрана, який показує надмірність у файлі маніфесту.


Хоча це було розміщено перед відповіддю @ CLIFFORD-PY, пошук помилок об’єднання за допомогою перегляду "Об'єднаний маніфест" призведе до цієї конкретної зайвої помилки.
sonyisda1


7

Зазвичай виникає, коли у вашому маніфесті виникають помилки. Відкрийте AndroidManifest.xml. Клацніть на вкладеній вкладці маніфестів. Помилки можна побачити там. Також можна включити пропозиції, згадані там. Коли у мене була схожа проблема під час імпорту com.google.android.gms .maps.model.LatLng, він запропонував мені включити інструменти: overrideLibrary = "com.google.android.gms.maps" у тег програми, і збірка була успішною.


3

У моєму випадку я це виправив

build.gradle (Модуль: додаток)

defaultConfig {
----------
multiDexEnabled true
}
dependencies {
    ...........
    implementation 'com.google.android.gms:play-services-gcm:11.0.2'
    implementation 'com.onesignal:OneSignal:3.+@aar'
    }

Ця відповідь стосувалася натискання на OnSignal


2
  1. В AndroidManifest.xml:

    • У програмі додайте tools:replace="android:icon, android:themeта
    • У корені Manifest додайте xmlns:tools="http://schemas.android.com/tools
  2. В build.gradle:

    • У корені додайте useOldManifestMerger true

2

Версія minium sdk має бути такою ж, як і у модулів / lib, які ви використовуєте Наприклад: Ваша версія модуля min sdk - 26, а ваша версія min sdk - 21, вона повинна бути такою ж.


1

за останні кілька днів я також переживав те саме питання. Але після багатьох досліджень я нарешті знайшов рішення для цього.
Для того , щоб вирішити цю проблему, що вам потрібно зробити , це:
1. Перевірте ваш проект build.gradle файл і модуль build.gradle файл містять однакові версії всіх залежностей.
2. Переконайтеся, що компіляціяSdkVersion , buildToolsVersion , minSdkVersion та targetSdkVersion вашого проекту відповідає тій, що знаходиться в модулях або бібліотеках, які ви додали в проект.

compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
    applicationId "com.example.appname"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 22
    versionName "2.0.3"

}

Сподіваюся, це допомагає.


1

Якщо після додавання модуля бібліотеки Android ви отримаєте цю помилку.
Ви можете виправити це дуже просто видалити android:label="@string/app_name"з AndroidManifest.xmlвашого модуля Android бібліотеки


1

Відкрийте консоль gradle, і тоді, побачивши, gradle пропонує вам додати певний рядок (як-от: інструменти: заміна = "android: enableBackup" або інструменти: substitu = = "android: label" тощо). Додайте цей рядок у свій файл маніфесту під тегом та синхронізуйте gradle, ось і все.


1

У моєму випадку це сталося за те, що всередині тегу Activity залишився порожній фільтр намірів

    <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">

            <intent-filter>

            </intent-filter>

    </activity> 

Тож просто їх видалення вирішило проблему.

    <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
    </activity> 

0

Як новачок в Android Studio, в моєму випадку я перемістив існуючий проект з Eclipse в Android Studio і виявив, що в моєму Manifest.xml, яке не було підібрано Eclipse, було дублюване визначення діяльності, яке не було вибрано Eclipse, було показано як помилка Gradle

Я виявив це, перейшовши на консоль Gradle (праворуч внизу екрана).


0

Зі мною траплялося двічі, коли я рефрактор (Перейменувати за допомогою SHIFT + F6) ім'я поля в наших файлах, і воно просить вас змінити його скрізь, і ми, не звертаючи уваги, змінюємо ім’я скрізь. Наприклад, якщо у вашому класі Java є ім'я змінної "id", і ви перейменовуєте її в SHIFT + F6. Якщо ви не звернете уваги на наступне діалогове вікно, яке запитає вас, де б ви не змінили ідентифікатор, і ви поставите галочку, щоб змінити весь ідентифікатор у файлах вашого макета з нового значення.


0

ця дуже проста помилка виникає лише тоді, коли ви визначаєте будь-який виклик активності два рази у файлі mainifest.xml

<activity android:name="com.futuretech.mpboardexam.Game" ></activity>

//and launcher also------like that



//solution:use only one 

0

Поставте це наприкінці модуля build.gradle додатка:

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '25.3.0'
        }
    }
}}

від цього


0

Доповнення відповіді Фан Ван Лін. Я видалив ці рядки:

  android:icon="@mipmap/ic_launcher"
  android:label="name"

0

Просто перейдіть на Androidx, як показано вище, а потім встановіть для мінімальної версії SDK 26 ... без сумнівів, це працює чудово


0

Наступний злом працює:

  1. Додайте xmlns:tools="http://schemas.android.com/tools" рядок у тег маніфесту
  2. Додайте tools:replace="android:icon,android:theme,android:allowBackup,label,name" в тег програми


0

У моєму випадку я використовував деякі примітки з бібліотеки jetbrains. Я видалив ці анотації та залежності, і це справно працювало.

Тому, будь ласка, уважно перевірте бібліотеки в андроїд-коді та залежності.


0

Якщо ви використовуєте кілька manifestPlaceholderелементів у своємуbuild.gradle файлі, ви повинні додати їх як елементи масиву, а не окремі елементи.

Наприклад, це призведе до помилки збірки або помилки компіляції: "java.lang.RuntimeException: З'єднання маніфесту не вдалося з декількома помилками":

android {
    ...
    defaultConfig {
        manifestPlaceholders = [myKey1: "myValue1"]
        manifestPlaceholders = [myKey2: "myValue2"] // Error!
    }
}

Це виправить помилку:

android {
    ...
    defaultConfig {
        manifestPlaceholders = [myKey1: "myValue1", myKey2: "myValue2"]
    }
}

0

Це тому, що ви використовуєте нову бібліотеку Матеріалів із застарілою бібліотекою підтримки.

Ви повинні мігрувати android.supportдо androidxдля того , щоб використовувати com.google.android.material.

Якщо ви використовуєте android studio v 3.2 або вище, просто

перейти до рефактора ---> MIGRATE TO ANDROID X.

Зробіть резервну копію свого проекту.


0

Я використовував FirebaseUI Libraryразом із тим Facebook SDK Library, що викликало у мене проблему.

implementation 'com.firebaseui:firebase-ui-database:0.4.4'
implementation 'com.facebook.android:facebook-android-sdk:[4,5)'

І звідси [тут] [1] я позбувся цього питання.

З latest updateз бібліотеки FirebaseUI , попередня версія Facebook SDK також є частиною цього.

Якщо ви використовуєте обидві бібліотеки, видаліть бібліотеку SDK Facebook .

https://github.com/firebase/FirebaseUI-Android/isissue/230

ОНОВЛЕННЯ

З Android Studio 3.0і пізнішої версії app.gradleфайл потрібно використовувати implementationабо apiзамість compileдодавання залежностей у додаток.


0

Побачивши відповідь CLIFFORD, щоб побачити помилку, те, що допомогло мені вирішити цю проблему, було перейменуванням "android: namex" на "android: name" у тезі дій у фільтрі намірів. У тому випадку, якщо те саме рішення допомагає комусь іншому.

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:namex="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.