Połączenie manifestu nie powiodło się z wieloma błędami w Android Studio

250

Jestem początkującym w Androidzie i Javie. Właśnie zacząłem się uczyć. Podczas eksperymentowania z Intentem dzisiaj popełniłem błąd.

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

Znalazłem tutaj rozwiązania i próbowałem je wdrożyć, ale to nie zadziałało.

To jest mój 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'
}

To jest mój 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>

To jest mój pierwszy tydzień z kodowaniem, przepraszam, jeśli to naprawdę głupia rzecz. Jestem naprawdę nowy i nie znalazłem innego miejsca, w którym można by zapytać. Przepraszam, że złamałem jakieś zasady

Rohan Mallya
źródło
2
usuń wiersz <aktywność android: nazwa = ". MainActivity" /> w pliku menifest.xml
Pankaj Talaviya,
10
Aby uzyskać szczegółowe informacje o błędzie, możesz sprawdzić Gradle Console w Android Studio w prawym dolnym rogu.
DragonT
Mam nadzieję, że ten link będzie przydatny.
Mortreza AD,
Wystąpił ten sam błąd, ale rozwiązałem go, zachowując ten sam minimalny zestaw SDK w projekcie i bibliotece.
Raja Jawahar
youtu.be/K88WaSm3q8Y „Manifest Merger nie powiódł się z wieloma błędami w Android Studio”?
Roman Pokrovskij

Odpowiedzi:

966

Otwórz manifest aplikacji ( AndroidManifest.xml) i kliknij Merged Manifest. Sprawdź obraz poniżej:

funkcja android-manifest-merge

Z obrazu widać Błąd w prawej kolumnie, spróbuj rozwiązać błąd. Może pomóc komuś z tym samym problemem. Przeczytaj więcej tutaj .

CLIFFORD PY
źródło
5
genialny ... nie mogę znaleźć słów, aby wyrazić moje podziękowanie
Shahzad Afridi
2
w moim przypadku przewinąłem go nieco w dół, aby zobaczyć błędy
CodeToLife,
Niestety w Android Studio 3.5.2 nie ma karty „Scalony manifest”.
FractalBob,
@FractalBob Korzystam z wersji 3.5.2 i widzę kartę „Scalony manifest”. Być może masz jakiś inny błąd występujący przed scaleniem manifestów.
sonyisda1,
@ sonyisda1 Czy działasz w środowisku Linux? Mam Ubuntu 18.04 LTS.
FractalBob
120

Usuń <activity android:name=".MainActivity"/>z pliku Mainfest. Jak już zdefiniowałeś jako:

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

Plik manifestu pokazuje dwuznaczność.

Android Geek
źródło
31
Szkoda, że ​​jest to zaakceptowana odpowiedź, gdy naprawia tylko kod Rowena, ale jest zupełnie nieprzydatna dla nikogo innego. Odpowiedź CLIFFORD pokazuje, jak „zobaczyć logi”, jak sugeruje komunikat o błędzie.
Andrew Koster
Działa bardzo dobrze tylko sprawdzaj i usuwaj wszelkie zduplikowane wpisy w pliku AndroidManifest.xml.
vishwajit76
61

Dla mnie TO działa -

Znajdowanie błędów scalania w AndroidManifest.xml

wprowadź opis zdjęcia tutaj

Kliknij Połączony Manifest w AndroidManifest.xml

wprowadź opis zdjęcia tutaj

Błąd scalania manifestu można wyświetlić w prawej kolumnie. Może to pomóc rozwiązać ten problem.

Anirban
źródło
3
Jest to ogólna poprawka tego problemu. Pomoże to znaleźć prawdziwy powód każdego problemu z tym związanego.
JoeGalind
60

