Tidak dapat menggabungkan dex


307

Saya memiliki Android Studio Beta. Saya membuat proyek baru dengan mengkompilasi modul lama saya tetapi ketika saya mencoba meluncurkan aplikasi itu tidak memulai dengan pesan:

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

com.android.builder.dexing.DexArchiveMergerException: Tidak dapat menggabungkan dex

Tapi saya tidak tahu bagaimana cara mengatasi kesalahan ini. Saya mencari Google selama berjam-jam tetapi tidak berhasil.

Gradle proyek saya:

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta6'
        classpath "io.realm:realm-gradle-plugin:3.7.1"
        classpath 'com.google.gms:google-services:3.1.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Gradle aplikasi saya:

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "parad0x.sk.onlyforyou"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
        }
    }
    compileOptions {
        targetCompatibility 1.7
        sourceCompatibility 1.7
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    lintOptions {
        checkReleaseBuilds false
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    //noinspection GradleCompatible
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile project(path: ':loginregisterview')


}

Dan gradel modul saya:

    apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.2'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.github.bumptech.glide:glide:4.0.0'
    testCompile 'junit:junit:4.12'
    compile project(path: ':parser')

}

Modul kedua saya:

     apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    realm {
        syncEnabled = true
    }
    useLibrary 'org.apache.http.legacy'

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile 'junit:junit:4.12'
    //  compile 'com.android.support:appcompat-v7:23.1.0'

    //   compile 'com.fasterxml.jackson.core:jackson-core:2.9.0'
 //   compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.0'
 //   compile 'com.fasterxml.jackson.core:jackson-databind:2.9.0'
    compile 'com.google.code.gson:gson:2.6.2'
}

____________temuan_________

Ketika saya tidak mengimpor modul kedua (parser) aplikasi tidak crash pada dex tetapi ketika modul itu tidak diimpor aplikasi tidak berfungsi. :DD


6
Jika ada orang yang mendapatkan masalah yang sama di versi Android Studio 3.0 Stable, saya akan sangat menyarankan Anda untuk meninjau jawaban stackoverflow.com/questions/46949761/… dan lihat apakah itu dapat membantu Anda.
Bhavesh Patadiya

1
Saya memiliki masalah yang sama dan saya mengikuti setiap metode yang disebutkan di halaman ini tetapi tidak membantu saya, jadi saya pergi ke gradle dan tahan kursor di setiap perpustakaan untuk memeriksa apakah versi baru mereka tersedia atau tidak. mereka yang memiliki versi baru jadi saya perbarui, sinkronkan gradle dan jalankan. itu berhasil.
Shahzad Afridi

Jawaban:


293

Saya memiliki masalah yang sama ketika saya memperbarui dari com.google.android.gms:play-services:11.2.2ke com.google.android.gms:play-services:11.4.0. Ini menyelesaikannya untuk saya:

  1. bersih
  2. membangun kembali

Anda hanya menunda masalah sebenarnya dengan solusi itu. mungkin ver 11.4.0 mengandung lebih sedikit metode. Lihat jawaban saya di bawah ini. Anda akan mendapatkan kesalahan ini di ketergantungan berikutnya Anda akan menambahkan saya kira
itzhar

2
Ini menyelesaikan masalah saya, di mana multiDexEnabled truesaja tidak
Yuri Brigance

28
isse yang sama dengan com.google.android.gms: play-services-location: 11.6.0 ... ini bukan solusi yang valid
issamux

3
Solusi ini berfungsi untuk saya ketika saya mengalami masalah kompatibilitas menggunakan perpustakaan analytics google. Di AS melihat panel navigator proyek android sebagai "Proyek", Anda akan melihat "Perpustakaan Eksternal", jika Anda memperluas perpustakaan eksternal, Anda akan melihat semua stoples dan modul yang digunakan untuk mengkompilasi proyek. Ini akan membantu Anda mengidentifikasi kombinasi modul yang tidak kompatibel.
angryITguy

