Android Material dan merger Manifes appcompat gagal


223

Saya memiliki kelas selanjutnya

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

Tetapi ketika saya ingin membangun aplikasi, saya mendapatkan log selanjutnya:

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.

Okey! Pergi ke manifes dan lakukan:

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

Lalu saya mendapatkan kesalahan ini di Logcat saya:

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

2
Coba hapus baris ini: implementasi 'com.android.support:appcompat-v7:28.0.0-rc01' dan implementasi 'com.android.support.constraint: layout kendala: 1.1.2'
vcapra1

2
Saya pikir paket material semuanya dibundel ke dalam desain-android, periksa ...
Marcos Vasconcelos

Saya membutuhkan ini: material.io/design/components/app-bars-bottom.html . Ini ke dalam desain-android?
Евгений Усов

Anda dapat memeriksa yang ini juga: stackoverflow.com/a/54825603/1318946
Pratik Butani

Studio android baru memiliki fitur untuk memigrasi aplikasi Anda ke androidX dengan lancar. ikuti tautan di bawah ini. github.com/material-components/material-components-android/…
Ravi Jaggarapu

Jawaban:


15

Cukup ganti "rc01" pada baris pertama dan terakhir di dalam dependensi menjadi "alpha1" Ini berfungsi untuk saya


Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / androidx.core_core.version
Aliton Oliveira

40
Saya tidak punya "rc01" yang ditulis dalam implementasi 'com.android.support:appcompat-v7:28.0.0'. Masih mendapatkan masalah. Tolong sarankan beberapa solusi.
avani kothari

10
Jawaban ini seharusnya merupakan komentar untuk pertanyaan itu.
Ananth

459

Saya punya masalah serupa. Menambahkan dua baris dalam gradle.propertiesfile:

android.useAndroidX=true
android.enableJetifier=true

Dua baris ini secara otomatis menyelesaikan konflik ketergantungan saya antara file google dan dependensi pihak ketiga. Berikut tautan untuk diikuti: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project


6
android.useAndroidX = true
Frank Fang

6
setelah menambahkan kesalahan berikut ini terjadi `` `* Apa yang salah: Eksekusi gagal untuk tugas ': react-native-camera: compileGeneralDebugJavaWithJavac'. > Kompilasi gagal; lihat output kesalahan kompiler untuk detailnya. * Coba: Jalankan dengan opsi --stacktrace untuk mendapatkan jejak stack. Jalankan dengan opsi --info atau --debug untuk mendapatkan lebih banyak keluaran log. Jalankan dengan --scan untuk mendapatkan wawasan penuh. `` `
Dileepa Chandima

@PrinceHamza periksa ini kami menemukan solusi untuk github.com/facebook/react-native/issues/…
Dileepa Chandima

9
Ini harus menjadi jawaban yang diterima. Ini memecahkan masalah.
VishalKale

2
"Tapi saya tidak melihat file 'gradles.properties'"! Ya, jadi di folder root aplikasi di proyek studio, buat file itu (tanpa ekstensi) dan tambahkan baris itu.
user1010160

145

Saya menghadapi kesalahan yang sama ketika saya mencoba menambahkan perpustakaan Kotlin-KTX ke proyek saya.

Saya mencoba migrasi AndroidX, dan masalah teratasi!

Refactor / Bermigrasi ke AndroidX


1
Ini berfungsi, tetapi beberapa pernyataan impor yang dihasilkannya menggunakan nama paket yang sudah usang. Saya harus memperbaiki banyak dari mereka, hanya dengan menggunakan androidx.*nama paket yang disarankan IDE sebagai perbaikan.
Andrew Koster

1
@Mete jawaban ini telah menyelamatkan hidupku. Bisakah saya membelikanmu bir?
girish_vr

@ girish_vr Terima kasih atas tawarannya :) Saya senang itu berhasil, itu sudah cukup untuk membuat saya tersenyum.
Mete

Saya mengalami masalah ini karena saya menarik rilis terbaru "dukungan-v4" perpustakaan di file build.gradle saya ... bukan praktik yang baik. Seandainya saya mereferensikan versi tertentu dari perpustakaan dalam file gradle saya, saya tidak akan pernah mengalami masalah ini sejak awal. Juga, setelah saya meneliti sedikit lebih banyak, saya bisa melihat bahwa Google merekomendasikan beralih ke perpustakaan AndroidX; jadi, saya memutuskan untuk menggigit peluru. Untungnya, semua masalah teratasi setelah pemutakhiran ... bencana dihindari dan PELAJARAN tentang referensi gradle.
BluJ IT

104

Alasan Gagal

Anda menggunakan pustaka materi yang merupakan bagian dari AndroidX . Jika Anda tidak mengetahui AndroidX, silakan buka jawaban ini .