Miałem również te same problemy i po wielu badaniach znalazłem rozwiązanie:

  1. Twoja wersja min sdk powinna być taka sama, jak modułów, których używasz, np .: twój moduł min sdk to 14, a twoja aplikacja min sdk to 9 Powinno być takie samo.
  2. Jeśli kompilacja wersji aplikacji i modułów nie jest taka sama. Znowu powinno być tak samo ** Krótko mówiąc, build.gradleplik aplikacji i manifest powinny mieć te same konfiguracje **
  3. Nie ma duplikatu, jak dwa razy te same uprawnienia dodane do pliku manifestu, dwukrotnie ta sama aktywność.
  4. Jeśli masz jakieś działanie ze swojego projektu, usuń je również z pliku manifestu.
  5. Czasami jest to spowodowane etykietą, ikoną itp. Pliku manifestu:

a) Dodaj xmlns:toolslinię w znaczniku manifestu.

b) Dodaj tools:replace=lub tools:ignore=w znaczniku aplikacji.

Przykład:

<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. Jeśli dwie zależności nie są tej samej wersji, przykład: używasz zależności dla appcompat v7: 26.0.0 i dla facebook com.facebook.android:facebook-android-sdk:[4,5) facebook używa cardview wersji com.android. obsługa: cardview-v7: 25.3.1 i appcompat v7: 26.0.0 używa cardview wersji v7: 26.0.0, więc w dwóch bibliotekach występuje rozbieżność, co powoduje błąd

Błąd: wykonanie nie powiodło się dla zadania „: app: processDebugManifest”.

Połączenie manifestu nie powiodło się: atrybut meta-data#android.support.VERSION@value wartość = (26.0.0-alpha1) z [com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml: 27: 9 -38 jest również obecny na [com.android.support:cardview-v7:25.3.1] AndroidManifest.xml: wartość 24: 9-31 = (25.3.1). Sugestia: dodaj „tools: replace =" android: value "'do elementu na AndroidManifest.xml: 25: 5-27: 41, aby zastąpić.

Korzystając z appcompat w wersji 25.3.1, możemy uniknąć tego błędu

Uwzględniając powyższe punkty, pozbysz się tego irytującego problemu. Możesz również sprawdzić mój blog https://wordpress.com/post/dhingrakimmi.wordpress.com/23

Kimmi Dhingra
źródło
1
w moim przypadku było to spowodowane motywem modułu, który dodałem, więc użyłem jako narzędzia: zamień „ikonę, etykietę, motyw”
turbandroid
w moim przypadku było to spowodowane dodanym motywem modułu, więc użyłem go jako narzędzia: zamień „ikonę, etykietę, motyw” i xmlns: tools = „ schemas.android.com/tools ”. dzięki @ O'one
alfo888_ibg
14

Oprócz dostępnych rozwiązań sprawdź to również.
Jeśli ustawiłeś android:allowBackup="false"w AndroidManifest.xmlnim, może wystąpić konflikt android:allowBackup="true"w przypadku innych zależności.

Rozwiązanie
Zgodnie z sugestią @CLIFFORD PY, przełącz się Merged Manifestna AndroidManifest.xml. Android Studio zasugeruje, aby dodać tools:replace="android:allowBackup"w <application />w twojej AndroidManifest.xml.

Chintan Shah
źródło
12

Napotkałem ten sam problem i właśnie dodałem jedną linię w pliku manifest.xml i zadziałało to dla mnie.

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

dodaj ten wiersz pod

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

Mam nadzieję, że to pomoże.

Pre_hacker
źródło
Dziękuję bardzo! Napotkałem ten problem w bardzo konkretnym scenariuszu spowodowanym przez stronę pomocy Zendesk, kiedy kliknąłem „załącz plik”. Próbowałem tylu odpowiedzi na różne pytania i pomógł tylko Twój komentarz!
Natalie
@Natalie Cieszę się, że pomogło :)
Pre_hacker
11

Wystarczy dodać poniższy kod do znacznika aplikacji Manifest projektu ...

<application
        tools:node="replace">
sankalp
źródło
Dziękuję bardzo
tej shah
8

W moim przypadku pokazywał błąd, ponieważ wystąpiła nadmiarowość <uses-permission>elementu. Tak więc proszę sprawdzić w AndroidManifest.xmltym samym pliku.

