Beberapa file dex menentukan Landroid / support / v4 / Aksesibilitasservice / AccessibilityServiceInfoCompat

212

Jika saya lari gradle assembleDebugdari baris perintah, tiba-tiba saya mendapatkan kesalahan ini:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

Jika saya grep untuk v4 saya melihat dua file di dalam folder build saya.

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

File gradle saya hanya menyertakan pustaka dukungan ini:

compile 'com.android.support:support-v13:19.0.0'

Saya bingung bagaimana perpustakaan r7 dimasukkan entah bagaimana. Saya sudah menjalankan gradle cleandan selalu muncul di sana ketika saya jalankan kembali assembleDebug.

Jika saya menerima r7 di dalam direktori build, saya melihatnya di dalam file:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

Jika saya tidak menyertakan v13, maka hal-hal lain tidak dapat dikompilasi.

Tetapi bukankah v13 menyertakan pustaka dukungan v4?

Apakah ini ketidakcocokan antara bundel layanan play AAR dan pustaka v13?

Saya mengambil file gradle dari gradleplease.appspot.com.

Menghapus layanan bermain tidak memperbaikinya; kesalahan yang sama.

Ketergantungan saya di dalam build.gradle:

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}
xrd
sumber
1
Saya mencoba semua solusi, dan ternyata semuanya tidak berhasil. Daripada saya baru saja membuat proyek baru dengan nama yang sama, dan menyalin semua file dari proyek lama. Dan itu bekerja dengan baik sekarang. Semoga ini bisa membantu.
Sam003
Saya punya masalah ini dengan komponen di support-v13. Setelah banyak debug dan mencoba semua jawaban tetapi tidak berhasil, saya menemukan itu diperkenalkan ketika saya mencoba mengintegrasikan kotlin ke dalam proyek yang merupakan proyek java yang luar biasa. Saya menghapus perpustakaan standar kotlin dan perpustakaan kotlin lainnya dan itu baik-baik saja. Akan tetap mencoba untuk memperbaiki masalah dengan kotlin tetapi untuk sekarang, saya harus bekerja. Setiap info akan membantu juga, sangat suka kotlin.
clementiano

Jawaban:

304

Jalankan gradle -q dependencies(atau gradle -q :projectName:dependencies) untuk menghasilkan laporan ketergantungan. Anda harus melihat dari mana r7datangnya, seperti:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

Kemudian, gunakan excludearahan untuk memblokir ketergantungan itu. Dalam kasus saya, itu berasal dari perpustakaan CWAC-Camera saya, dan jadi saya menggunakan:

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(di mana compilepernyataan kedua menunjukkan versi apa yang sebenarnya Anda inginkan)