3
Jika kode di atas tidak berfungsi jika "compileSdkVersion 26", coba ini .. buka - build.gradle (Module: app) - tambahkan "multiDexEnabled true" dalam kategori defaultConfig dan langkah terakhir Buka File | Pengaturan | Bangun, Eksekusi, Penempatan | Jalankan Instan dan coba Aktifkan / Nonaktifkan
Sumit Saxena

325

Saya mencoba semua hal di atas dan tidak ada yang membantu. akhirnya, saya menemukan pekerjaan ini untuk saya:

app / build.gradle:

android {
    defaultConfig {
       multiDexEnabled true
    }
}

11
Terima kasih. Saya pikir masalahnya adalah bahwa sebagian besar jawaban tidak memperhitungkan termasuk file JAR dari sumber lain yang Anda tidak dapat membangun kembali. multiDex tampaknya memungkinkan kode yang tidak kompatibel digabungkan.
Brendon Whateley

2
Solusi ini bekerja untuk saya, tetapi di samping itu, saya harus secara eksplisit mengaktifkan multidex untuk API <= 21 developer.android.com/studio/build/multidex.html
hamou92

2
Meskipun lebih relevan daripada jawaban yang diterima saya masih mendapatkan pesan "Tidak dapat menggabungkan dex"
John

13
Tidak bekerja untuk saya. Dengan perubahan ini saya mendapat kesalahan berbeda: Eksekusi gagal untuk tugas ': aplikasi: transformClassesWithMultidexlistForDebug
Atul

1
Ya selama 5 jam saya tinggal dengan jawaban yang sama sekali berbeda. Tapi entah bagaimana saya menyadari itu masalah Multidex dan mendarat di sini. Aku benar. Terima kasih
kawan

59

Perhatikan Peringatan!

Terkadang Anda hanya perlu menghilangkan peringatan dan kesalahan akan otomatis hilang. Lihat di bawah kasus khusus:


Saya memiliki dua dependensi ini di build.gradlefile level modul saya :

implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

dan Studio telah memperingatkan ( selain masalah penggabungan dex ):

Semua com.android.supportpustaka harus menggunakan spesifikasi versi yang sama persis (pencampuran versi dapat menyebabkan crash runtime). Versi ditemukan 27.0.2, 21.0.3. Contohnya termasuk com.android.support:animated-vector-drawable:27.0.2dancom.android.support:support-v4:21.0.3

Jadi saya secara eksplisit menentukan versicom.android.support:support-v4 (lihat di sini untuk detail) dan kedua masalah (peringatan dan yang terkait dengan dex merger) diselesaikan :

implementation 'com.android.support:support-v4:27.0.2'  // Added this line (according to above warning message)
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

Lihat komentar di bawah ini untuk situasi serupa lainnya.


1
Terima kasih, ini memperbaiki masalah saya. Awalnya ini disebabkan oleh penambahan eu.inloop: androidviewmodel: 1.3.4
lsrom

1
Tepat, saya hanya berharap kesalahan bisa lebih tepat
Amin Keshavarzian

1
Terima kasih banyak. Saya memiliki masalah yang sama. Saya menggunakan v26, diperbarui ke SDK 27 dan memecahkan masalah.
Johnny

2
Ini seharusnya jawaban yang benar. Bangunan saya berhenti bekerja setelah menambahkan satu perpustakaan (airbnb / epoxy) yang memiliki ketergantungan support:design:26.1.0, dan saya belum memiliki ketergantungan itu. Versi pustaka pendukung saya yang lain adalah 27.1.0. Setelah menambahkan support:designketergantungan dengan 27.1.0versi, masalah saya telah diatasi.
alashow

2
Terima kasih. Anda menghemat hari saya.
Nithinjith

37

Dalam kasus saya, Sayangnya, baik solusi Michel maupun Suragch tidak bekerja untuk saya.

Jadi saya memecahkan masalah ini dengan melakukan hal berikut:

Dalam Gradle: 3.0 tersebut kompilasi konfigurasi sekarang usang dan harus diganti dengan implementasi atau api . Untuk informasi lebih lanjut, Anda dapat membaca di sini. Anda dapat membaca dokumen resmi di Gradle Build Tool