Wersja Androida Studio to 3.0.1

System operacyjny to Windows 7

Oto zrzut ekranu w celach informacyjnych.

Zrzut ekranu przedstawiający redundancję w pliku manifestu.

Parth Patel
źródło
Chociaż zostało to opublikowane przed odpowiedzią @ CLIFFORD-PY, znalezienie błędów scalania w widoku Scalonego manifestu uchwyci ten szczególny błąd redundantny.
sonyisda1,
8

Rozwiązałem to za pomocą Refactor -> Migrate to AndroidX

GL

Braian Coronel
źródło
7

Zwykle występuje, gdy masz błędy w swoim manifeście. Otwórz AndroidManifest.xml. Kliknij na scaloną kartę manifestu. Błędy można tam zobaczyć. Uwzględnij także sugestie wspomniane tam. Kiedy miałem podobny problem podczas importowania com.google.android.gms .maps.model.LatLng zasugerował, żebym zawarł narzędzia: overrideLibrary = "com.google.android.gms.maps" w tagu aplikacji i kompilacja zakończyła się powodzeniem.

Archana Prabhu
źródło
3

Mój przypadek to naprawiłem

build.gradle (moduł: aplikacja)

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

Ta odpowiedź pojawiła się ponownie w powiadomieniu push OnSignal

Md. Shofiulla
źródło
2
  1. W AndroidManifest.xml:

    • W aplikacji dodaj tools:replace="android:icon, android:themei
    • W katalogu głównym Manifest dodaj xmlns:tools="http://schemas.android.com/tools
  2. W build.gradle:

    • W katalogu głównym dodaj useOldManifestMerger true
ao wu
źródło
2

Wersja minium sdk powinna być taka sama jak modułów / lib, których używasz Na przykład: Twoja wersja modułu min sdk to 26, a wersja aplikacji min sdk to 21 Powinna być taka sama.

Ejaz Ahmad
źródło
1

przez kilka ostatnich dni miałem również ten sam problem. Ale po wielu badaniach w końcu znalazłem rozwiązanie tego problemu.
W celu rozwiązania tego problemu, co trzeba zrobić, to:
1. Sprawdź, czy projektu build.gradle plik i modułu build.gradle plik zawiera te same wersje wszystkich zależności.
2. Upewnij się, że compileSdkVersion , buildToolsVersion , minSdkVersion i targetSdkVersion twojego projektu są zgodne z modułami lub bibliotekami dodanymi do projektu.

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

}

Mam nadzieję że to pomoże.

Rahul Deep Singh
źródło
1

Jeśli po dodaniu modułu biblioteki Androida pojawi się ten błąd.
Można to naprawić za pomocą prostych usunąć android:label="@string/app_name"z AndroidManifest.xmlTwojego Android module Library

Phan Van Linh
źródło
1

Otwórz konsolę stopni, a zobaczysz, że gradle sugeruje dodanie konkretnej linii (jak: tools: replace = „android: allowBackup” lub tools: replace = „android: label” itp.). Dodaj tę linię do pliku manifestu pod tagiem i synchronizuj gradate, to wszystko.

Nazmus Saadat
źródło
1

W moim przypadku zdarzyło się tak, że zostawiłem pusty filtr intencji w tagu Activity

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

            <intent-filter>

            </intent-filter>

    </activity> 

Usunięcie ich rozwiązało problem.

    <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
    </activity> 
Dr TJ
źródło
0

Jako nowicjusz w Android Studio, w moim przypadku przeniosłem istniejący projekt z Eclipse do Android Studio i odkryłem, że w moim pliku Manifest.xml istnieje duplikat definicji działania, która nie została pobrana przez Eclipse. błąd stopniowania.

Znalazłem to, przechodząc do Konsoli Gradle (w prawym dolnym rogu ekranu).

JanB
źródło
0