Satu aplikasi harus menggunakan AndroidX atau pustaka Dukungan Android lama. Itu sebabnya Anda menghadapi masalah ini.

Sebagai contoh -

Di gradle Anda, Anda menggunakan

  • com.android.support:appcompat-v7 (Bagian dari --Android Support Library--)
  • com.google.android.material:material(Bagian dari AndroidX) (AndroidX build artifact of com.android.support:design)

Larutan

Jadi solusinya adalah menggunakan AndroidX atau Support Library lama. Saya merekomendasikan untuk menggunakan AndroidX, karena Android tidak akan memperbarui perpustakaan dukungan setelah versi 28.0.0. Lihat catatan rilis Perpustakaan Dukungan.

Hanya bermigrasi ke AndroidX. Inilah jawaban terperinci saya untuk bermigrasi ke AndroidX. Saya menempatkan di sini langkah-langkah yang diperlukan dari jawaban itu.

Sebelum Anda bermigrasi, sangat disarankan untuk membuat cadangan proyek Anda.

Proyek yang ada

  • Android Studio> Menu Refactor> Migrasikan ke AndroidX ...
  • Ini akan menganalisis dan akan membuka jendela Refraktor di bagian bawah. Terima perubahan yang harus dilakukan.

gambar

Proyek baru

Letakkan bendera ini di bendera Anda gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Periksa pemetaan @ Library untuk paket AndroidX yang sama .

Periksa @ halaman resmi Migrasi ke AndroidX

Apa itu Jetifier?


Masih memiliki kesalahan setelah itu, tetapi jawaban ini membantu: stackoverflow.com/a/49525685/1972372
Big_Chair

3
Harap ingat untuk mengklik "Lakukan refactor" di kiri bawah setelah mengklik "Migrasikan ke AndroidX"
SupaHam

88

Dalam kasus saya, ini berfungsi dengan baik .. Saya telah menambahkan di bawah dua kode baris di dalam file manifest

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

Penghargaan untuk jawaban ini .

Contoh file manifes


4
Saya tidak tahu apakah saya akan memiliki masalah di aplikasi saya nanti, tetapi itu berhasil!
Aliton Oliveira

4
Ya saya punya masalah: Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / androidx.core_core.version
Aliton Oliveira

3
maka saya mendapatkan kesalahan yang menyatakan alat tidak terikat dengan tag aplikasi.
Travis Delly

Bisakah Anda memposting logcat lengkap?
Muhaiminur Rahman


29

Solusi Sederhana - bermigrasi ke AndroidX

di gradle.properties, cukup tambahkan di bawah dua skrip

android.useAndroidX=true
android.enableJetifier=true

Apa alasannya ↓

Semua paket di AndroidX hidup dalam namespace yang konsisten dimulai dengan string androidx. Paket Perpustakaan Dukungan telah dipetakan ke dalam paket androidx. * Yang sesuai. Untuk pemetaan penuh dari semua kelas lama dan buat artefak ke yang baru, lihat halaman Refactoring Paket.

Silakan lihat halaman Paket Refactoring


Tidak ada file gradle.properties di proyek saya. (Awalnya dibuat di gerhana tahun yang lalu dan kemudian pindah ke android studio)
Sujith Manjavana

Oh ... Saya tidak menghadapi situasi seperti itu, saya menemukan di bawah utas yang dapat membantu Anda stackoverflow.com/a/37389861/6917362 Coba dan lakukan komentar tolong
EJ Chathuranga

Cukup buat file itu di dekat build.gradle utama jika tidak ada dan sinkronkan proyek.
Fedir Tsapana

13

Hapus saja ketergantungan android.support

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

Mengutip Dari Pedoman Material

Jika Anda belum ingin beralih ke paket androidx dan com.google.android.material baru, Anda dapat menggunakan Komponen Bahan melalui com.android.support:design:28.0.0-alpha3 dependensi.

Catatan: Anda tidak boleh menggunakan com.android.support dan com.google.android.dependencies dalam aplikasi Anda secara bersamaan.

Hanya menghapus ketergantungan ini berfungsi dengan baik

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

Berikut ini contoh dependensi lengkap

    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
Ini jawaban yang paling akurat.
Fran Marzoa

1
@ Franzarzoa Tidak. Apa yang terjadi ketika perpustakaan compat diimpor dari ketergantungan lain?
m0skit0

1
@ m0skit0 bahwa Anda harus memposting pertanyaan yang berbeda di sini, saya kira ...;)
Fran Marzoa


12

Lihat Gambar Ini dan Tambahkan baris ini di AndroidManifest.xml android Anda

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

masukkan deskripsi gambar di sini


string apa artinya?
Kishore Kumar

@KishoreKumar Anda dapat menambahkan nama string apa pun seperti appName juga.
Prashant Arvind

