Połączenie materiałów i aplikacji Android Manifest nie powiodło się


223

Mam następną klasę

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.android.material:material:1.0.0-rc01'
}

Ale kiedy chcę zbudować aplikację, otrzymuję kolejny dziennik:

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.

Okej! Idź do manifestu i zrób to:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="ru.chopcode.myapplication">

    <application
        tools:replace="android:appComponentFactory"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>

</manifest>

Następnie otrzymuję ten błąd w moim Logcat:

Manifest merger failed with multiple errors, see logs that I have Linked with it

2
Spróbuj usunąć następujące wiersze: implementacja „com.android.support:appcompat-v7:28.0.0-rc01” i implementacja „com.android.support.constraint: constraint-layout: 1.1.2”
vcapra1

2
Myślę, że wszystkie pakiety materiałów są w pakiecie z systemem Android, sprawdź to ...
Marcos Vasconcelos,

Potrzebuję tego: materiał.io / design / components / app-bars-bottom.html . To dotyczy projektowania Androida?
Евгений Усов


Nowe studio Android ma funkcję płynnej migracji aplikacji do systemu AndroidX. kliknij poniższy link. github.com/material-components/material-components-android/…
Ravi Jaggarapu

Odpowiedzi:


15

Wystarczy zmienić „rc01” w zależnościach pierwszego i ostatniego wiersza w zależnościach na „alpha1”. To działa dla mnie


Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „META-INF / androidx.core_core.version
Aliton Oliveira

40
Nie mam napisu „rc01” napisanego w implementacji „com.android.support:appcompat-v7:28.0.0”. Wciąż pojawia się problem. Proszę zaproponować jakieś rozwiązanie.
avani kothari,

10
Ta odpowiedź powinna być komentarzem do pytania.
Ananth,

459

Miałem podobny problem. Dodano dwie linie w gradle.propertiespliku:

android.useAndroidX=true
android.enableJetifier=true

Te dwie linie automatycznie rozwiązały moje konflikty zależności między plikami Google a zależnościami stron trzecich. Oto link do naśladowania: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project


6
android.useAndroidX = true
Frank Fang

6
po dodaniu pojawia się następujący błąd: `` * Co poszło nie tak: Wykonanie nie powiodło się dla zadania ': Reaktywuj natywną kamerę: compileGeneralDebugJavaWithJavac'. > Kompilacja nie powiodła się; zobacz szczegóły błędu kompilatora, aby uzyskać szczegółowe informacje. * Spróbuj: Uruchom z opcją --stacktrace, aby uzyskać ślad stosu. Uruchom z opcją --info lub --debug, aby uzyskać więcej danych wyjściowych dziennika. Uruchom z --scan, aby uzyskać pełny wgląd. ``
Dileepa Chandima

@PrinceHamza sprawdź to, znaleźliśmy rozwiązanie dla tego github.com/facebook/react-native/issues/…
Dileepa Chandima

9
To powinna być zaakceptowana odpowiedź. To rozwiązało problem.
VishalKale,

2
„Ale nie widzę pliku„ gradles.properties ””! Tak, więc w folderze głównym aplikacji w projekcie studio utwórz ten plik (bez rozszerzenia) i dodaj te wiersze.
user1010160

145

Napotkałem ten sam błąd, gdy próbuję dodać bibliotekę Kotlin-KTX do mojego projektu.

Próbuję migrację do systemu AndroidX i problem został rozwiązany!

Refaktoryzuj / migruj do AndroidaX


1
To działa, ale niektóre generowane instrukcje importu używają nieaktualnych nazw pakietów. Musiałem naprawić kilka z nich, po prostu używając dowolnej androidx.*nazwy pakietu, którą IDE sugerowało jako poprawkę.
Andrew Koster

1
@Usuń tę odpowiedź, aby uratować mi życie. Czy mogę kupić ci piwo?
girish_vr,

@girish_vr Dzięki za ofertę :) Cieszę się, że zadziałało, to wystarczy, żebym się uśmiechnął.
Mete

