Dex birleştirilemiyor


307

Android Studio Beta sürümüm var. Eski modüllerimi derleyerek yeni bir proje oluşturdum, ancak uygulamayı başlatmayı denediğimde mesajla başlatılmadı:

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

com.android.builder.dexing.DexArchiveMergerException: Dex birleştirilemiyor

Ama bu hatayı nasıl çözeceğimi bilmiyorum. Bunu saatlerce araştırdım ama başarılı olamadım.

Proje notum:

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

Uygulama puanım:

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


}

Ve modül sınıfım:

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

}

İkinci modülüm:

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

____________finding_________

İkinci modülü (ayrıştırıcı) içe aktarmadığımda uygulama dex'te çökmedi, ancak modül içe aktarılmadığında uygulama çalışmadı. : D: D


6
Android Studio 3.0 Kararlı sürümünde aynı sorunu yaşayan biri varsa, stackoverflow.com/questions/46949761/… yanıtını incelemenizi ve size yardımcı olup olmadığını görmenizi şiddetle tavsiye ederim.
Bhavesh Patadiya

1
Aynı sorunu yaşadım ve bu sayfada belirtilen her yöntemi takip ettim ama bana yardım etmedi, bu yüzden yeni sürümün mevcut olup olmadığını kontrol etmek için her kütüphanede ütüye gidip imleci tutuyorum. Ben yeni sürümü olanlar bu yüzden ben güncelleme, senkronize ve çalıştırmak senkronize. işe yaradı.
Shahzad Afridi

Yanıtlar:


293

Ben ne zaman dan güncellemek aynı problem vardı com.google.android.gms:play-services:11.2.2için com.google.android.gms:play-services:11.4.0. Bu benim için çözdü:

  1. temiz
  2. yeniden inşa etmek

Sadece bu çözümle ilgili gerçek sorunu ertelersiniz. muhtemelen ver 11.4.0 daha az yöntem içerir. Cevabımı aşağıda görebilirsiniz. ekleyeceğiniz bir sonraki bağımlılıkta bu hatayı alacaksınız sanırım
itzhar

2
Bu benim sorunumu çözer, multiDexEnabled trueyalnız değil
Yuri Brigance

28
com.google.android.gms ile aynı isse: play-services-location: 11.6.0 ... bu geçerli bir çözüm değil
issamux

3
Google çözüm kitaplıklarını kullanırken bir uyumluluk sorunum olduğunda bu çözüm benim için çalıştı. AS'de android proje gezgini bölmesini "Proje" olarak görüntüleyin, "Harici Kitaplıklar" ı görmelisiniz, harici kitaplıkları genişletirseniz, projeyi derlemek için kullanılan tüm kavanozları ve modülleri görürsünüz. Uyumsuz modül kombinasyonlarını tanımlamanıza yardımcı olmalıdır.
angryITguy

3
"CompileSdkVersion 26" durumunda yukarıdaki kod çalışmazsa, bunu deneyin .. go - build.gradle (Modül: app) - defaultConfig kategorisinde "multiDexEnabled true" öğesini ekleyin ve son adım Dosyaya Git | Ayarlar | Oluşturma, Yürütme, Dağıtım | Anında Çalıştır ve / Devre Dışı deneyin
Sumit Saxena

325

Yukarıdakilerin hepsini denedim ve hiçbiri yardımcı olmadı. Sonunda, bu işi benim için buluyorum:

Uygulamanın / build.gradle:

android {
    defaultConfig {
       multiDexEnabled true
    }
}

11
Teşekkürler. Bence sorun çoğu cevap yeniden inşa edemez diğer kaynaklardan JAR dosyaları dahil için muhasebe değildir. multiDex, aksi takdirde uyumsuz kodun birleştirilmesine izin veriyor gibi görünüyor.
Brendon Whateley

2
Bu çözüm benim için çalıştı, ancak ek olarak, API <= 21 developer.android.com/studio/build/multidex.html
hamou92

2
DEspite kabul edilen cevaptan daha alakalı olduğu halde hala "dex birleştirilemedi" mesajı alıyorum
John

