Birden çok dex dosyası Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat'ı tanımlar


212

gradle assembleDebugKomut satırından çalıştırırsam , aniden bu hatayı alıyorum:

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)

V4 için grep yaparsam, derleme klasörümde iki dosya görüyorum.

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

Sınıf dosyamda yalnızca şu destek kitaplığı bulunur:

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

Ben r7 kütüphanesi nasıl bir şekilde dahil olduğu hakkında güdük. Ben koşmak gradle cleanve assembleDebug yeniden çalıştırdığınızda her zaman orada görünür.

Derleme dizini içinde r7 için grep, ben dosyanın içinde görüyorum:

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

Eğer v13 içermezsem, başka şeyler derlenmez.

Ancak v13, v4 destek kütüphanesini içermiyor mu?

Bu, oyun hizmetleri AAR paketi ile v13 kitaplığı arasındaki bir uyumsuzluk mu?

Gradleplease.appspot.com adresinden gradle dosyasını aldım.

Oyun hizmetlerini kaldırmak sorunu çözmez; aynı hata.

Build.gradle içindeki bağımlılıklarım:

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

1
Tüm çözümleri denedim ve hepsi işe yaramadı. Daha sonra aynı ada sahip yeni bir proje oluşturdum ve eski projedeki tüm dosyaları kopyaladım. Ve şimdi harika çalışıyor. Umarım yardımcı olur.
Sam003

Destek-v13'te bir bileşenle bu sorunu yaşadım. Çok hata ayıklama ve tüm cevapları boşuna denedikten sonra, kotlin'i mevcut bir java projesi olan projeye entegre etmeye çalıştığımda ortaya çıktığını öğrendim. Kotlin standart kütüphanesini ve diğer kotlin kütüphanelerini kaldırdım ve iyiydi. Hala kotlin ile sorunu çözmeye çalışacaktı ama şimdilik çalışmalıyım. Herhangi bir bilgi de yardımcı olur, gerçekten kotlin seviyorum.
clementiano

Yanıtlar:


304

Bir bağımlılık raporu oluşturmak için çalıştırın gradle -q dependencies(veya gradle -q :projectName:dependencies). Nereden r7geldiğini görmelisiniz , örneğin:

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

Ardından, excludebu bağımlılığı engellemek için yönergeyi kullanın. Benim durumumda, bu benim CWAC-Camera kütüphanesinden geliyor ve ben kullanıyorum:

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

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

(burada ikinci compileifade hangi sürümü istediğinizi gösterir)

Bağımlılık raporunu tekrar çalıştırıp çalıştırmadığınızı göreceğiniz için, bu durum netleşmelidir:

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

3
Maven'de mevcut olmayan .jar bağımlılıklarındaki modülleri denetlemek / hariç tutmak için bir yöntem var mı? gradle dependenciesile eklenen bağımlılıkları compile files('libs/example.jar')
bildirmiyor

