Android Material ve appcompat Manifest birleşmesi başarısız oldu


223

Bir sonraki notum var

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

Ancak uygulama oluşturmak istediğimde bir sonraki günlüğü alıyorum:

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.

Tamam mı! Manifest'e gidin ve yapın:

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

Sonra Logcat benim bu hatayı alıyorum:

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

2
Şu satırları kaldırmayı deneyin:
application

2
Bence malzeme paketleri android-tasarıma dahil, kontrol edin ...
Marcos Vasconcelos

Buna ihtiyacım var: material.io/design/components/app-bars-bottom.html . Bu android tasarımına mı?
Евгений Усов

Bunu da kontrol edebilirsiniz: stackoverflow.com/a/54825603/1318946
Pratik Butani

Yeni android stüdyosu, uygulamanızı sorunsuz bir şekilde androidX'e taşıma özelliğine sahiptir. aşağıdaki bağlantıyı takip edin. github.com/material-components/material-components-android/…
Ravi Jaggarapu

Yanıtlar:


15

Bağımlılıkların içindeki ilk ve son satırdaki "rc01" i "alpha1" olarak değiştirin. Bu benim için çalışıyor


İşletim sistemi bağımsız yolu 'META-INF / androidx.core_core.version
Aliton Oliveira ile

40
'Com.android.support:appcompat-v7:28.0.0' uygulamasında yazılı "rc01" yok. Sorun hala devam ediyor. Lütfen bir çözüm önerin.
avani kothari

10
Bu cevap soruya bir yorum olmalıydı.
Ananth

459

Benzer bir sorun yaşadım. gradle.propertiesDosyaya iki satır eklendi :

android.useAndroidX=true
android.enableJetifier=true

Bu iki satır, Google'ın dosyaları ile üçüncü taraf bağımlılıkları arasındaki bağımlılık çakışmalarını otomatik olarak çözdü. Takip edilecek bağlantı: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project


6
android.useAndroidX = true
Frank Fang

6
sonra bu şu hata olur `` * Ne yanlış gitti: Yürütme görev için başarısız ': tepki-yerel-kamera: compileGeneralDebugJavaWithJavac'. > Derleme başarısız; ayrıntılar için derleyici hata çıkışına bakın. * Deneyin: Yığın izini almak için --stacktrace seçeneği ile çalıştırın. Daha fazla günlük çıktısı almak için --info veya --debug seçeneğiyle çalıştırın. Tam öngörü elde etmek için --scan ile çalıştırın. ``
Dileepa Chandima


9
Bu kabul edilen cevap olmalı. Bu sorunu çözdü.
VishalKale

2
Msgstr "Ama" gradles.properties dosyası "görmüyorum"! Evet, böylece uygulamanın stüdyo projesindeki kök klasöründe bu dosyayı oluşturun (uzantı yok) ve bu satırları ekler.
user1010160

145

Projeme Kotlin-KTX kütüphanesini eklemeye çalıştığımda aynı hatayla karşılaştım.

AndroidX geçişine çalışıyorum ve sorun düzeltildi!

Refactor / AndroidX'e Geç


1
Bu çalışır, ancak oluşturduğu bazı içe aktarma ifadeleri eski paket adlarını kullanır. Bir demet düzeltmek zorunda kaldım, sadece androidx.*IDE'nin düzeltme olarak önerdiği paket adını kullanarak .
Andrew Koster

1
@ Bu cevabı bir araya getirmek hayatımı kurtardı. Sana bira alabilir miyim?
girish_vr

@girish_vr Teklif için teşekkürler :) Çalıştığıma sevindim, bu beni gülümsetmek için yeterli.
Mete