Natknąłem się na ten problem, ponieważ ściągałem najnowszą wersję biblioteki „support-v4” w moim pliku build.gradle ... niezbyt dobrą praktyką. Gdybym odwoływał się do konkretnej wersji biblioteki w moim pliku ocen, nigdy nie spotkałbym się z tym problemem. Ponadto, po dokładniejszych badaniach, zauważyłem, że Google zaleca przejście na bibliotekę AndroidX; więc postanowiłem ugryźć kulę. Na szczęście wszystkie problemy rozwiązane po aktualizacji ... katastrofa została odwrócona, a LEKCJA NAUCZYŁA się o referencjach stopni.
BluJ IT

104

Powód niepowodzenia

Korzystasz z biblioteki materiałów, która jest częścią systemu AndroidX . Jeśli nie znasz AndroidaX, zapoznaj się z tą odpowiedzią .

Jedna aplikacja powinna używać albo AndroidX, albo starych bibliotek wsparcia Android. Właśnie dlatego napotkałeś ten problem.

Na przykład -

W swojej klasie używasz

  • com.android.support:appcompat-v7 (Część starej - Biblioteki pomocy technicznej Androida -)
  • com.google.android.material:material(Część AndroidaX) (Artefakt kompilacji AndroidX com.android.support:design)

Rozwiązanie

Tak więc rozwiązaniem jest użycie AndroidaX lub starej biblioteki pomocy technicznej. Zalecam korzystanie z systemu AndroidX, ponieważ system Android nie aktualizuje bibliotek obsługi po wersji 28.0.0. Zobacz informacje o wersji biblioteki pomocy technicznej.

Po prostu migruj do systemu AndroidX. Oto moja szczegółowa odpowiedź na migrację do systemu AndroidX. Stawiam tutaj niezbędne kroki od tej odpowiedzi.

Przed migracją zdecydowanie zaleca się wykonanie kopii zapasowej projektu.

Istniejący projekt

  • Android Studio> Menu Refactor> Migruj do AndroidX ...
  • Przeanalizuje i otworzy okno Refraktora na dole. Zaakceptuj zmiany do wykonania.

wizerunek

Nowy projekt

Umieść te flagi w swoim gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Sprawdź mapowania @ Library pod kątem równego pakietu AndroidX .

Sprawdź @ Oficjalna strona Migracji do AndroidaX

Co to jest Jetifier?


Później nadal występował błąd, ale ta odpowiedź pomogła: stackoverflow.com/a/49525685/1972372
Big_Chair

3
Pamiętaj, aby kliknąć „Wykonaj refaktoryzację” w lewym dolnym rogu po kliknięciu „Migruj do AndroidX”
SupaHam

88

W moim przypadku działa to idealnie. Dodałem poniżej dwóch kodów linii w pliku manifestu

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

Podziękowania należą się tej odpowiedzi .

Przykład pliku manifestu


4
Nie wiem, czy będę mieć później problem z aplikacją, ale zadziałało!
Aliton Oliveira,

4
Tak, miałem problem: Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „META-INF / androidx.core_core.version
Aliton Oliveira

3
wtedy pojawia się błąd informujący, że narzędzia nie są powiązane z tagiem aplikacji.
Travis Delly,

Czy możesz opublikować pełny logcat?
Muhaiminur Rahman


29

Proste rozwiązania - migruj do systemu AndroidX

po gradle.propertiesprostu dodaj poniżej dwa skrypty

android.useAndroidX=true
android.enableJetifier=true

Jaki był powód ↓

Wszystkie pakiety w systemie AndroidX działają w spójnej przestrzeni nazw, zaczynając od ciągu androidx. Pakiety biblioteki wsparcia zostały zamapowane na odpowiednie pakiety systemu Androidx. *. Aby uzyskać pełne mapowanie wszystkich starych klas i budowanie artefaktów na nowe, zobacz stronę Refaktoryzacja pakietów.

Zobacz stronę Refaktoryzacja paczki


W moim projekcie nie ma takiego pliku gradle.properties (Został pierwotnie stworzony w zaćmieniu lata temu, a później przeniósł się do studia Android)
Sujith Manjavana