Konfigurasi kompilasi masih ada tetapi tidak boleh digunakan karena tidak akan menawarkan jaminan yang disediakan oleh api dan konfigurasi implementasi.

lebih baik menggunakan implementasi atau api daripada kompilasi

ganti saja kompilasi dengan implementasi , debugCompile dengan debugImplementation , testCompile dengan testImplementation dan androidtestcompile dengan androidTestImplementation

Misalnya: Alih-alih ini

compile 'com.android.support:appcompat-v7:26.0.2'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.github.bumptech.glide:glide:4.0.0'

gunakan seperti ini

implementation 'com.android.support:appcompat-v7:26.0.2'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.github.bumptech.glide:glide:4.0.0'

Setelah itu

  • Hapus folder .gradle di dalam proyek Anda (Perhatikan bahwa, untuk melihat .gradle, Anda perlu beralih ke tampilan "Project" di navigator di kiri atas)
  • Hapus semua folder build dan cache gradle.
  • Dari menu Bangun, tekan tombol Bersihkan Proyek .
  • Setelah tugas selesai, tekan tombol Rebuild Project dari menu Build.

Semoga ini bisa membantu!


2
Terima kasih, yang harus saya lakukan hanyalah mengubah kompilasi menjadi implementasi dan berhasil dibangun, tidak harus menyelesaikan langkah-langkah lainnya. Bangunan mulai gagal setelah saya memperbarui SDK Facebook
Shayno

2
Bekerja untuk saya - wawasan mengapa?
Alex

1
Folder yang akan dihapus seharusnya .gradledan tidak./gradle
Gary Bak

1
Satu-satunya jawaban yang benar-benar bekerja untuk saya. Terima kasih!
Michael Richardson

1
Terima kasih, ini adalah jawaban paling keren. Itu harus di atas pencarian. Bekerja untukku.
Bahaya

27
  1. Hapus .gradledirektori.

  2. Jalankan lagi aplikasi Anda.

Catatan

  • The .gradledirektori di root folder proyek Anda. (Anda mungkin harus menampilkan file tersembunyi terlebih dahulu.)
  • Saya harus melakukan ini setiap kali saya memperbarui modul ketergantungan menggunakan Android 3.0. (Rilis Android Studio 3 yang lebih baru tampaknya telah menyelesaikan masalah.)

4
ini membantu saya ketika saya juga melakukan Cache Tidak Valid dan memulai kembali
Vasili Fedotov

Saya tidak percaya ketika ini memperbaiki masalah saya .. saya telah mencoba memperbarui semuanya, menghapus semua kata kunci kompilasi, memperbarui beberapa versi tersangka ilb .. ketika saya akhirnya melakukan ini, itu berhasil ..
hanzolo

Anda telah menyelamatkan hidup saya! Terima kasih
Masterfego

24

Menghapus .gradleseperti yang disarankan Suragch tidak cukup untukku. Selain itu, saya harus melakukan Build > Clean Project.

Perhatikan bahwa, untuk dapat melihat .gradle, Anda perlu beralih ke tampilan "Project" di navigator di kiri atas:

Beralih ke tampilan proyek


23

Saya mencoba setiap solusi lain, tetapi tidak ada yang bekerja untuk saya. Pada akhirnya, saya menyelesaikannya dengan menggunakan versi ketergantungan yang sama dengan mengedit build.gradle. Saya pikir masalah ini terjadi ketika menambahkan perpustakaan ke dalam gradle yang menggunakan versi ketergantungan yang berbeda dari dukungan atau perpustakaan google.

Tambahkan kode berikut ke file build gradle Anda. Kemudian cleandan rebuildproyekkan.

ps: itu solusi lama bagi saya sehingga Anda harus menggunakan versi terbaru dari pustaka berikut.

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '26.1.0'
        }
    } else if (requested.group == "com.google.android.gms") {
        details.useVersion '11.8.0'
        } else if (requested.group == "com.google.firebase") {
            details.useVersion '11.8.0'
          }
      }
}

5
mencoba semua solusi lain, pada akhirnya hanya ini membantu: /
Ante

