Сбой манифеста с множественными ошибками в Android Studio

251

Итак, я новичок в Android и Java. Я только начал учиться. Пока я экспериментировал с Intent , у меня возникла ошибка.

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
удалите строку <activity android: name = ". MainActivity" /> в своем файле menifest.xml
Панкадж Талавия
10
Для получения подробной информации об ошибке вы можете проверить Консоль Gradle в Android Studio в правом нижнем углу.
DragonT
Надеюсь эта ссылка будет полезна.
Мортреза нашей эры
Я получил ту же ошибку. Но решил ее, сохранив одинаковый минимум SDK в проекте и библиотеке.
Раджа Джавахар
youtu.be/K88WaSm3q8Y "Слияние манифеста с множественными ошибками в Android Studio"?
Роман Покровский

Ответы:

968

Откройте манифест приложения ( 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"/>из вашего файла mainfest. Как вы уже определили это как:

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

Итак, файл манифеста, показывающий неоднозначность.

Android Geek
источник
31
Жаль, что это принятый ответ, когда он только исправляет код Ровена, но совершенно бесполезен для всех остальных. Ответ от CLIFFORD на самом деле показывает вам, как «просматривать журналы», как предполагает сообщение об ошибке.
Эндрю Костер
Это работает очень хорошо, только проверяйте и удаляйте дубликаты в файле AndroidManifest.xml.
vishwajit76
61

Для меня это работает -

Поиск ошибок слияния в AndroidManifest.xml

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

Нажмите на объединенный манифест в AndroidManifest.xml

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

Вы можете увидеть ошибку слияния манифеста в правом столбце. Это может помочь решить эту проблему.

Anirban
источник
3
Это общее решение этой проблемы. Это поможет вам найти реальную причину любой проблемы, связанной с этим.
JoeGalind
60

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

  1. Ваша минимальная версия SDK должна быть такой же, как и у используемых вами модулей, например: у вашего модуля минимальная версия SDK равна 14, а у вашего приложения минимальная версия SDK равна 9. Она должна быть такой же.
  2. Если сборка версии вашего приложения и модулей не совпадает. Опять же, он должен быть таким же ** Короче говоря, ваш build.gradleфайл приложения и манифест должны иметь одинаковые конфигурации **
  3. В файле манифеста нет дублирования, например, одни и те же разрешения добавляются дважды, одна и та же активность упоминается дважды.
  4. Если вы удалили какое-либо действие из своего проекта, удалите его из файла манифеста.
  5. Иногда из-за метки, значка и т. Д. Тег файла манифеста:

а) Добавьте xmlns:toolsстроку в тег манифеста.

б) Добавить 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:facebook-android-sdk:[4,5) Facebook использует cardview версии com.android. поддержка: cardview-v7: 25.3.1 и appcompat v7: 26.0.0 использует cardview версии v7: 26.0.0, поэтому в двух библиотеках есть разногласия, и поэтому выдается ошибка

Ошибка: не удалось выполнить задачу «: app: processDebugManifest».

Ошибка слияния манифеста: Атрибут meta-data#android.support.VERSION@value value = (26.0.0-alpha1) из [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 value = (25.3.1). Предложение: добавьте 'tools: replace = "android: value"' к элементу в AndroidManifest.xml: 25: 5-27: 41, чтобы переопределить.

Таким образом, используя appcompat версии 25.3.1, мы можем избежать этой ошибки

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

Кимми Дингра
источник
1
в моем случае это было связано с темой модуля, который я добавил, поэтому я использовал в качестве инструмента: заменил «значок, метка, тема»
turbandroid
в моем случае это было связано с темой модуля, который я добавил, поэтому я использовал в качестве инструментов: заменил "icon, label, theme" и 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

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

Надеюсь, это поможет.

Pre_hacker
источник
Спасибо большое! Я столкнулся с этой проблемой в очень специфическом сценарии, вызванном страницей поддержки Zendesk, при нажатии на «прикрепить файл». Перепробовал так много ответов на разные вопросы и помог только ваш комментарий!
Натали
@Natalie Я рад, что это помогло :)
Pre_hacker
11