Och ... Nie spotkałem się z taką sytuacją, znalazłem poniżej wątku, który może ci pomóc stackoverflow.com/a/37389861/6917362 Spróbuj i skomentuj proszę
EJ Chathuranga

Wystarczy utworzyć ten plik w pobliżu głównego build.gradle, jeśli nie istnieje, i zsynchronizować projekt.
Fedir Tsapana

13

Wystarczy usunąć zależność android.support

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'

Cytowanie z materialnych wytycznych

Jeśli nie chcesz jeszcze przechodzić na nowe pakiety androidx i com.google.android.material, możesz użyć Material Components za pomocą zależności com.android.support:design:28.0.0-alpha3.

Uwaga: nie należy jednocześnie używać aplikacji com.android.support i com.google.android.dependencies.

Usunięcie tej zależności działa dobrze

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'

Oto kompletny przykład zależności

    dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       implementation 'com.google.android.material:material:1.0.0-beta01'
       implementation 'com.android.support.constraint:constraint-layout:1.1.2'
       testImplementation 'junit:junit:4.12'
       androidTestImplementation 'com.android.support.test:runner:1.0.2'
       androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
   }

1
To jest najdokładniejsza odpowiedź.
Fran Marzoa,

1
@FranMarzoa To nie jest. Co się stanie, gdy biblioteka kompatybilna zostanie zaimportowana z innej zależności?
m0skit0

1
@ m0skit0, że chyba musisz tu zadać inne pytanie ...;)
Fran Marzoa


12

Zobacz ten obraz i dodaj tę linię w Androidzie AndroidManifest.xml

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

wprowadź opis zdjęcia tutaj


jaki ciąg oznacza?
Kishore Kumar

@KishoreKumar można również dodać dowolną nazwę ciągu, np. AppName.
Prashant Arvind

a dokładniej, whatString powinna być pełną nazwą klasy, która rozszerza AppComponentFactory. na przykład niestandardowo zdefiniowana klasa com.xxx.MyFactory rozszerza AppComponentFactory
jiashie

11

Dodaj te linie do pliku AndroidManifest.xml.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
narzędzia stają się czerwone podczas dodawania. czy należy dodać inne rzeczy?
natsumiyu

Nic więcej do dodania. Jednym z powodów może być niedopasowana wersja. Czy możesz pokazać swój kod pliku AndroidManifest.xml?
Ajay,

Próbowałem przeprowadzić migrację do systemu Androidx i nadal nie powiodło się wykonanie dla zadania „: app: compileDebugJavaWithJavac”. > Kompilacja nie powiodła się; zobacz szczegóły błędu kompilatora, aby uzyskać szczegółowe informacje.
natsumiyu

Oto mój manifest Androida <aplikacja android: allowBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / nazwa_aplikacji" android: roundIcon = "@ mipmap / ic_launcher" android: usesCleartextTraffic = "true „android: wspieraRtl =„ prawda ”android: motyw =„ @ style / AppTheme ”narzędzia: zamień =„ android: appComponentFactory ”android: appComponentFactory =" @ string / texthere ">
natsumiyu

1
Świetne rozwiązanie, oszczędziłem mój czas.
Umair Iqbal,

9

po prostu dodaj te dwa wiersze kodu do pliku manifestu

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

8

Wykonaj następujące kroki:

  • Idź do Refactor i kliknij Migruj do AndroidX
  • Kliknij Do Refactor