Bu sorunla karşılaştım çünkü build.gradle dosyamdaki "support-v4" kütüphanesinin en son sürümünü ... iyi bir uygulama değil. Gradle dosyamda kütüphanenin belirli bir versiyonuna atıfta bulunmuş olsaydım, ilk etapta bu konuyla hiç karşılaşmazdım. Ayrıca, biraz daha araştırdıktan sonra, Google'ın AndroidX kütüphanesine geçmeyi önerdiğini görebiliyordum; bu yüzden mermiyi ısırmaya karar verdim. Neyse ki, yükseltme sonrasında tüm sorunlar çözüldü ... felaket önlendi ve sınıf referansları hakkında LESSON ÖĞRENDİ.
BluJ IT

104

Başarısızlık Nedeni

AndroidX'in bir parçası olan malzeme kütüphanesi kullanıyorsunuz . AndroidX'in farkında değilseniz, lütfen bu yanıtı gözden geçirin .

Bir uygulama AndroidX veya eski Android Destek kitaplıklarını kullanmalıdır. Bu yüzden bu sorunla karşılaştınız.

Örneğin -

Sınıfınızda,

  • com.android.support:appcompat-v7 (Eski kısmı - Android Destek Kütüphanesi--)
  • com.google.android.material:material(AndroidX'in bir parçası) (AndroidX'in yapı artefaktı com.android.support:design)

Çözüm

Dolayısıyla çözüm AndroidX veya eski Destek Kütüphanesi kullanmaktır. AndroidX'i kullanmanızı öneririm, çünkü Android 28.0.0 sürümünden sonra destek kitaplıklarını güncellemeyecek. Destek Kitaplığı'nın sürüm notlarına bakın .

AndroidX sürümüne geçmeniz yeterli. İşte AndroidX'e geçmek için ayrıntılı cevabım. Burada bu cevabın gerekli adımlarını atıyorum.

Taşınmadan önce, projenizi yedeklemeniz önemle tavsiye edilir.

Mevcut proje

  • Android Studio> Refactor Menüsü> AndroidX'e Taşı ...
  • Altında Refraktör penceresini analiz eder ve açar. Yapılacak değişiklikleri kabul edin.

görüntü

Yeni proje

Bu bayrakları gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Eşit AndroidX paketi için @ Kütüphane eşlemelerini kontrol edin .

AndroidX'e Migrate'ın resmi sayfasını kontrol edin

Jetifier nedir?


Daha sonra hala bir hata
oluştu

3
"AndroidX'e Geç" i tıkladıktan sonra sol alt kısımdaki "Refactor yap" ı tıklamayı unutmayın
SupaHam

88

Benim durumumda, bu mükemmel çalışıyor .. Manifest dosyası içine iki satır kodu ekledim

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

Kredi bu cevaba gider .

Bildirim dosyası Örnek


4
Daha sonra benim app bir sorun olacak mı bilmiyorum, ama çalıştı!
Aliton Oliveira

4
Evet bir sorunum vardı: İşletim sistemi bağımsız yolu 'META-INF / androidx.core_core.version ile birden fazla dosya bulundu
Aliton Oliveira

3
o zaman araçları uygulama etiketine bağlı olmadığını belirten bir hata alıyorum.
Travis Delly

Tam logcat gönderebilir misin?
Muhaiminur Rahman

İsim alanına araçlar kullanmak zorunda kaldım: github.com/magus/react-native-facebook-login/issues/…
Johannes Filter

29

Basit Çözümler - AndroidX'e Geçin

içinde gradle.properties, sadece iki komut aşağıda eklemek

android.useAndroidX=true
android.enableJetifier=true

Nedeni neydi?

AndroidX'teki tüm paketler androidx dizesinden başlayarak tutarlı bir ad alanında yaşar. Destek Kütüphanesi paketleri ilgili androidx. * Paketlerine eşlenmiştir. Tüm eski sınıfların tam olarak eşlenmesi ve yeni sınıflarla ilgili yapay nesneler oluşturulması için Paket Yeniden Düzenleme sayfasına bakın.

Lütfen Paket Yeniden Düzenleme sayfasına bakın