@ Ali Gurelli Terima kasih banyak saya mencoba banyak solusi tetapi hanya ini yang berfungsi.
Bipin Bharti

Thanx But Bagi saya, saya menggunakan Version details.useVersion '15 .0.0 '
Elsunhoty

Terima kasih atas solusinya. Masalah yang sama terjadi pada saya. google tap dan pay adalah 10.0.0 dan sisanya semua lib ada di versi terbaru
R World

Bekerja dengan lancar, terima kasih
Sankalp

14

jika (1. Cobalah untuk membersihkan dan membangun kembali pekerjaan) maka bagus

lain jika (2. Cobalah untuk menghapus pekerjaan gradle) maka bagus

else-> 3. Cobalah untuk menambahkan grade.properties

android.enableD8 = false

else-> 4. Tambahkan multiDexEnabledtrue ke build.gradle Anda

android {
    compileSdkVersion 26
    defaultConfig {
      ...
        minSdkVersion 15
        targetSdkVersion 26
        multiDexEnabled true
     ...
    }
}

dan tambahkan ketergantungan

dependencies {
    compile 'com.android.support:multidex:1.0.1'}

Mungkin yang pertama berfungsi untuk Anda dan seterusnya tetapi itu benar-benar tergantung pada sifat masalah Anda untuk saya misalnya

Saya mendapatkan kesalahan setelah menambahkan perpustakaan ini

implementation 'com.jjoe64:graphview:4.2.2'

dan kemudian saya menemukan bahwa saya harus memeriksa itu dan saya harus menambahkan versi yang sama dari perpustakaan dukungan. Jadi saya harus mencoba versi lain

compile 'com.jjoe64:graphview:4.2.1'

dan itu memperbaiki masalah. Jadi perhatikan hal itu.


3
Cara paling bermanfaat untuk masalah ini. Satu yang ingin saya sebutkan di sini adalah, Anda dapat menggunakan aplikasi 'gradlew: transformDexArchiveWithExternalLibsDexMergerForDebug --stacktrace' cmd untuk lebih jelasnya. Saya menyelamatkan saya, ternyata saya harus mengaktifkan multidex. Semoga bermanfaat.
panda

13

Dalam masalah kasus saya adalah karena perpustakaan kamar:

compile 'android.arch.persistence.room:runtime:1.0.0-alpha1'

Mengubahnya menjadi:

compile 'android.arch.persistence.room:runtime:1.0.0'

bekerja.


Terima kasih banyak, ini banyak membantu saya!
Phil

Sangat senang menemukan jawaban ini. Terima kasih!
callOfCode

12

Hanya untuk menambah solusi di atas:

Pastikan Anda tidak memiliki dependensi duplikat yang menunjuk ke versi yang berbeda, di banyak tempat (atau bahkan di file yang sama).


Saya pikir ini harus menjadi cek pertama sebelum menambahkan multiDexEnabled true, dan mencoba jawaban lain. Terima kasih!
Aleksandr A

11

Hai saya punya masalah yang sama mencoba hampir semuanya. Jadi, akhirnya saya menyelesaikan setelah 6 jam perjuangan panjang dengan men-debug semuanya baris demi baris.

classpath 'com.google.gms:google-services:3.0.0'

Google-services 3.0 Tidak mendukung firebase dengan Studio 3.0 dengan playServiceVersion: 11.6.0 atau kurang.

implementation "com.google.firebase:firebase-messaging:$rootProject.ext.playServiceVersion"
implementation "com.google.firebase:firebase-core:$rootProject.ext.playServiceVersion"
implementation "com.firebase:firebase-jobdispatcher-with-gcm-dep:$rootProject.ext.jobdispatcherVersion"

Solusi:

Saya telah mengubah layanan google menjadi

classpath 'com.google.gms:google-services:3.1.1'

Dan itu mendukung layanan firebase.

Semoga seseorang menghemat waktunya.