Nie zrobi to całego refaktora :(
Mohsin,


6

Ten problem występował głównie w przypadku starych zależności .

Istnieją 2 rozwiązania:

Pierwszy:

Zaktualizuj wszystkie old dependenciesi ścieżki klasy z Project level gradleplików.

classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'

Drugi:

Twój projekt Migrate to AndroidX

Z menu Android Studio -> Refanctor -> Migrate to AndroidX

Dzięki, daj mi znać, jeśli ktoś pomoże na tę odpowiedź.


6

Wreszcie znalazłem szybkie i łatwe rozwiązanie, dodając dwa wiersze w android/build.gradlepliku.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Postępuj zgodnie z tym w 100% poprawny.


1
Gdzie nawet to dodać?
Travis Delly,

Dodaj to w pliku android / build.gradle
Manoj Alwis

2
@ManojAlwis w której sekcji pliku build.gradle musimy to umieścić?
Keval Langalia,

@KevalLangalia, po prostu dodaj te dwie linie do Androida -> plik build.gradle. np .: buildscript {ext {buildToolsVersion = "28.0.3" minSdkVersion = 19 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesVersion = "16. +" firebaseVersion = "17.3.4"}
Manoj Alwis

1
naprawdę pomocny ... Dziękuję
Vasudev Vyas

6

Wszystko zależy od kompatybilności wersji bibliotek

Napotkałem ten dziwny błąd przez 2 godziny. Rozwiązałem ten błąd, wykonując następujące kroki

zmień swoje zależności build.gradle na

  implementation 'com.google.android.gms:play-services-maps:17.0.0'

do

  implementation 'com.google.android.gms:play-services-maps:15.0.0'

1
Szczerze mówiąc, zrobiłem to samo i zadziałało, więc chyba wszystko zależy od kompatybilności wersji bibliotek po scaleniu
Milos

6

Tylko jeśli nie chcesz korzystać z Androidx

Tak więc w moim przypadku korzystam z biblioteki używającej systemu Androidx, ale nie korzystam z systemu Androidx, więc kiedy obniżyłem wersję tej biblioteki, problem został rozwiązany.

W moim przypadku:

implementation 'com.github.turing-tech:MaterialScrollBar:13.+'

wyżej wspomniana biblioteka sprawia, że ​​problem 13. + automatycznie otrzyma nową wersję biblioteki używającej systemu Androidx. Więc obniżyłem wersję biblioteki do:

implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'

Problem został rozwiązany.


6
  1. Przejdź do Refactor-> Migrate-> Migrate to Android X.

  2. Dodaj to do swojego gradle.propertiespliku:

    android.enableJetifier=true
    android.useAndroidX=true

I wykonaj synchronizację.


Czy możesz wyjaśnić, jaka jest teraz twoja sytuacja?
Girish BR

Dziedziczony przeze mnie projekt ma już pół dekady. Próbowałem wdrożyć nowe analizy Fabric / Firebase, które Google wypycha. I ta nowa biblioteka korzysta z bibliotek kompatybilności z Androidx, a mój projekt używa AppCompat. Teraz miałem do czynienia z mnóstwem aktualizacji zależności i tym podobne. Zatrzymałem się, a potem wypróbowałem różne rzeczy, w tym te polecenia, i potrzebuję ich z powodu nowych materiałów Firebase. Po włączeniu mam mnóstwo błędów kompilatora. Naprawiłem to, ale teraz mam błędy pochodzące z plików XML UI. Więc będę musiał porzucić wszystko i spróbować ze starszymi wersjami.
Martin Berger,

Po kolejnej godzinie ręcznego poprawiania przestrzeni nazw klas na Androida, wydaje się, że teraz działa. Problem w tym, że kompilator nie wykrył w XML, że na przykład: „android.support.v7.widget.AppCompatSpinner” musi być „androidx.appcompat.widget.AppCompatSpinner”. Przydał się ten dokument: developer.android.com/jetpack/androidx/migrate
Martin Berger

Mam nadzieję, że teraz działa, daj mi znać, jeśli coś pójdzie nie tak. Popracujemy!
Girish BR,

4

Utwórz nowy projekt i porównaj pliki build.gradle i zamień wszystkie

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

i inne zależności z tym samym, co w nowym projekcie, coś takiego

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'

implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'

androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

implementation 'androidx.core:core-ktx:1.0.0-alpha3'

A potem naprawiono importowanie, aby używać Androidax w plikach Kotlin.


Ponieważ z jakiegoś powodu nie chcę używać Androida.
shaby

4

Wszystko, co zrobiłem, to przejdź do opcji „Refaktoryzacja” w górnym menu.

Następnie wybierz „Migruj do AndroidaX”

Zaakceptuj, aby zapisać projekt jako plik zip.

Zaktualizuj Android Studio, a także Gradle, aby nie napotkać żadnych problemów.


4

1.Dodaj te kody na końcu aplikacji / build.gradle:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:28.0.0' 
   // the above lib may be old dependencies version       
    }

2. Zmodyfikowana wersja SDK i narzędzi do 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

3. W pliku AndroidManifest.xml należy dodać dwie linie:

<application
    android:name=".YourApplication"
    android:appComponentFactory="AnyStrings"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

Lub po prostu

  • Idź do Refactor (Studio -> Menu -> Refactor)
  • Kliknij opcję Migruj do systemu AndroidX. to działa
  • to działa.

2
  • Idź do Refactor ( zdjęcie )
  • Kliknij opcję Migruj do systemu AndroidX. to działa
  • to działa.

1
Link do rozwiązania jest mile widziany, ale upewnij się, że Twoja odpowiedź jest przydatna bez niego: dodaj kontekst wokół linku, aby inni użytkownicy mieli pojęcie, co to jest i dlaczego tam jest, a następnie zacytuj najbardziej odpowiednią część strony, którą „ ponowne linkowanie na wypadek, gdyby strona docelowa była niedostępna. Odpowiedzi, które są niewiele więcej niż link, mogą zostać usunięte.
Matthew

2

Jeśli nie zamierzasz przeprowadzić migracji do systemu AndroidX, wykonaj poniższe czynności

  1. W typie terminala gradlew aplikacja: zależności
  2. Po wyświetleniu zależności w oknie naciśnij Ctrl + f i wpisz androidX
  3. Znajdziesz wszystkie zależności, które wewnętrznie używają biblioteki androidX, być może będziesz musiał obniżyć wersję lub użyć alternatywnej opcji, aby upewnić się, że nie używa już bibliotek androidX.

1

Miałem ten sam problem przez trzy dni.

To tak, jakby Android chciał, żebyśmy albo użyli Kotlina, albo Androida X, rezygnują z Androida.

Ale tak to rozwiązałem.

  • Przeprowadziłem migrację projektu do systemu AndroidX. Nie powoduje to żadnych błędów związanych z tym problemem, aktualizuje odpowiednio pliki. W aplikacji nie trzeba zmieniać nazwy metody, klasy ani zmiennej.

Uwaga: Musisz używać najnowszych bibliotek (plik build.grudle) w najnowszej stabilnej wersji Androida Studio 3.4.1


1

Nie wiem, czy to właściwa odpowiedź, czy nie, ale zadziałało dla mnie

Zwiększ właściwość owijania siatki

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

i Zbuduj Gridle do

    classpath 'com.android.tools.build:gradle:3.4.2'

wyświetla się błąd z powodu wersji.


Myślę, że ciąg powinien być androidx.core.app.AppComponentFactory, dowolne ciągi znaków będą czasami powodować losowe błędy.,
seyedrezafar

0

Przede wszystkim pamiętaj o dodaniu tej linii do manifestu

xmlns:tools="https://schemas.android.com/tools"

Następnie dodaj narzędzia zastępujące sugerowane w Android studio


0

Zmień plik proguard w build.gradle (Module: app) na następujący

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

zamiast

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

To zadziałało dla mnie


0

W celu rozwiązania tego problemu zaleciłbym jawne zdefiniowanie wersji zmiennych ext android/build.gradlew twoim głównym projekcie

ext {
    googlePlayServicesVersion = "16.1.0" // default: "+"
    firebaseVersion = "15.0.2" // default: "+"

    // Other settings
    compileSdkVersion = <Your compile SDK version> // default: 23
    buildToolsVersion = "<Your build tools version>" // default: "23.0.1"
    targetSdkVersion = <Your target SDK version> // default: 23
    supportLibVersion = "<Your support lib version>" // default: 23.1.1
}

odniesienie https://github.com/zo0r/react-native-push-notification/issues/1109#issuecomment-506414941


0

Mam również ten sam problem: w przypadku studia Android wystarczy zmienić wersję wtyczki Android Gradle 3.3.2, a wersja Gradle to 5.1.1


0

w moim przypadku dodam plik manifestu `

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

znacznik aplikacji, oczywiście, będzie działać

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.