Zdarzyło mi się dwa razy, gdy refraktor (Zmień nazwę za pomocą SHIFT + F6) nazwę pola w naszych plikach i prosi o zmianę wszędzie, a my bez zwracania uwagi zmieniamy nazwę wszędzie. Na przykład, jeśli w klasie Java masz nazwę zmiennej „id” i zmienisz jej nazwę za pomocą SHIFT + F6. Jeśli nie zwrócisz uwagi na następne okno dialogowe, które zapyta cię, gdzie indziej zamierza zmienić identyfikator, a ty zaznaczysz zaznaczenie, wszystko zmieni cały identyfikator w plikach układu z nowej wartości.

Rakesh Yadav
źródło
0

jest to bardzo prosty błąd, który występuje tylko wtedy, gdy zdefiniujesz dowolne wywołanie aktywności dwa razy w pliku mainifest.xml Przykład

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

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



//solution:use only one 
Lalit Baghel
źródło
0

Umieść to na końcu kompilacji modułu aplikacji. 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'
        }
    }
}}

od tego

SHADOW NET
źródło
0

Uzupełnij odpowiedź Phan Van Linh. Usunąłem te linie:

  android:icon="@mipmap/ic_launcher"
  android:label="name"
Legowisko
źródło
0

Po prostu migruj do Androidax, jak pokazano powyżej, a następnie ustaw minimalną wersję SDK na 26 ... bez wątpienia to działa idealnie

sammy mutahi
źródło
0

Działa następujący hack:

  1. Dodaj xmlns:tools="http://schemas.android.com/tools"linię w znaczniku manifestu
  2. Dodaj tools:replace="android:icon,android:theme,android:allowBackup,label,name" znacznik aplikacji
Shoaib Ahmed
źródło
0

Rozwiązałem to, usuwając android:replacetag

Gurjap Singh
źródło
0

W moim przypadku korzystałem z adnotacji z biblioteki jetbrains. Usunąłem te adnotacje i zależności i działało dobrze.

Więc dokładnie sprawdź biblioteki kodu Androida i zależności.

Chaman Gurjar
źródło
0

Jeśli używasz wielu manifestPlaceholderelementów w swoim build.gradlepliku, musisz dodać je jako elementy tablicy zamiast osobnych elementów.

Na przykład spowoduje to błąd kompilacji lub błąd kompilacji: „java.lang.RuntimeException: Połączenie manifestu nie powiodło się z wieloma błędami”:

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

To naprawi błąd:

android {
    ...
    defaultConfig {
        manifestPlaceholders = [myKey1: "myValue1", myKey2: "myValue2"]
    }
}
Mr-IDE
źródło
0

Wynika to z faktu, że korzystasz z nowej biblioteki materiałów ze starszą biblioteką pomocy technicznej.

Trzeba migrować android.supportdo androidxw celu wykorzystania com.google.android.material.

Jeśli używasz Androida Studio v 3.2 lub nowszego, po prostu

przejdź do refaktora ---> MIGRUJ DO ANDROIDA X.

Wykonaj kopię zapasową projektu.

Fazal Jarral
źródło
0

Korzystałem z FirebaseUI Librarywraz z Facebook SDK Library, co spowodowało problem.

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

I z [tutaj] [1] pozbyłem się tego problemu.

Wraz latest updatez biblioteką FirebaseUI część poprzedniej wersji Facebook SDK jest również jej częścią.

Jeśli korzystasz z obu bibliotek, usuń bibliotekę SDK Facebooka .

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

AKTUALIZACJA

Od Android Studio 3.0wersji późniejszych app.gradleplik wymaga użycia implementationlub apizamiast compiledodawania zależności do aplikacji.

Mohammedsalim Shivani
źródło
0

Po zobaczeniu odpowiedzi CLIFFORD na błąd, co pomogło mi rozwiązać ten problem, to zmiana nazwy „android: namex” na „android: name” w tagu działania filtru intent. W przypadku, gdy to samo rozwiązanie pomaga komuś innemu.

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
Farhan
źródło