1
Saya memiliki masalah yang sama dengan menggunakan playServiceVersion sebagai implementasi 11.4.0 "com.google.firebase: firebase-core: 11.4.0" ubah ke implementasi "com.google.firebase: firebase-core: 11.6.2" telah diperbaiki isu . Jadi tolong verifikasi ketergantungan versi untuk lib
durgeshtrivedi yang

9
  1. Memungkinkan

    defaultConfig {multiDexEnabled true}

  2. Jika langkah 1 tidak berhasil, maka

    Buka struktur proyek dan temukan pustaka eksternal yang menggunakan versi yang berbeda. Klik dua kali padanya dan hapus file jarnya. Tutup proyek dan buka lagi studio android yang akan membangun kembali proyek. Masalahnya harus hilang.


+1 - Saya mendapat lib dukungan, rxjava, dan ketergantungan pihak ke-3 (baris 13k). Mata saya hampir keluar ketika saya melihat metode menghitung.
snodnipper

6

Salah satu kemungkinan adalah: keberadaan perpustakaan yang sama tetapi dengan versi yang berbeda dalam dependensi .

Saya punya masalah dengan baris berikut dalam file gradle:

  • compile fileTree(include: ['*.jar'], dir: 'libs')
  • compile 'com.google.code.gson:gson:2.8.2'

Perpustakaan gson berada di direktori libs saya tetapi dengan versi sebelumnya. Saya menghapusnya gson-2.3.1.jardari direktori libs dan semuanya kembali normal.


menghapus compile fileTree(include: ['*.jar'], dir: 'libs')diperbaiki untuk saya juga .. terima kasih (y)
Dinuka Salwathura

5

Jika kesalahan ini muncul untuk Anda setelah menyertakan dukungan kotlin, dan tidak ada solusi lain yang berfungsi, coba ubah ketergantungan kotlin pada modul aplikasi build.gradlemenjadi:

implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") {
    exclude group: 'org.jetbrains', module: 'annotations'
}

Ini berfungsi untuk saya di Android Studio 3.0 Beta 6. Lihat jawaban ini untuk penjelasan lebih lanjut.


Yap, sepertinya pengantar Kotlin bisa merusak pembangunan jika anotasi tidak dikecualikan.
Stoycho Andreev

Terima kasih. Ini adalah perbaikan untuk saya. Saya berjuang 3 hari untuk mengidentifikasi masalah saya.
Naveen Kumar M

Coba perbarui ke plugin Kotlin versi 1.2.30 sebagai gantinya (baru saja dirilis). Sekarang Instant Run dapat diaktifkan kembali juga!
KTCO


5

[TIDAK DAPAT MENYELESAIKAN DEX ASK] Setelah berjam-jam tumpukan meluap saya memutuskan "TIDAK Mampu GABUNG DEX ERROR"

  1. Perbarui semua baris com.android.sup dalam gradle Anda ke v27.1.0

Penyebab - Android telah memperbaruinya mendukung perpustakaan ke v27.1.0, jadi Anda harus mengubah semua jalur dukungan android di file gradle Anda menjadi 27.1.0 dari 26.1.0

  1. Pastikan bahwa bagian repositori termasuk bagian pakar dengan " https://maven.google.com titik akhir " ". Sebagai contoh:

    allprojects {repositories {jcenter () maven {url " https://maven.google.com "}}}

Penyebab: - Android tidak dapat memperbarui perpustakaan dukungan di manajer SDK dan sekarang menggunakan maven.google.com untuk memperbarui, jadi Anda harus memasukkan ini untuk menggunakan perpustakaan dukungan 27.1.0

Setelah Perubahan Versi: 1. Clean Project 2. Rebuild Project


4

tambahkan perintah di bawah ini:

android {
...

    dexOptions {

        jumboMode true
        javaMaxHeapSize "4g"

    }
}

4

Menginstal layanan Google play (versi terbaru) + termasuk

android {
    defaultConfig {
        multiDexEnabled true
        }
}

di build.gradle memecahkan masalah bagi saya, pastikan untuk membersihkan dan membangun kembali proyek!


3

Dalam kasus saya itu gson-2.8.1.jar yang telah saya tambahkan ke folder libs proyek. Tapi referensi sudah ada di sana oleh SDK. Jadi tidak perlu menambahkan gson-2.8.1.jar ke folder libs.