tepatnya, whateverString haruslah nama kelas penuh yang memperluas AppComponentFactory. misalnya, com.xxx.MyFactory kelas yang ditentukan khusus meluas AppComponentFactory
jiashie

11

Tambahkan baris ini di dalam file AndroidManifest.xml.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
alat menjadi merah saat menambahkannya. apakah ada hal lain yang perlu ditambahkan?
natsumiyu

Tidak ada lagi yang ingin ditambahkan. Salah satu alasannya mungkin adalah versi gradle Anda tidak cocok. Bisakah Anda menampilkan kode file AndroidManifest.xml Anda?
Ajay

Saya mencoba bermigrasi ke androidx dan saya gagal menjalankan Eksekusi untuk tugas ': app: compileDebugJavaWithJavac'. > Kompilasi gagal; lihat output kesalahan kompiler untuk detailnya.
natsumiyu

Berikut ini adalah manifes android <application android: allowBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: roundIcon = "@ mipmap / ic_launcher" android: usingCleartextTraffic = "true "android: supportRtl =" true "android: theme =" @ style / AppTheme "tools: replace =" android: appComponentFactory "android: appComponentFactory =" @ string / texthere ">
natsumiyu

1
Solusi Hebat, Menghemat waktu saya.
Umair Iqbal

9

cukup tambahkan dua baris kode ini ke file Manifest Anda

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

8

Ikuti langkah ini:

  • Goto Refactor dan Klik Migrasikan ke AndroidX
  • Klik Lakukan Refactor