Просто добавьте приведенный ниже код в свой тег приложения проекта Manifest ...

<application
        tools:node="replace">
Sankalp
источник
Большое вам спасибо
Tej
8

В моем случае это показывало ошибку, потому что в <uses-permission>элементе была избыточность . Поэтому, пожалуйста, проверьте в вашем AndroidManifest.xmlфайле для того же.

Версия Android Studio 3.0.1

Операционная система Windows 7

Вот скриншот для справки.

Снимок экрана, на котором показана избыточность в файле манифеста.

Парт Патель
источник
Хотя это было опубликовано до ответа @ CLIFFORD-PY, обнаружение ошибок слияния с помощью представления «Объединенный манифест» обнаружит эту конкретную избыточную ошибку.
sonyisda1
8

Я решил это с помощью Refactor -> Migrate to AndroidX

GL

Брайан Коронель
источник
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'
    }

Этот ответ направлен на push-уведомление OnSignal

Мд. Шофиулла
источник
2
  1. В AndroidManifest.xml:

    • В приложении добавьте tools:replace="android:icon, android:themeи
    • В корне Манифеста добавьте xmlns:tools="http://schemas.android.com/tools
  2. В build.gradle:

    • В корне добавить useOldManifestMerger true
ау уу
источник
2

Версия minium sdk должна быть такой же, как и у модулей / lib, которые вы используете. Например: у min min версия sdk 26, а у вашего приложения min версия sdk 21. Это должно быть так же.

Эджаз Ахмад
источник
1

в течение последних нескольких дней я также переживал ту же проблему. Но после долгих исследований я наконец нашел решение для этого.
Для того , чтобы решить эту проблему, что вам нужно сделать , это:
1. Проверьте ваш проект build.gradle файл и модуль build.gradle файл содержат одинаковые версии всех зависимостей.
2. Убедитесь, что ваш проект compileSdkVersion , 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 предлагает вам добавить определенную строку (например: tools: replace = "android: allowBackup" или tools: replace = "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> 
Доктор TJ
источник
0

Будучи новичком в Android Studio, в моем случае я переместил существующий проект из Eclipse в Android Studio и обнаружил, что в моем файле Manifest.xml было дублированное определение действия, которое не было обнаружено Eclipse и отображалось как ошибка Gradle.

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

JanB
источник
0

Произошло со мной дважды, когда я рефракторил (переименовываю с помощью SHIFT + F6) имя поля в наших файлах, и он просит вас изменить его везде, а мы, не обращая внимания, меняем имя везде. Например, если у вас есть имя переменной «id» в вашем классе Java, и вы переименовываете его с помощью 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

Я решил это, удалив android:replaceтег

Гурджап Сингх
источник
0

В моем случае я использовал некоторые аннотации из библиотеки jetbrains. Я удалил эти аннотации и зависимости, и все работало нормально.

Поэтому, пожалуйста, проверьте библиотеки в коде Android и зависимостях тщательно.

Чаман Гурджар
источник
0

Если вы используете несколько manifestPlaceholderэлементов в вашем build.gradleфайле, вы должны добавить их как элементы массива, а не как отдельные элементы.

Например, это приведет к ошибке сборки или ошибке компиляции: «java.lang.RuntimeException: сбой слияния с множественными ошибками»:

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

Это исправит ошибку:

android {
    ...
    defaultConfig {
        manifestPlaceholders = [myKey1: "myValue1", myKey2: "myValue2"]
    }
}
Mr-IDE
источник
0

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

Вы должны мигрировать android.supportк androidxдля того , чтобы использовать com.google.android.material.

Если вы используете Android Studio v 3.2 или выше, просто

перейти к рефакторингу ---> МИГРАТЬ НА АНДРОИД 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 также является частью этого.

Если вы используете обе библиотеки, удалите библиотеку Facebook SDK .

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

ОБНОВИТЬ

Начиная с Android Studio 3.0и более поздних версий, app.gradleфайл требуется использовать implementationили apiвместо compileдобавления зависимостей в приложение.

Mohammedsalim Shivani
источник
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>
Фархан
источник