Ketika saya mengeluarkannya gson-2.8.1.jar proyek mengkompilasi tanpa kesalahan wiered ini.

Jadi cobalah untuk merevisi folder libs dan dependensi .


3

Saya setuju dengan Chris-Jr. Jika Anda menggunakan Firebase untuk menyematkan iklan AdMob Anda (atau bahkan jika Anda tidak), play-services-analytics menyertakan iklan play-service-meskipun Anda tidak menambahkannya sebagai ketergantungan. Google jelas telah membuat kesalahan dalam peluncuran 11.4.0 mereka karena analitik termasuk versi 10.0.1 dari iklan, bukan 11.4.0 (petunjuk mouse di gradle menunjukkan ini).

Saya secara manual menambahkan kompilasi 'com.google.android.gms: play-services-ads: 11.4.0' di bagian atas yang berfungsi, tetapi hanya setelah saya menonaktifkan Instant Run: http://stackoverflow.com/a/35169716/530047

Jadi itu mundur ke 10.0.1 atau menambahkan iklan dan menonaktifkan Instant Run. Itulah yang saya temukan jika itu membantu.


Apakah OP menyebutkan Layanan Play?
IgorGanapolsky

Jawaban yang disetujui benar. Jika masalah ini muncul tanpa skenario itu maka saya tidak tahu!
Jonathan

2

Saya mengalami masalah yang sama dan menemukan alasan sebenarnya untuk kasus saya. Sebelumnya, saya juga mencoba semua jawaban sebelumnya lagi, tetapi tidak menyelesaikan masalah. Saya memiliki dua modul dalam proyek aplikasi pakaianku, dan build.gradle sebagai berikut:

build.gradle modul pakai:

implementation project(':common')
implementation files('libs/farmer-motion-1.0.jar')

build.gradle modul umum:

implementation files('libs/farmer-motion-1.0.jar')

Sebelum meningkatkan ke gradle 3.x, 'implementasi' semuanya 'kompilasi'.

Saya menjalankan gradlew dengan opsi --stacktrace untuk mendapatkan jejak stack, Anda bisa mengklik ini pada jendela konsol gradle ketika masalah ini muncul. Dan menemukan bahwa ketergantungan pada paket toples berulang:

Caused by: com.android.dex.DexException: Multiple dex files define Lcom/farmer/motion/common/data/pojo/SportSummary$2;

Ringkasan Kelas Sport di paket Farmer-Motion-1.0.jar, setelah membaca panduan migrasi resmi , saya mengubah build.gradle saya menjadi sebagai berikut:

build.gradle modul pakai:

implementation project(':common')
// delete dependency implementation files('libs/farmer-motion-1.0.jar')

modul umum 的 build.gradle:

api files('libs/farmer-motion-1.0.jar') // change implementation to api

Sekarang modul pakai akan memiliki ketergantungan petani-gerak-1.0.jar ekspor dengan modul umum. Jika tidak ada ketergantungan pada paket jar selama runtime , dependensi ' implementasi ' paket jar juga bisa diubah menjadi 'compileOnly' .


2

Saya juga punya masalah.

Saya dapat menyelesaikannya dengan mengubah compileSdkVersiondan targetSdkVersionke versi terbaru.


2

Untuk proyek kami, kami tidak sengaja menambahkan stoples yang sama dua kali dengan nama yang berbeda. Menghapus salah satu dari mereka memecahkan masalah.


Ini menyelesaikan masalah saya. Saya sedang membangun proyek perpustakaan android internal dan di bawah libsfoldernya, saya punya dua file jar, salah satunya hanya cadangan dari yang lain tetapi dengan nama file yang berbeda.
hopia

2

Ini mungkin bukan masalah Anda, tetapi saya mendapatkan kesalahan ini ketika saya secara tidak sengaja memasukkan dua pustaka yang identik (tetapi berbeda namanya) di bagian dependensi {} proyek.


1

Bagi saya itu memperbarui perpesanan firebase di app \ build.gradle:

compile 'com.google.firebase:firebase-messaging:10.0.1'

untuk

compile 'com.google.firebase:firebase-messaging:11.4.2'

1

Salah satu penyebab root yang mungkin: duplikat dependensi sementara yang tidak ditangani dengan benar oleh Android Studio mengimpor proyek multi-modul. Periksa daftar Anda dan hapus. Bagi saya, perbaikannya adalah ini:

--- a/project/module/build.gradle
+++ b/project/module/build.gradle
@@ -21,5 +21,4 @@ android {
 dependencies {
     implementation project(':upstream-dependency-project')
     implementation 'com.android.support:support-v4:18.0.0'
-    implementation files('libs/slf4j-android-1.6.1-RC1.jar')
 }

1

Saya mencari tahu alasan masalah ini untuk proyek saya. Saya menambahkan satu ketergantungan dua kali di build.gradle . Satu kali dengan menambahkan ketergantungan dan satu kali lagi dengan menambahkan ketergantungan jar:

kompilasi 'org.achartengine: achartengine: 1.2.0'
...
file implementasi ('../ achartengine-1.2.0.jar')

setelah menghapus masalah baris pertama diselesaikan.


1

Jika jawaban teratas tidak berhasil untuk Anda, masalah Anda mungkin adalah Anda memiliki banyak dependensi yang bergantung pada pustaka yang sama.

Berikut ini beberapa kiat debug. Dalam kode contoh ini, com.google.code.findbugs:jsr305:3.0.0 adalah perpustakaan yang menyinggung.

Selalu bersih dan bangun kembali setiap kali Anda memodifikasi untuk memeriksa solusi Anda!

  1. Bangun dengan --stacktracebendera untuk lebih detail. Ini akan mengeluh tentang kelas, Google kelas yang menemukan perpustakaan. Inilah cara Anda dapat mengatur studio Android untuk selalu menjalankan gradle dengan --stacktraceflag .

  2. Lihatlah Gradle Console di Android Studio View > Tool Windows > Gradle Consolesetelah dibuat

  3. Periksa ketergantungan berulang dengan menjalankan ./gradlew -q app:dependencies. Anda dapat menjalankannya kembali setiap kali Anda memodifikasi build.gradle Anda.

  4. Di build.gradle,

    android {
            ...
            configurations.all {
                resolutionStrategy {
                    // Force a particular version of the library 
                    // across all dependencies that have that dependency
                    force 'com.google.code.findbugs:jsr305:3.0.0'
                }
            }
    }
  5. Di build.gradle,

    dependencies {
        ...
        implementation('com.google.auth:google-auth-library-oauth2-http:0.6.0') {
            // Exclude the library for this particular import
            exclude group: 'com.google.code.findbugs'
        }
    }
  6. Di build.gradle,

    android {
        ...
        configurations.all {
            resolutionStrategy {
                // Completely exclude the library. Works for transitive
                // dependencies.
                exclude group: 'com.google.code.findbugs'
            }
        }
    }
  7. Jika beberapa dependensi Anda ada dalam file jar, buka file jar dan lihat apakah ada nama kelas yang saling bertentangan. Jika ya, Anda mungkin harus membangun ulang toples dengan nama kelas baru atau melihat ke dalam naungan .

Beberapa bacaan latar belakang:


1
android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

2
Bisakah Anda menguraikan?
sg7

Saya juga memiliki masalah yang sama tetapi saya menyadari bahwa menyelesaikan masalah saya pada saat itu tetapi di masa depan pembaruan, semuanya mungkin benar-benar berubah.
Eben Watts

1

Dalam kasus saya perpustakaan membuat masalah ini, perpustakaan berhasil ditambahkan ke proyek tetapi ketika saya menjalankan aplikasi saya itu menunjukkan kesalahan ini kepada saya. Jadi jika ini terjadi pada Anda juga, Anda dapat pergi ke github dan memeriksa masalah atau mengangkat masalah baru. Jika Anda tidak menemukan solusi apa pun tentang perpustakaan saya sarankan Anda untuk menggantinya.

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.