Projemde böyle bir dosya gradle.properties yok. (Başlangıçta tutulma yıl önce oluşturuldu ve daha sonra android stüdyosuna taşındı)
Sujith Manjavana

Oh ... Böyle bir durumla karşılaşmadım, size yardımcı olabilecek ipliğin altında buldum stackoverflow.com/a/37389861/6917362 Lütfen yorum yapmayı deneyin
EJ Chathuranga

Eğer yoksa, bu dosyayı main build.gradle yakınında oluşturun ve projeyi senkronize edin.
Fedir Tsapana

13

Sadece android'i kaldırın. Destek bağımlılığı

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

Materyal Kurallarından Alıntı

Henüz yeni androidx ve com.google.android.material paketlerine geçmek istemiyorsanız, com.android.support:design:28.0.0-alpha3 bağımlılığıyla Malzeme Bileşenlerini kullanabilirsiniz.

Not: Uygulamanızda com.android.support ve com.google.android.de bağımlılıkları aynı anda kullanmamalısınız.

Sadece bu bağımlılığı kaldırmak işe yarar

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

İşte tam bağımlılıklar örneği

    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
Bu en doğru cevap.
Fran Marzoa

1
@FranMarzoa Öyle değil. Uyumluluk kitaplığı başka bir bağımlılıktan içe aktarıldığında ne olur?
1919

1
@ m0skit0 burada farklı bir soru göndermek zorunda kalacak, sanırım ...;)
Fran Marzoa


12

Bu görsele bakın ve bu satırı androidinize ekleyin AndroidManifest.xml

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

resim açıklamasını buraya girin


string ne anlama geliyor?
Kishore Kumar

@KishoreKumar ayrıca appName gibi herhangi bir dize adı ekleyebilirsiniz.
Prashant Arvind

kesin olarak söylemek gerekirse, whateverString, AppComponentFactory'yi genişleten tam sınıf adı olmalıdır. örneğin, özel bir tanımlanmış com.xxx.MyFactory sınıfı AppComponentFactory'yi genişletir
jiashie

11

Bu satırları AndroidManifest.xml dosyasına içine ekleyin.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
araçları eklerken kırmızılaşıyor. eklemeniz gereken başka şeyler var mı?
natsumiyu

Eklenecek başka bir şey yok. Bunun bir nedeni belki de ur sürümünün uyumsuz olmasıdır. AndroidManifest.xml dosya kodunuzu gösterebilir misiniz?
Ajay

Androidx'e geçmeyi denedim ve Execution'ın görev için başarısız olmasına devam ediyorum: app: compileDebugJavaWithJavac '. > Derleme başarısız; ayrıntılar için derleyici hata çıkışına bakın.
natsumiyu

İşte benim android manifest <uygulama android: allowBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: roundIcon = "@ mipmap / ic_launcher" android: usesCleartextTraffic = "true "android: supportsRtl =" true "android: theme =" @ style / AppTheme "araçları: replace =" android: appComponentFactory "android: appComponentFactory =" @ string / texthere ">
natsumiyu 24:19

1
Harika bir çözüm, Zamanımı kurtardım.
Umair Iqbal

9

bu iki kod satırını Manifest dosyanıza eklemeniz yeterlidir

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

8

Bu adımları takip et:

  • Refactor'a Git ve AndroidX'e Taşı'yı tıklayın
  • Refactor Yap'ı tıklayın