3
Diyelim ki libs/*.jarortak bir modülle iki bağımlılığım var , ikisi de bir eser olarak mevcut değil. Benzer bir bağımlılık denetimi / sınıf dışlama gerçekleştirmenin herhangi bir yolu var mı?
dbro

2
@dbro: Farkında olduğumdan değil, ama yine de bu noktayı araştırmadım. IMHO, kelepçeden, bu JAR dosyalarından biri veya her ikisi de yanlış paketlenmiş hissediyor, çünkü ortak modül kendi JAR'a dahil edilmelidir.
CommonsWare

12
./gradlew -q: projectName: bağımlılıklar benim için çalıştı
Defuera

15
Bir modülü modül bağımlılığından ayırmak isteyenler için hızlı ipucu: Kendinizi compile project(':foo')dönüştürmeniz gerekir compile(project(':foo')) { exclude module: 'support-v4' }. Parantezlere dikkat edin.
espinchi

122

Android bloğundaki build.gradle dosyasına aşağıdaki kod parçasını ekleyerek benzer bir hatayı çözdüm .

android {
    dexOptions {
        preDexLibraries = false
    }
}

4
Benim için çalıştı! Bu şekilde yapmanın aşağı tarafı var mı?
Barrie Galitzky

@BarrieGalitzky Şimdiye kadar herhangi bir sorunla karşılaşmadım
mike.tihonchik

3
Teşekkürler dostum, bu sorunu çözmek için mükemmel çalıştı! Her neyse, bunun bazı yan etkileri olduğunu düşünüyorum .. assembleDebug görevi 3 kat yavaşladı!
Marino

dexOptions bulunamadı.
Oliver Dixon

10
Bunu ekledikten sonra "Çeviri yarıda kesildi" hatası aldım. Sanırım CommonsWare yöntemini denemeliyim.
DroidHeaven

36

Yana Bir resim bin kelimeye bedel olduğunu

Bu görevi benim gibi yeni başlayanlarla yapmayı kolaylaştırmak ve hızlandırmak için. benim için çalışan @ edsappfactory.com tarafından gönderilen yanıtı gösteren ekran görüntüleri :

İlk uygulamanızın madde seferde, Androidstudio sağ tarafında Gradle görünümünü açmak Tasksardından Androidardından sağ tıklayın androidDependenciesardından seçim Run:

Aşama 1

İkincisi böyle bir şey göreceksiniz:

Adım 2

Ben bir gradlegörev veya yukarıda yayınlanan komutları nerede yürütmek bilmek kolay olmadığını bu yayınlanmıştır ana nedeni . İşte bu yüzden onları da yutmak için.

SO, sınıflandırma komutunu yürütmek için:

İlk:

ilk

İkinci:

ikinci

Olduğu kadar kolay.

Bu kadar.

Teşekkür ederim.


33

Ayrıca Android Studio Gradle görünümüne gidip "androidDependencies" hedefini seçerek android bağımlılıklarınızı görebilirsiniz.

Bir ipucu daha: v4 destek lib proje ve ilgili modül / kütüphane proje (ler) lbs klasöründen kaldırılana kadar bu sorunu yaşıyordu.


3
Daha spesifik talimatlar? "AndroidDependencies" bulunamıyor. Thx
CopperCash

Gradle görünümüne gidin, ardından Tüm görevler başlığını bulun, uygulamanızın adını ayrıntılı olarak inceleyin, ardından ": app" ile ilgili ayrıntılı bilgi edinin, orada "androidDependencies" i bulacaksınız.
AutoM8R

2
Gradle görünümü nerede?
Paul Beusterien

4
@PaulBeusterien Pencerenin en sağ tarafına bakarsanız, Gradle olarak işaretlenmiş bir yan sekme vardır. Sabitlenmiş bir görünüm açmak için tıklayın. AndroidDependencies aslında bir gradle görevi
JCricket

teşekkür ederim dostum, kolaylaştırmak için cevabınızı açıklayan ekran görüntüleri yayınladım.
MBH

11

ButterKnife 8.5.1 sürümüne geçerken bu hatayı almaya başladım. Buradaki diğer cevapların hiçbiri benim için işe yaramadı.

Eskiden gradle -q :app:dependenciesağacı görürdüm ve sonra çatışmayı bulana kadar kavanoz dosyalarına baktım. Çatışma, butterknife'ın bağımlılığının com.android.support:support-compat:25.1.0erişilebilirlik sınıfının bir versiyonunu içermesi vecom.android.support:support-v4:23.1.1 ayrıca sınıfı içermesidir.

Bağımlılığımı bundan değiştirerek çözdüm:

compile 'com.jakewharton:butterknife:8.5.1'

buna:

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

ButterKnife'ın operasyonunu şimdiye kadar etkilemiyor gibi görünüyor.

Edit: Android destek kütüphaneleri ButterKnife'ın maç için yükseltmek için daha iyi bir çözüm var:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'

destek sürümünü aynı tutmak basit bir çözümdür ve dışlama modülü benim için çalışmıyor.
Jay

İkinci çözümü de çözdüm! Aynı çatışma ancak Butter Knife sürüm 8.8.1 ile Örnek: uygulama ('com.jakewharton: butterknife: 8.8.1') {hariç tut modül: 'support-uyumlu'} ek açıklamaProcessor 'com.jakewharton: butterknife-compiler: 8.8.1'
GFPF

9

Herkes CommonsWare'in cevabının android kütüphane projesine uygulanamayacağını öğrenirse , düzeltilecek snippet

compile (project (': yourAndroidLibrary')) {hariç tutma modülü: 'support-v13'}

Sorunlar bulacaksınız

Desteklenmeyen Gradle DSL yöntemi bulundu: 'exclude ()'

derleme projesi kullanıyorsanız (': yourAndroidLibrary') {dışlama modülü: 'support-v13'}

Farklılıklar "proje" den önce bilezik (" ve ") "dir .


Teşekkürler, çift parantez eksikti!
Marko

8
exclude module: 'support-v4'

Benim için bir proje bağımlılığı ile işe yaramaz, işe almak için tek yolu aşağıdaki sözdizimi ile oldu:

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

Nerede: Android-SDK proje adınızdır.


8

Aynı sorunu yaşadım ve uygulamamın kütüphaneler nedeniyle çok fazla yöntemi olduğu anlaşılıyor: http://developer.android.com/tools/building/multidex.html

Şununla çözüldü:

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

Daha fazlası için Hata: ': app: dexDebug' görevi için yürütme başarısız oldu. > comcommand sıfırdan farklı çıkış değeri 2 ile tamamlandı


1
Multidexing, uygulamanızın başlangıç ​​hızını yavaşlatabilir, yalnızca gerçekten ihtiyacınız olduğunda kullanın.
James Goodwin

6

Aynı hatayla karşılaştım, ancak son zamanlarda v4'ü v13'ten değiştirdiğimden dolayıydı. Yani tek yapmam gereken projeyi temizlemekti.


1
Intellij'i yükselttikten sonra aynı hatayla karşılaştık, projeyi temizlemek sorunu çözdü.
Vlad Spreys

5

Eski bir projede de aynı hatayla karşılaştım. Benim hatam, destek kütüphanesinin iki kez dahil edilmesiydi: Bir kez google-play-services lib içine, diğeri ise bağımsız olarak.

Ben böyle giderdim:

KÖTÜ build.gradle:

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

İYİ build.gradle:

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

Umarım birine yardımcı olur :-)


3

Ben kullanıyorum com.google.android.gms:play-services-analytics:8.3.0ve android-support-v13.jarve alamadım exclude module: 'support-v4'işe.

Benim için işe android-support-v13yarayan android-support-v13.jardosya yerine dosyayı kullanmaktı.

Yani yerine

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

}

kullandım

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

}


3

Benim durumumda sorun sürüm tutarsızlığından kaynaklandı :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

Çözüm basitti: Her şeyi sürüm 25 yap


3

Bir benzer dex sorun çözüldü yöntem

gradle.build şunları içeriyordu:

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'

Kaldırdığımda sorun çözüldü

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

Derem şimdi şöyle görünüyor:

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

Bir yoktu fazlalık JAR dosyası ve derlenmiş gradle proje

Bu nedenle, aynı sınıflara sahip bağımlılık ve jar dosyalarını isteyin.

Ve artıklığı kaldırın.
Bu benim için çalıştı.


2

Projenizi Eclipse'den içe aktardıysanız .

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

Eclipse projesini Android stüdyosuna aktardıktan sonra karşılaştığım senaryo.

Bu yardımcı olur umarım..


2

Bu sinir bozucu bir sorundur, kök durumu bulmak biraz zaman alabilir. İlerlemeniz gereken yol @CommonsWare cevabı.

Son zamanlarda bu sorunla karşılaştım ve çözülmesi zor buldum.

Benim sorunum build.gradle "+" sürümünde bir kütüphane dahil oldu oldu. Kütüphanenin son sürümü eski dex ve patlamalardan birini içeriyordu.

Kütüphanenin eski sürümüne döndüm ve çözdüm.

AndroidDependencies çalıştırmak ve gerçekten ne olduğunu görmek iyidir. Yapı klasörünüzde arama yapmak da iyidir.

Her şeyden önce Android Studio 2.2 bu sorunu izlemek için inşa özellikleri sağlar.

Mutlu kodlama çocuklar


2

Android Studio'da build.gradle klasörünüze gidin (hem proje hem de module build.gradle dosyalarını kontrol edin) ve yinelenen bağımlılıkları arayın.

Projenizin gerekmediğini silin.


2

Gradle önbelleğinden tüm dosyaları silmek sorunumu çözdü.

Linux'ta:

rm -rf ~/.gradle/caches/*

1

Bağımlılıklarda 'com.android.support:support-v4:18.0.+' derlemesini kaldırdım ve işe yarıyor


2
bu bir yorum olmalı ya da daha iyi bir şekilde açıklamalısınız.
Anirudh Sharma

1

Tepki yerel projemdeki sorunu basitçe ekleyerek çözebildim

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

android \ app \ build.gradle dosyamın sonunda


0

Son olarak, modül nitelik dosyasında bu nitelikleri değiştirerek çözdüm

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. 'com.android.support:appcompat-v7:+' derleyin
  4. 'com.android.support:recyclerview-v7:+' derleyin

0

Projeme eklerken aynı sorunu yaşadım react-native-palette, işte bağımlılıklar ağacım:

./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 (*)

Birçok çözüm denedim ve düzeltemedim, com.android.support:appcompatsürümü değiştirene kadar android/app/build.gradle, bu yardımcı olabilir diliyorum:

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:+"
}

birden fazla girişin büyük bir sorun olmadığı, sürüm uyumsuzluğunun


0

İçin çalıştım compile file('...')MinSdkVersion'ı 21'e çıkararak ve multidex'i etkinleştirerek çatışma sağladım. Bunun en iyi çözüm olup olmadığından emin değilim ama benim durumumda çalışmasını sağlayabileceğim tek yol.

Not: compile file('...')Görünüşe göre excludebu seçenek mevcut olmadığından bir cümle koyamazsınız .


0

Aynı sorunu yaşadım ve çözümüm '27. + '(27.1.0) destek sürümünü '27 .0.1' olarak değiştiriyor


0

Aynı sorunu yaşadım. Projemde aşağıdaki bağımlılıklar vardı:

  • AppCompat-v7
  • android-destek-V13

Eski nedenlerden dolayı, appcompat Google Maven deposundan getirildi, oysa android desteği yerel bir .jar idi.

Bunu anladım ve bu yerel referansı bir maven referansıyla değiştirdiğimde, derleme sorunumu çözdü.

İşte benim app / build.gradle fark:

resim açıklamasını buraya girin


0

Tüm sorunlarımı bunu project.properties'e ekleyerek çözdüm

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

0

Aşağıdaki hatayı aldı

': App: transformDexArchiveWithDexMergerForDebug' görevi için yürütme başarısız oldu.

com.android.build.api.transform.TransformException: com.android.dex.DexException: Birden çok dex dosyası Landroid'i tanımlar / support / constraint / ConstraintSet $ ​​1

Düzeltme: Build -> Clean Project'e gidin


Merhaba Stack Overflow'a hoş geldiniz. Ama lütfen cevapları tekrarlamayın, zaten 24 cevabın yanı sıra, ashishduh tarafından bir cevap olarak temiz bina zaten sağlandı. Teşekkürler!
Elletlar
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.