13
Benim için çalışmadı. Bu değişiklikle farklı bir hata aldım: Görev görev için başarısız oldu: app: transformClassesWithMultidexlistForDebug
Atul

1
Evet 5 saat boyunca tamamen farklı cevaplarla oturuyordum. Ama bir şekilde bunun Multidex sorunu olduğunu fark ettim ve buraya geldim. Ben doğruydum. Teşekkürler adam
sud007

59

Uyarılara dikkat edin!

Bazen sadece uyarıları ortadan kaldırmanız gerekir ve hata otomatik olarak kaybolacaktır. Aşağıdaki özel duruma bakın:


Modül düzeyindeki dosyamda bu iki bağımlılık vardı build.gradle:

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

ve Studio uyardı ( dex birleştirme sorununa ek olarak ):

Tüm com.android.supportkütüphaneler aynı sürüm spesifikasyonunu kullanmalıdır (karıştırma sürümleri çalışma zamanı çökmelerine neden olabilir). Bulunan versiyonları 27.0.2, 21.0.3. Örnekler arasında com.android.support:animated-vector-drawable:27.0.2vecom.android.support:support-v4:21.0.3

Bu yüzden açıkçacom.android.support:support-v4 ( ayrıntılar için buraya bakın) sürümünü ve her iki sorunu (dex birleştirme ile ilgili uyarı ve bir) çözüldü :

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'

Benzer durumlar için aşağıdaki yorumlara bakınız.


1
Teşekkür ederim, bu benim için sorunu çözdü. Başlangıçta eu.inloop: androidviewmodel: 1.3.4
lsrom

1
Kesinlikle, sadece hatanın daha kesin olmasını isterdim
Amin Keshavarzian

1
Çok teşekkürler. Aynı sorunu yaşadım. V26 kullanıyordum, sdk 27'ye güncellendi ve problemi çözdüm.
Johnny

2
Bu doğru cevap olmalı. İnşalarım support:design:26.1.0, bağımlılığı olan bir kütüphane (airbnb / epoksi) ekledikten sonra çalışmayı durdurdu ve henüz bu bağımlılığa sahip değildim. Diğer destek kütüphanelerimin sürümü 27.1.0 idi. Sürüme support:designbağımlılık ekledikten sonra 27.1.0sorunum çözüldü.
alashow

2
Teşekkür ederim. Sen benim günümü kurtar.
Nithinjith

37

Benim durumumda, Ne yazık ki, ne Michel'in ne de Suragch'ın çözümleri benim için işe yaramadı.

Bu yüzden aşağıdakileri yaparak bu sorunu çözdüm:

In gradle: 3.0 derleme yapılandırma şimdi artık kullanılmamaktadır ve değiştirilmesi gerektiğini uygulanması veya API . Daha fazla bilgi için buradan okuyabilirsiniz Resmi belgeleri Gradle Build Tool'da okuyabilirsiniz

Derleme yapılandırması hala mevcuttur, ancak api ve uygulama yapılandırmalarının sağladığı garantileri sunmayacağından kullanılmamalıdır.

daha iyi kullanımı var uygulanması veya API doğrusu derlemek

Sadece yerine derleme ile uygulanması , debugCompile ile debugImplementation , testCompile ile testImplementation ve androidtestcompile ile androidTestImplementation

Örneğin: Bunun yerine

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'

böyle kullan

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'