Itu akan menyelesaikan masalah, karena Anda akan melihat apakah Anda menjalankan laporan ketergantungan lagi:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0
CommonsWare
sumber
3
Apakah ada metode untuk memeriksa / mengecualikan modul dari dependensi .jar tidak tersedia di Maven? gradle dependenciestampaknya tidak melaporkan dependensi yang ditambahkan dengancompile files('libs/example.jar')
dbro
3
Katakanlah saya memiliki dua libs/*.jardependensi dengan modul yang sama, tidak ada yang tersedia sebagai artefak. Adakah cara untuk melakukan inspeksi ketergantungan / pengecualian kelas yang serupa?
dbro
2
@ deb: Bukan berarti saya sadar, tapi, sekali lagi, saya belum meneliti hal ini. IMHO, lepas kendali, satu atau kedua file JAR tersebut merasa salah dikemas, karena modul yang sama harus dimasukkan ke dalam JARnya sendiri.
CommonsWare
12
./gradlew -q: projectName: dependensi bekerja untuk saya
Defuera
15
Kiat cepat untuk mereka yang mengeluarkan modul dari ketergantungan modul: Anda harus mengubahnya compile project(':foo')menjadi compile(project(':foo')) { exclude module: 'support-v4' }. Perhatikan tanda kurung.
espinchi
122

Saya memecahkan kesalahan yang sama dengan menambahkan potongan kode berikut ke file build.gradle saya di dalam blok android.

android {
    dexOptions {
        preDexLibraries = false
    }
}
mike.tihonchik
sumber
4
Bekerja untukku! Apakah ada sisi buruk dari melakukannya dengan cara ini?
Barrie Galitzky
@BarrieGalitzky Sejauh ini saya belum mengalami masalah
mike.tihonchik
3
Terima kasih sobat, ini bekerja dengan sempurna untuk menyelesaikan masalah! Lagi pula, saya pikir itu memiliki beberapa efek samping .. Tugas assembleDebug menjadi 3 kali lebih lambat!
Marino
dexOptions tidak ditemukan.
Oliver Dixon
10
Setelah menambahkan ini, saya mendapatkan kesalahan "Terjemahan telah terputus". Kira saya sudah mencoba metode CommonsWare.
DroidHeaven
36

Karena gambar bernilai ribuan kata

Untuk membuatnya lebih mudah dan lebih cepat untuk menyelesaikan tugas ini dengan pemula seperti saya. ini adalah tangkapan layar yang menunjukkan jawaban yang dikirim oleh @ edsappfactory.com yang berfungsi untuk saya:

Pertama buka Gradle pandangan di sisi kanan Androidstudio, di aplikasi Anda item yang pergi ke Taskskemudian Androidkemudian klik kanan androidDependencieskemudian pilih Run:

Langkah 1

Kedua, Anda akan melihat sesuatu seperti ini:

Langkah 2

Alasan utama saya memposting ini adalah bahwa tidak mudah untuk mengetahui di mana harus menjalankan gradle tugas atau perintah yang diposting di atas. Jadi ini adalah tempat untuk mengasingkan mereka juga.

SO, untuk menjalankan perintah gradle:

Pertama:

pertama

Kedua:

kedua

Mudah seperti itu.

Itu dia.

Terima kasih.

MBH
sumber
33

Juga perlu dicatat Anda dapat melihat dependensi android Anda, dengan masuk ke tampilan Android Studio Gradle Anda, dan memilih target "androidDependencies".

Satu lagi tip: Saya mengalami masalah ini, sampai saya menghapus dukungan lib v4 dari folder libs di kedua proyek dan proyek modul / pustaka terkait saya.

Ed Manners
sumber
3
Instruksi lebih spesifik? Tidak dapat menemukan "dependensi android". Thx
CopperCash
Pergi ke tampilan Gradle, lalu temukan tajuk Semua tugas, menelusuri nama aplikasi Anda, lalu menelusuri ": aplikasi", Anda akan menemukan "AndroidDependencies" di sana.
AutoM8R
2
Di mana tampilan Gradle?
Paul Beusterien
4
@ PaulBeusterien Jika Anda melihat ke sisi paling kanan jendela, ada tab menyamping bertanda Gradle. Klik untuk membuka tampilan yang disematkan. AndroidDependencies sebenarnya adalah tugas
bertahap
Terima kasih kawan, saya memasang tangkapan layar yang menjelaskan jawaban Anda untuk mempermudahnya.
MBH
11

Saya mulai mendapatkan kesalahan ini ketika memutakhirkan ke ButterKnife 8.5.1. Tidak ada jawaban lain di sini yang berfungsi untuk saya.

Saya biasa gradle -q :app:dependenciesmelihat pohon itu, dan kemudian melihat-lihat file jar sampai saya menemukan konflik. Konfliknya adalah bahwa ketergantungan butterknife pada com.android.support:support-compat:25.1.0berisi versi kelas aksesibilitas, dan com.android.support:support-v4:23.1.1juga mengandung kelas.

Saya menyelesaikannya dengan mengubah ketergantungan saya dari ini:

compile 'com.jakewharton:butterknife:8.5.1'

untuk ini:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

Tampaknya tidak mempengaruhi operasi ButterKnife sejauh ini.

Sunting: Ada solusi yang lebih baik, yaitu meningkatkan pustaka dukungan android saya agar sesuai dengan ButterKnife:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'
pengguna3562927
sumber
menjaga versi dukungan agar sama adalah solusi sederhana dan mengecualikan modul tidak berfungsi untuk saya.
Jay
Saya memecahkan dengan solusi kedua juga! Konflik yang sama tetapi dengan Butter Knife versi 8.8.1 Contoh: implementasi ('com.jakewharton: butterknife: 8.8.1') {kecualikan module: 'support-compat'} annotationProcessor 'com.jakewharton: butterknife-compiler: 8.8.1'
GFPF
9

Jika ada yang mengetahui bahwa jawaban dari CommonsWare tidak dapat diterapkan pada proyek perpustakaan android, berikut adalah cuplikan untuk memperbaikinya

compile (project (': yourAndroidLibrary')) {mengecualikan modul: 'support-v13'}

Anda akan menemukan masalah

Metode DSL Gradle yang Tidak Didukung ditemukan: 'kecualikan ()'

jika Anda menggunakan proyek kompilasi (': yourAndroidLibrary') {kecualikan modul: 'support-v13'}

Perbedaannya adalah gelang "(" dan ")" sebelum "proyek" .

Tony Thompson
sumber
Terima kasih, tidak memiliki tanda kurung ganda!
Marko
8
exclude module: 'support-v4'

Tidak akan bekerja untuk saya dengan ketergantungan proyek, satu-satunya cara saya bisa membuatnya bekerja adalah melalui sintaks berikut:

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

Di mana: Android-SDK adalah nama proyek Anda.

Pelet
sumber
8

Saya memiliki masalah yang sama dan tampaknya aplikasi saya memiliki terlalu banyak metode karena perpustakaan: http://developer.android.com/tools/building/multidex.html

Selesaikan dengan:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

Lebih lanjut di sini Kesalahan: Eksekusi gagal untuk tugas ': app: dexDebug'. > comcommand selesai dengan nilai keluar non-nol 2

Giannis P
sumber
1
Multidexing dapat membuat aplikasi Anda memulai kecepatan lebih lambat, hanya gunakan jika Anda benar-benar harus.
James Goodwin
6

Saya memiliki kesalahan yang sama tetapi itu karena saya baru saja berubah dari menggunakan v4 ke v13. Jadi yang harus saya lakukan adalah membersihkan proyek.

ashishduh
sumber
1
Memiliki kesalahan yang sama setelah memutakhirkan intellij, membersihkan proyek memperbaiki masalah.
Vlad Spreys
5

Saya memiliki kesalahan yang sama pada proyek legacy. Kesalahan saya adalah bahwa perpustakaan dukungan dimasukkan dua kali: Sekali di dalam google-play-services lib, dan yang lainnya sebagai standalone.

Inilah cara saya memperbaikinya:

Build.gradle BAD:

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

Build.gradle BAIK:

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

Semoga ini bisa membantu seseorang :-)

voghDev
sumber
3

Saya menggunakan com.google.android.gms:play-services-analytics:8.3.0dan android-support-v13.jardan tidak bisa mulai exclude module: 'support-v4'bekerja.

Apa yang berhasil bagi saya adalah menggunakan android-support-v13artefak daripada android-support-v13.jarfile.

Yaitu bukannya

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

Saya menggunakan

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}

barry
sumber
3

Dalam kasus saya masalahnya disebabkan oleh ketidakkonsistenan versi :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

Solusinya sederhana: Buat semuanya versi 25

Penunggang Angin
sumber
3

Metode dex masalah serupa diselesaikan

gradle.build mengandung:

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

Masalah ini teratasi saat saya dihapus

compile files('libs/httpclient-4.2.1.jar') 

Gradle saya sekarang terlihat seperti:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

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

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

Ada redundansi pada file JAR dan proyek gradle yang dikompilasi

Jadi sangat mencari file dependensi dan jar yang memiliki kelas yang sama.

Dan menghapus redundansi.
Ini berhasil untuk saya.

vn mengkilap
sumber
2

Jika Anda telah mengimpor proyek Anda dari Eclipse .

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

Skenario yang saya hadapi setelah mengimpor proyek Eclipse ke Android studio.

Semoga ini membantu..

MobileEvangelist
sumber
2

Ini adalah masalah yang menjengkelkan, yang bisa memakan waktu untuk mengetahui kasus root. Cara Anda harus melanjutkan adalah jawaban @CommonsWare.

Saya menghadapi masalah ini baru-baru ini dan merasa sulit untuk menyelesaikannya.

Masalah saya adalah saya memasukkan perpustakaan dengan versi "+" di build.gradle. Versi terbaru perpustakaan berisi salah satu dari dex and bang yang lebih tua.

Saya kembali ke perpustakaan versi lama dan menyelesaikannya.

Adalah baik untuk menjalankan AndroidDependencies Anda dan melihat apa yang sebenarnya terjadi. Ini juga bagus untuk mencari di folder build Anda.

Di atas semua Android Studio 2.2 menyediakan fitur dalam membangun untuk melacak masalah ini.

Selamat Coding Guys

Arun C
sumber
2

Di Android Studio, buka file build.gradle Anda (periksa file proyek dan modul build.gradle) dan cari dependensi duplikat.

Hapus yang tidak dibutuhkan proyek Anda.

KadoLakatt
sumber
2

Menghapus semua file dari cache Gradle memperbaiki masalah saya.

di Linux:

rm -rf ~/.gradle/caches/*
Yuliia Ashomok
sumber
1

Saya menghapus kompilasi 'com.android.support:support-v4:18.0.+' dalam dependensi, dan itu berfungsi

albert
sumber
2
ini harus berupa komentar atau Anda harus menjelaskannya dengan cara yang lebih baik.
Anirudh Sharma
1

Saya dapat menyelesaikan masalah dalam proyek asli reaksi saya hanya dengan menambahkan

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

di akhir file android \ app \ build.gradle saya

Yusuf Khan
sumber
0

Akhirnya, saya menyelesaikannya dengan memodifikasi atribut-atribut ini pada file module gradle

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. kompilasi 'com.android.support:appcompat-v7:+'
  4. kompilasi 'com.android.support:recyclerview-v7:+'
Val Martinez
sumber
0

Saya memiliki masalah yang sama ketika menambahkan react-native-paletteke proyek saya, di sini adalah pohon dependensi saya:

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

Saya mencoba banyak soluton dan tidak dapat memperbaikinya, sampai mengubah com.android.support:appcompatversi android/app/build.gradle, saya berharap ini dapat membantu:

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

tampaknya banyak entri bukan masalah besar, versi tidak cocok

matrixer
sumber
0

Sudah bekerja untuk compile file('...')Mengatasinya konflik dengan meningkatkan minSdkVersion ke 21 dan mengaktifkan multidex. Tidak yakin apakah itu solusi terbaik tetapi satu-satunya cara saya dapat membuatnya bekerja dalam kasus saya.

Catatan: karena compile file('...')tampaknya Anda tidak dapat memasukkan excludeklausa sehingga opsi itu tidak tersedia.

Ben Kleywegt
sumber
0

Saya memiliki masalah yang sama, dan solusi saya mengubah versi dukungan '27. + '(27.1.0) menjadi '27 .0.1'

Mingyong Gu
sumber
0

Saya memiliki masalah yang sama. Dalam proyek saya, saya memiliki dependensi berikut:

  • appcompat-v7
  • android-support-v13

Untuk alasan warisan, appcompat diambil dari repo Google Maven, sedangkan dukungan android adalah .jar lokal.

Ketika saya menemukan ini, dan mengganti referensi lokal ini dengan referensi pakar, itu hanya menyelesaikan masalah build saya.

Inilah perbedaan dari app / build.gradle saya:

masukkan deskripsi gambar di sini

kall2sollies
sumber
0

Saya menyelesaikan semua masalah saya dengan menambahkan ini ke dalam project.properties

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0
eatmeimadanish
sumber
0

Menerima kesalahan berikut

Eksekusi gagal untuk tugas ': app: transformDexArchiveWithDexMergerForDebug'.

com.android.build.api.transform.TransformException: com.android.dex.DexException: Beberapa file dex menentukan Landroid / support / constraint / ConstraintSet $ ​​1

Perbaiki: pergi ke Build -> Clean Project

Ragunath CR
sumber
Hai Selamat Datang di Stack Overflow. Tapi tolong jangan ulangi jawaban, selain sudah memiliki 24 jawaban, bangunan bersih sudah disediakan sebagai jawaban oleh ashishduh. Terima kasih!
Elletlar