Ini tidak akan melakukan seluruh refactor :(
Mohsin


6

Masalah ini terutama terjadi untuk dependensi lama .

Ada 2 solusi:

Pertama:

Perbarui semua old dependenciesdan ClassPaths dari Project level gradlefile.

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

Kedua:

Proyek Anda Migrate to AndroidX

Dari Android Studio Menu -> Refanctor -> Migrate to AndroidX

Terima kasih, beri tahu saya jika ada yang membantu dari jawaban ini.


6

Akhirnya menemukan solusi cepat dan mudah dengan menambahkan dua baris dalam android/build.gradlefile.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Silakan ikuti ini 100% benar.


1
Di mana bahkan menambahkan ini?
Travis Delly

Tambahkan ini di file android / build.gradle
Manoj Alwis

2
@ManojAlwis di bagian mana dari file build.gradle kita perlu meletakkan ini?
Keval Langalia

@KevalLangalia, cukup tambahkan dua baris ini ke file android -> build.gradle. misal: 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
sangat membantu ... Terima kasih
Vasudev Vyas

6

Ini semua tentang kompatibilitas versi perpustakaan

Saya menghadapi pasangan aneh yang aneh ini selama 2 jam. Saya menyelesaikan kesalahan ini dengan melakukan langkah-langkah ini

ubah dependensi build.gradle Anda menjadi

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

untuk

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

1
Jujur saya melakukan hal yang sama dan itu berhasil, jadi saya kira semua tentang kompatibilitas versi perpustakaan setelah menggabungkan proses
Milos

6

Hanya Jika Anda tidak ingin menggunakan Androidx

Jadi dalam kasus saya, saya menggunakan perpustakaan yang menggunakan androidx tapi saya tidak menggunakan androidx jadi ketika saya menurunkan versi perpustakaan itu masalah diselesaikan.

Dalam kasus saya:

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

perpustakaan yang disebutkan di atas membuat masalah 13. + secara otomatis akan mendapatkan versi baru perpustakaan yang menggunakan Androidx. Jadi saya menurunkan versi perpustakaan ke:

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

Dan masalahnya terselesaikan.


6
  1. Silakan buka Refactor-> Migrasikan-> Migrasikan ke Android X.

  2. Silakan tambahkan ini ke gradle.propertiesfile Anda :

    android.enableJetifier=true
    android.useAndroidX=true

Dan melakukan Sinkronisasi.


Bisakah Anda jelaskan, bagaimana situasi Anda sekarang?
Girish BR

Proyek yang saya warisi berusia setengah dekade. Saya mencoba menerapkan analisis Fabric / Firebase baru yang didorong oleh google. Dan perpustakaan baru itu menggunakan perpustakaan kompatibilitas androidx, dan proyek saya menggunakan AppCompat. Sekarang, saya harus berurusan dengan banyak pembaruan ketergantungan dan hal-hal lainnya. Saya berhenti, dan kemudian mencoba berbagai hal, termasuk perintah ini, dan saya membutuhkannya karena hal-hal Firebase baru. Setelah saya nyalakan ini saya mendapat banyak kesalahan kompiler. Memperbaiki itu tetapi sekarang saya memiliki kesalahan yang berasal dari file ui xml .. Jadi saya harus meninggalkan semuanya, dan coba dengan versi yang lebih lama.
Martin Berger

Setelah satu jam lebih memperbaiki ruang nama kelas secara manual ke Androidx, tampaknya berfungsi sekarang. Masalahnya adalah, kompiler tidak dapat mendeteksi dalam xml yang misalnya: "android.support.v7.widget.AppCompatSpinner" harus "androidx.appcompat.widget.AppCompatSpinner". Dokumen ini berguna: developer.android.com/jetpack/androidx/migrate
Martin Berger

Semoga berhasil sekarang, beri tahu saya jika ada masalah. Kami akan mengatasinya!
Girish BR

4

Buat proyek baru dan bandingkan file build.gradle Anda dan ganti semua

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

dan dependensi lain dengan yang sama seperti dalam proyek baru kira-kira seperti itu

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'

Dan kemudian memperbaiki impor untuk menggunakan androidx dalam file kotlin.


Karena beberapa alasan, saya tidak ingin menggunakan Androidx.
shaby

4

Yang saya lakukan adalah pergi ke opsi "Refactor" di menu atas.

Kemudian pilih "Migrasikan ke AndroidX"

Terima untuk menyimpan proyek sebagai file zip.

Harap perbarui Android Studio serta Gradle untuk memastikan tidak ada masalah.


4

1. Menambahkan kode-kode ini ke akhir aplikasi / build.gradle Anda:

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

2. Modifikasi SDK dan versi alat ke 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

3. Dalam file AndroidManifest.xml Anda, Anda harus menambahkan dua baris:

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

Atau Cukup

  • Pergi ke Refactor (Studio -> Menu -> Refactor)
  • Klik tombol Migrasi ke AndroidX. bekerja
  • bekerja.

2
  • Pergi ke Refactor ( Gambar )
  • Klik tombol Migrasi ke AndroidX. bekerja
  • bekerja.

1
Tautan ke suatu solusi disambut baik, tetapi harap pastikan jawaban Anda bermanfaat tanpanya: tambahkan konteks di sekitar tautan sehingga teman-teman Anda akan mengetahui apa itu dan mengapa ada, lalu kutip bagian yang paling relevan dari halaman yang Anda tuju. menghubungkan kembali jika seandainya halaman target tidak tersedia. Jawaban yang sedikit lebih dari sebuah tautan dapat dihapus.
Matius

2

Jika Anda tidak ingin bermigrasi ke AndroidX ikuti langkah-langkah di bawah ini

  1. Dalam aplikasi terminal jenis gradlew: dependensi
  2. Setelah dependensi ditampilkan di jendela, tekan Ctrl + f dan ketik androidX
  3. Anda akan menemukan semua dependensi yang menggunakan androidx lib secara internal Anda mungkin harus menurunkan versi itu atau menggunakan alternatif untuk memastikan tidak lagi menggunakan androidX libs secara internal.

1

Saya memiliki masalah yang sama selama tiga hari.

Ini seperti Android ingin kita menggunakan Kotlin atau AndroidX, mereka menghilangkan Android.

Tapi beginilah cara saya menyelesaikannya.

  • Saya memigrasikan proyek saya ke AndroidX. Ini tidak membawa kesalahan yang terkait dengan masalah ini, itu memperbarui file masing-masing. Tidak ada metode, kelas atau nama variabel yang perlu diubah dalam aplikasi Anda.

NB: Anda harus menggunakan Libraries terbaru (file build.grudle) dalam versi stabil terbaru dari android studio 3.4.1


1

Saya tidak tahu ini adalah jawaban yang tepat atau tidak tetapi itu berhasil untuk saya

Meningkatkan Properti Gridle Wrapper

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

dan Bangun Gridle ke

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

ini menunjukkan kesalahan karena versi.


Saya pikir string harus androidx.core.app.AppComponentFactory, string sewenang-wenang akan menyebabkan kesalahan acak beberapa kali.,
seyedrezafar

0

Pertama-tama pastikan untuk menambahkan baris ini dalam tag manifes

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

Kemudian tambahkan alat ganti yang Anda sarankan di Android studio


0

Ubah proguardFile di build.gradle (Module: app) sebagai berikut

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

dari pada

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

Ini berhasil untuk saya


0

Untuk mengatasi masalah ini, saya akan merekomendasikan untuk mendefinisikan secara eksplisit versi untuk variabel ext di android/build.gradleproyek root Anda

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
}

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


0

Saya juga menghadapi masalah yang sama, untuk studio android Anda, Anda hanya mengubah plugin Android Gradle versi 3.3.2 dan versi Gradle adalah 5.1.1


0

dalam kasus saya, saya menambahkan dalam file manifes `

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

tag aplikasi tentu saja, Ini akan berfungsi

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.