Daha sonra

  • Projenizin içindeki .gradle klasörünü silin (.gradle'ı görmek için sol üstteki gezginde "Proje" görünümüne geçmeniz gerektiğini unutmayın)
  • Tüm oluşturma klasörlerini ve sınıf önbelleğini silin .
  • Derleme menüsünden Projeyi Temizle düğmesine basın .
  • Görev tamamlandıktan sonra , Build (Oluştur) menüsünden Project Rebuild (Yeniden Oluştur) düğmesine basın .

Umarım yardımcı olur!


2
Teşekkürler, tek yapmam gereken uygulama derlemesini değiştirmekti ve başarıyla inşa edildi, diğer adımları tamamlamak zorunda değildi. Facebook SDK'sını güncelledikten sonra yapı başarısız
olmaya

2
Benim için çalıştı - neden hakkında bilgi?
Alex

1
Silinecek klasör olmamalı .gradleve olmamalıdır./gradle
Gary Bak

1
Benim için gerçekten işe yarayan tek cevap. Teşekkürler!
Michael Richardson

1
Teşekkürler, en havalı cevap. Aramanın üstünde olmalı. Benim için çalıştı.
Tehlike

27
  1. .gradleDizini silin .

  2. Uygulamanızı tekrar çalıştırın.

notlar

  • .gradleDizin projenizin kök klasöründe. (Önce gizli dosyaları göstermeniz gerekebilir.)
  • Android 3.0 kullanarak bir bağımlılık modülünü her güncellediğimde bunu yapmak zorundayım. (Android Studio 3'ün daha yeni sürümleri sorunu çözmüş görünüyor.)

4
Geçersiz bir Önbellek yaptığımda ve yeniden başlattığımda bana yardımcı oldu
Vasili Fedotov

Bu benim sorunum giderildiğinde güvensizlik oldu .. ben her şeyi güncellemeyi denedim, tüm derleme anahtar kelimeleri kaldırma, şüpheli ilb sürümleri birkaç güncelleme .. nihayet bunu yaptığımda, işe yaradı ..
hanzolo

Hayatımı kurtardın! Teşekkürler
Masterfego

24

.gradleSuragch'ın önerdiği gibi silmek benim için yeterli değildi. Ayrıca, bir Build > Clean Project.

Görmek için .gradle için sol üstteki gezginde "Proje" görünümüne geçmeniz gerektiğini unutmayın:

Proje görünümüne geç


23

Diğer her çözümü denedim, ama kimse benim için çalışmadı. Sonunda, aynı bağımlılık sürümünü kullanarak düzenleyerek çözdümbuild.gradle . Bence destek veya google kütüphanelerinin farklı bağımlılık sürümünü kullanan sınıfına bir kütüphane eklerken bu sorun oluşur.

Derleme sınıflandırma dosyanıza aşağıdaki kodu ekleyin. Sonra cleanve rebuildprojesi.

ps: bu benim için eski bir çözüm, bu yüzden aşağıdaki kütüphanelerin güncellenmiş sürümünü kullanmalısınız.

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
diğer tüm çözümleri denedim, sonunda sadece bu yardımcı oldu: /
Ante

@Ali Gurelli Çok teşekkür ederim birçok çözüm denedim ama sadece bu iş.
Bipin Bharti

Thanx Ama Benim için Sürüm details.useVersion '15 .0.0' kullanmak
Elsunhoty

Çözüm için teşekkürler. Aynı sorun bana da oldu. google tap and pay 10.0.0 ve geri kalan tüm libs son sürümünde
R World

Sorunsuz Çalıştı Teşekkürler
Sankalp

14

eğer (1. Çalışmayı temizlemeye ve yeniden inşa etmeye çalışın)

else if (2. Gradle çalışmasını kaldırmaya çalışın) sonra iyi

else-> 3. grade.properties eklemeye çalışın

android.enableD8 = false

else-> 4. multiDexEnabledbuild.gradle'ınıza true ekleyin

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

ve bağımlılığı ekleyin

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

İlki sizin için işe yarayabilir ve bu yüzden benim için probleminizin doğasına gerçekten bağlı

Bu kütüphaneyi ekledikten sonra hatayı aldım

implementation 'com.jjoe64:graphview:4.2.2'

ve daha sonra bunu kontrol etmem gerektiğini ve destek kitaplıklarının aynı sürümünü eklemem gerektiğini keşfettim. Bu yüzden başka bir versiyon denemeliyim

compile 'com.jjoe64:graphview:4.2.1'

ve sorunu düzeltir. O yüzden buna dikkat et.


3
Bu sorunun en yararlı yolu. Burada bahsetmek istediğim, daha fazla ayrıntı için 'gradlew app: transformDexArchiveWithExternalLibsDexMergerForDebug --stacktrace' cmd'yi kullanabileceğinizdir. Beni kurtardım, multidex'i etkinleştirmem gerektiğini buldum. Umarım yardımcı olur.
panda

13

Benim durumumda oda kütüphanesi yüzünden:

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

Şu şekilde değiştiriliyor:

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

çalıştı.


Çok teşekkürler, bu bana çok yardımcı oldu!
Phil

Bu cevabı bulduğum için çok memnunum. Teşekkürler!
callOfCode

12

Sadece yukarıdaki çözümlere eklemek için:

Birden fazla yerde (hatta aynı dosyada) farklı sürümlerini gösteren yinelenen bağımlılıklarınızın olmadığından emin olun.


Ben multiDexEnabled true eklemeden ve diğer cevapları denemeden önce bu ilk kontrol gerektiğini düşünüyorum. Teşekkürler!
Aleksandr A

11

Merhaba ben hemen hemen her şeyi denedim aynı sorunu var. Nihayet 6 saat süren mücadeleden sonra her şeyi satır satır hata ayıklayarak çözdüm.

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

Google-Services 3.0 , playServiceVersion: 11.6.0 veya daha düşük sürümlü Studio 3.0 ile güvenlik tabanını desteklemez.

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"

Çözüm :

Google hizmetlerini şu şekilde değiştirdim:

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

Firebase servislerini destekler.

Umarım biri zamanını kurtarır.


1
11.4.0 uygulama "com.google.firebase: firebase-core: 11.4.0" uygulamaya değiştirmek "olarak playServiceVersion kullandığım aynı sorunu var com.google.firebase: firebase-core: 11.6.2" düzeltildi konu . Bu yüzden lütfen farklı lib için sürüm bağımlılığını doğrulayın
durgeshtrivedi

9
  1. etkinleştirme

    defaultConfig {multiDexEnabled true}

  2. 1. adım işe yaramazsa

    Proje yapısına gidin ve farklı bir sürüm kullanan harici kütüphaneyi bulun. Üzerine çift tıklayın ve jar dosyasını silin. Projeyi kapatın ve tekrar açın android studio projeyi yeniden inşa edecek. Sorun gitmiş olmalı.


+1 - Destek lib, rxjava ve 3. taraf bağımlılığım vardı (13k satır). Yöntem sayısını gördüğümde gözlerim neredeyse patladı.
snodnipper

6

Olasılıklardan biri şudur: Aynı kütüphanenin varlığı, ancak bağımlılıklarda farklı versiyonları .

Gradle dosyasında aşağıdaki satırlarla bu sorunu vardı:

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

Gson kütüphanesi benim kütüphaneler dizinde ama önceki bir sürümü vardı. Ben gson-2.3.1.jarlibs dizininden sildi ve her şey normale döndü.


compile fileTree(include: ['*.jar'], dir: 'libs')benim için de kaldırılıyor .. teşekkürler (y)
Dinuka Salwathura

5

Kotlin desteği ekledikten sonra bu hata ortaya çıktıysa ve diğer çözümlerin hiçbiri işe yaramadıysa, uygulama modülünün kotlin bağımlılığını şu şekilde değiştirmeyi deneyin build.gradle:

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

Bu benim için Android Studio 3.0 Beta 6'da çalışıyor. Daha fazla açıklama için bu cevaba bakınız .


Evet, ek açıklamalar hariç tutulmazsa Kotlin tanıtımının yapıyı bozabileceği anlaşılıyor.
Stoycho Andreev

Teşekkürler. Bu benim için bir çözümdü. Sorunumu tanımlamak için 3 gün mücadele ediyorum.
Naveen Kumar M

Bunun yerine Kotlin eklentisi sürüm 1.2.30'a yükseltmeyi deneyin (yeni yayınlandı). Şimdi Anında Çalıştırma da yeniden etkinleştirilebilir!
KTCO


5

[DEX BİRLEŞTİRİLEMEDİ ÇÖZÜLDÜ] Saatlerce yığın taşmasının ardından "BİRLEŞTİRİLMEK DEX HATASI"

  1. Sınıfınızdaki tüm com.android.support satırlarını v27.1.0 sürümüne güncelleyin

Neden - Android destek kütüphanelerini v27.1.0'a güncelledi, bu nedenle gradle dosyanızdaki tüm android destek hatlarını 26.1.0'dan 27.1.0'a değiştirmeniz gerekiyor.

  1. Depolar bölümünün " https://maven.google.com " bitiş noktası olan bir maven bölümü içerdiğinden emin olun . Örneğin:

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

Neden: - Android, SDK yöneticisindeki destek kitaplıklarını güncelleyemiyor ve şimdi güncellemek için maven.google.com'u kullanıyor, bu nedenle 27.1.0 destek kitaplıklarını kullanmak için bunu eklemeniz gerekiyor

Değişiklik Sürümü Sonrası: 1. Projeyi Temizle 2. Projeyi Yeniden Oluştur


4

aşağıdaki komutları ekleyin:

android {
...

    dexOptions {

        jumboMode true
        javaMaxHeapSize "4g"

    }
}

4

Google Play hizmetlerini yükleme (en son sürüm) +

android {
    defaultConfig {
        multiDexEnabled true
        }
}

build.gradle benim için sorunu çözdü, temiz ve proje yeniden emin olun!


3

Benim durumumda projenin libs klasörüne eklediğim gson-2.8.1.jar oldu . Ancak referans SDK tarafından zaten oradaydı. Bu nedenle, lbs klasörüne gson-2.8.1.jar eklemek gerekli değildi .

Ne zaman çıkardı th gson-2.8.1.jar proje bu wiered hata olmadan derler.

Yani libs klasörü ve bağımlılıkları revize etmeye çalışın .


3

Chris-Jr ile hemfikirim. AdMob reklamlarınızı gömmek için Firebase kullanıyorsanız (veya olmasanız bile) play-services-analytics, bağımlılık olarak eklemeseniz bile play-services-reklamları içerir. Analizler 11.4.0'a değil, reklamların 10.0.1 sürümünü (gruptaki fare ipucunda bunu gösteriyor) içerdiğinden, Google 11.4.0 sunumunda bir hata yaptı.

Üstte, derhal 'com.google.android.gms: play-services-ads: 11.4.0' derlemesini manuel olarak ekledim , ancak Anında Çalıştırma'yı devre dışı bıraktıktan sonra: http://stackoverflow.com/a/35169716/530047

Yani ya 10.0.1'e geriledi ya da reklamları ekleyin ve Anında Çalıştır'ı devre dışı bırakın. Eğer yardımcı olursa buldum.


OP Play Hizmetlerinden bahsetti mi?
IgorGanapolsky

Onaylanan cevap geldi. Bu sorun bu senaryo olmadan ortaya çıkıyorsa o zaman bilmiyorum!
Jonathan

2

Aynı sorunla karşılaştım ve davamın gerçek nedenini buldum. Daha önce, önceki tüm cevapları tekrar denedim, ancak sorunu çözmedi. Aşınma uygulaması projemde iki modül var ve aşağıdaki gibi build.gradle :

aşınma modülünün build.gradle:

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

ortak modülün build.gradle:

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

3.x sınıfına yükseltmeden önce, 'uygulama' hepsi 'derlenir'.

Gradlew'ı yığın izini almak için --stacktrace seçeneği ile çalıştırıyorum, bu sorun ortaya çıktığında gradle konsol penceresinde bunu tıklayabilirsiniz. Ve kavanoz paketine bağımlılığın tekrarlandığını gördüm:

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

Farmer-motion-1.0.jar paketindeki Sınıf SportSummary, resmi geçiş kılavuzunu okuduktan sonra , build.gradle'ımı şu şekilde değiştirdim:

aşınma modülünün build.gradle:

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

ortak modül 的 build.gradle:

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

Şimdi aşınma modülü ortak modül tarafından farmer-motion-1.0.jar ihracat bağımlılığı olacaktır. Çalışma zamanı sırasında jar paketine bağımlılık yoksa , jar paketinin ' uygulama ' bağımlılığı da 'compileOnly' olarak değiştirilebilir .


2

Sorun da vardı.

Değişerek compileSdkVersionve targetSdkVersionen son sürüme kadar çözebildim .


2

Projemiz için, yanlışlıkla farklı bir adla iki kez aynı kavanozu ekledik. Bunlardan birini kaldırmak sorunu çözdü.


Bu benim sorunumu çözdü. Dahili bir android kütüphane projesi inşa ediyordum ve libsklasörü altında , biri diğerinin yedeği olan ama farklı bir dosya adı olan iki kavanoz dosyası vardı.
hopia

2

Bu sorun olmayabilir, ancak yanlışlıkla projenin bağımlılıkları {} bölümünde iki özdeş (ama farklı adlandırılmış) kitaplıkları dahil ettiğimde bu hatayı aldım.


1

Benim için app \ build.gradle'daki firebase mesajlaşmasını güncelliyordu:

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

için

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

1

Olası temel nedenlerden biri: Android Studio'nun çok modüllü projelerin içe aktarılması tarafından düzgün bir şekilde ele alınmayan yinelenen geçici bağımlılıklar. Listenizi kontrol edin ve kaldırın. Benim için düzeltme tam anlamıyla şuydu:

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

Projem için bu sorunun nedenini öğreniyorum. Build.gradle dosyasına iki kez bir bağımlılık ekledim . Bir kez bağımlılık ekleyerek bir kez ve kavanoz bağımlılığı ekleyerek bir kez daha:

'org.achartengine: achartengine: 1.2.0' derleyin
...
uygulama dosyalarını derleyin ('../ achartengine-1.2.0.jar')

İlk satır kaldırıldıktan sonra sorun çözüldü.


1

En iyi yanıtların sizin için işe yaramaması durumunda, sorununuz aynı kütüphaneye bağlı birden fazla bağımlılığınız olabilir.

İşte bazı hata ayıklama ipuçları. Bu örnek kodda, com.google.code.findbugs:jsr305:3.0.0rahatsız edici kitaplıktır.

Çözümünüzü kontrol etmek için her değişiklik yaptığınızda daima temizleyin ve yeniden oluşturun!

  1. --stacktraceDaha fazla ayrıntı için bayrağını kullanarak oluştur . Bir sınıftan şikayet edecek, Google bu sınıfı bulmak için kütüphane. Android stüdyosunu her zaman --stacktracebayrakla daha iyi çalışacak şekilde ayarlayabilirsiniz .

  2. Bir derlemeden View > Tool Windows > Gradle Consolesonra Android Studio'daki Gradle Konsoluna bir göz atın

  3. Çalıştırarak tekrarlanan bağımlılıkları kontrol edin ./gradlew -q app:dependencies. Build.gradle öğenizi her değiştirdiğinizde bunu yeniden çalıştırabilirsiniz.

  4. Build.gradle içinde,

    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. Build.gradle içinde,

    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. Build.gradle içinde,

    android {
        ...
        configurations.all {
            resolutionStrategy {
                // Completely exclude the library. Works for transitive
                // dependencies.
                exclude group: 'com.google.code.findbugs'
            }
        }
    }
  7. Bağımlılıklarınızdan bazıları jar dosyalarındaysa, jar dosyalarını açın ve çakışan sınıf adları olup olmadığına bakın. Eğer öyleyse, kavanozları yeni sınıf isimleriyle yeniden inşa etmeniz veya gölgelendirmeye bakmanız gerekecektir .

Biraz daha arka plan okuması:


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

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

2
Detaylandırabilir misiniz?
sg7

Aynı problemi de yaşadım ama şu anda problemimi çözdüğümü fark ettim ama gelecekteki güncellemelerde işler gerçekten değişebilir.
Eben Watts

1

Benim durumumda bir kütüphane bu sorunu yapar, kütüphane başarıyla projeye eklendi ama benim app çalıştırmak bana bu hatayı gösterir. Yani bu da başınıza gelirse, github'a gidebilir ve sorunları kontrol edebilir veya yeni bir sorun oluşturabilirsiniz. Kütüphane ile ilgili herhangi bir çözüm bulamazsanız değiştirmenizi öneririm.

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.