Bu tüm refactor yapmaz :(
Mohsin


6

Bu sorun esas olarak eski bağımlılıklar için oldu .

2 çözümü var:

Birincisi:

Tüm güncelleyin old dependenciesve Sınıf yolları gelen Project level gradledosyalar.

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

İkinci:

Senin projen Migrate to AndroidX

Android Studio Menüsünden -> Refanctor -> Migrate to AndroidX

Teşekkürler, bu cevaptan kimse yardım ederse bana bildirin.


6

Sonunda android/build.gradledosyaya iki satır ekleyerek hızlı ve kolay bir çözüm buldu .

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Lütfen bunu% 100 doğru izleyin.


1
Bunu nereye eklerim?
Travis Delly

Bunu android / build.gradle dosyasına ekle
Manoj

2
@ Build.gradle dosyasının hangi bölümüne bunu koymamız gerekiyor?
Keval Langalia

@KevalLangalia, sadece bu iki satırı android -> build.gradle dosyasına ekleyin. örneğin: buildscript {ext {buildToolsVersion = "28.0.3" minSdkVersion = 19 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesVersion = "16. +" firebaseVersion = "17.3.4"}
Manoj

1
really helpful ... Thank you
Vasudev Vyas

6

Her şey kütüphane sürümleri uyumluluğu ile ilgili

Bu garip böcek iki saat iki karşı karşıya idi. Bu hatayı şu adımları uygulayarak çözdüm

build.gradle bağımlılıklarınızı

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

için

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

1
Dürüst olmak gerekirse ben de aynı şeyi yaptım ve bu yüzden işlem birleştirme sonra tüm kütüphane sürümleri uyumluluğu hakkında tahmin
Milos

6

Sadece androidx kullanmak istemiyorsanız

Benim durumumda, ben androidx kullanan bir kütüphane kullanıyorum ama androidx kullanmıyorum bu yüzden bu kütüphane sürümünü indirdiğimde sorun çözüldü.

Benim durumumda:

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

yukarıda belirtilen kütüphane 13. sorunu yaratıyor. + androidx kullanan kütüphanenin otomatik olarak yeni bir versiyonunu alacak. Bu yüzden kütüphane sürümünü düşürdüm:

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

Ve sorun çözüldü.


6
  1. Lütfen Refactor-> Migrate-> Android X'e Migrate'a gidin.

  2. Lütfen bunu gradle.propertiesdosyanıza ekleyin :

    android.enableJetifier=true
    android.useAndroidX=true

Ve Senkronizasyon gerçekleştirin.


Açıklayabilir misiniz, şimdi durumunuz nedir?
Girish BR

Miras aldığım proje yarım on yıllık. Google'ın ittiği yeni Fabric / Firebase analizlerini uygulamaya çalıştım. Ve bu yeni kütüphane androidx uyumluluk kütüphaneleri kullanıyor ve projem AppCompat kullanıyor. Şimdi, tonlarca bağımlılık güncellemesi ve bununla uğraşmak zorunda kaldım. Durdum ve sonra bu komutlar da dahil olmak üzere çeşitli şeyler denedim ve yeni Firebase şeyler yüzünden onlara ihtiyacım var. Bunu açtıktan sonra tonlarca derleyici hatası aldım. Bu düzeltildi ama şimdi ui xml dosyalarından gelen hatalar var .. Yani her şeyi terk etmek ve eski sürümleri ile denemek zorunda kalacak.
Martin Berger

Sınıf ad alanlarını androidx'e manuel olarak bir saat daha sabitledikten sonra, şimdi çalışıyor gibi görünüyor. Sorun şu ki, derleyici xml'de örneğin "android.support.v7.widget.AppCompatSpinner" "androidx.appcompat.widget.AppCompatSpinner" olması gerektiğini algılayamadı. Bu belge kullanışlı oldu: developer.android.com/jetpack/androidx/migrate
Martin Berger

Umarım şimdi çalışıyor, bir şeyler ters giderse bana bildirin.
Girish BR

4

Yeni proje oluşturun ve build.gradle dosyalarınızı karşılaştırın ve tümünü değiştirin

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

ve bunun gibi bir şey olan yeni bir projede olduğu gibi diğer bağımlılıklar

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'

Ve sonra kotlin dosyalarında androidx kullanmak için ithalat düzeltildi.


Çünkü nedense androidx kullanmak istemiyorum.
shaby

4

Tüm yaptığım üst menüde "Refactor" seçeneğine gitmek oldu.

Ardından "AndroidX'e Taşı" yı seçin

Projeyi bir zip dosyası olarak kaydetmek için kabul edin.

Herhangi bir sorunla karşılaşmamak için lütfen Android Studio'yu ve Gradle'ı güncelleyin.


4

1. bu kodları uygulamanızın / build.gradle öğesinin sonuna ekledik:

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

2. 28 için modifiye sdk ve araçlar sürümü:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

AndroidManifest.xml dosyanıza iki satır eklemelisiniz:

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

Ya da sadece

  • Refactor'a gidin (Studio -> Menü -> Refactor)
  • AndroidX'e Taşı'yı tıklayın. işe yarıyor
  • işe yarıyor.

2
  • Refactor'a Git ( Resim )
  • AndroidX'e Taşı'yı tıklayın. işe yarıyor
  • işe yarıyor.

1
Bir çözümün bağlantısı hoş karşılanır, ancak lütfen cevabınızın onsuz faydalı olduğundan emin olun: bağlantınızın çevresine bağlam ekleyin, böylece diğer kullanıcılarınız ne olduğu ve neden orada olduğu hakkında bir fikir edinebilir, ardından sayfanın en alakalı bölümünü alıntılayabilirsiniz ' hedef sayfanın kullanılamaması durumunda bağlantı kuruluyor. Bir bağlantıdan biraz daha fazlası olan yanıtlar silinebilir.
Matthew

2

AndroidX'e geçmek istemiyorsanız aşağıdaki adımları izleyin

  1. Terminal tipi gradlew uygulamasında: bağımlılıklar
  2. Bağımlılıklar pencerede gösterildikten sonra Ctrl + f tuşlarına basın ve androidX yazın
  3. Androidx lib'i dahili olarak kullanan tüm bağımlılıkları bu sürümden düşürmek veya artık dahili olarak androidX libs kullanmadığından emin olmak için alternatif kullanmak zorunda kalabilirsiniz.

1

Üç gün boyunca aynı problemi yaşadım.

Android'in Kotlin veya AndroidX'i kullanmamızı istediği gibi, Android ile de yapıyorlar.

Ama ben böyle çözdüm.

  • Projemi AndroidX'e taşıdım. Bu, söz konusu sorunla ilgili herhangi bir hata getirmez, sırasıyla dosyaları günceller. Uygulamanızda hiçbir yöntemin, sınıfın veya değişken adının değiştirilmesi gerekmez.

Not: Android Studio 3.4.1'in en son kararlı sürümünde en son Kitaplıkları (build.grudle dosyası) kullanıyor olmalısınız


1

Bunun doğru cevap olup olmadığını bilmiyorum ama benim için çalıştı

Izgara Sarıcı Özelliğini Artırın

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

ve Izgara Oluşturun

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

sürümü nedeniyle gösterme hatası.


Ben dize androidx.core.app.AppComponentFactory olması gerektiğini düşünüyorum, rastgele dizeleri bazı zamanlar rastgele hatalara neden olacaktır.,
seyedrezafar

0

Her şeyden önce bu satırı manifest etiketine eklediğinizden emin olun

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

Ardından Android stüdyosunda önerilen araçların yerine araçlar ekleyin


0

Build.gradle (Module: app) içindeki proguardFile öğesini aşağıdaki gibi değiştirin

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

onun yerine

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

Bu benim için çalıştı


0

Bu sorunu çözmek android/build.gradleiçin kök projenizdeki ext değişkenlerinin sürümünü açıkça tanımlamanızı öneririm

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
}

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


0

Ben de aynı sorunu yaşıyorum, android stüdyo için, sadece android Gradle eklentisi sürüm 3.3.2 değiştirmek ve Gradle sürümü 5.1.1


0

benim durumumda manifest dosyasına ekliyorum `

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

uygulama etiketi tabii ki, çalışacak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.