Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I find dependencies causing class duplication?

Tags:

android

gradle

When I build the android project, it show "Duplicate class" exception,

1 exception was raised by workers:   java.lang.RuntimeException:
java.lang.RuntimeException:
Duplicate class android.arch.core.executor.DefaultTaskExecutor found in modules classes.jar (android.arch.core:core:1.0.0-alpha1) and classes.jar(android.arch.core:runtime:1.1.1)   
Duplicate class android.arch.core.executor.TaskExecutor found in modules classes.jar (android.arch.core:core:1.0.0-alpha1) and classes.jar (android.arch.core:runtime:1.1.1)**

How could I find and fix what lib use duplicate class in my project?

app.Gradle

android {
compileSdkVersion 28
buildToolsVersion ’28.0.3’

defaultConfig {
     minSdkVersion 18
    targetSdkVersion 28

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

    javaCompileOptions {
        annotationProcessorOptions {
            arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
        }
    }

}
dependencies {
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

implementation ’org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.31’api('com.google.maps:google-maps-services:0.9.3') {
    exclude group: 'com.google.code.findbugs', module: 'jsr305'
}
implementation 'com.android.support:appcompat-v7:28.0.0’
implementation 'com.android.support:design:28.0.0'
implementation 'com.google.android.exoplayer:exoplayer:2.8.2’
implementation 'android.arch.persistence.room:runtime:1.0.0-alpha1' 
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0-alpha1' 
implementation 'com.jakewharton.rxbinding:rxbinding:1.0.1'
implementation 'com.google.android.gms:play-services-maps:16.1.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-analytics:16.0.8'
implementation 'com.google.android.gms:play-services-places:16.1.0'

implementation 'com.google.maps.android:android-maps-utils:0.5'

implementation 'com.google.firebase:firebase-messaging:17.6.0'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-auth:16.2.1'
implementation 'com.facebook.android:facebook-android-sdk:5.0.0'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.1'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.5.0'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'io.reactivex:rxjava:1.3.8'
implementation 'com.artemzin.rxjava:proguard-rules:1.3.3.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.1'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
implementation 'de.hdodenhof:circleimageview:3.0.0'
implementation ('com.github.bumptech.glide:glide:4.9.0') {
    exclude group: "com.android.support"
}
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation 'com.googlecode.libphonenumber:libphonenumber:8.10.11'
implementation project(':lib-zxing')
implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
implementation 'com.github.lassana:continuous-audiorecorder:1.3.1'
implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
implementation 'com.timehop.stickyheadersrecyclerview:library:0.4.3'
implementation 'org.jsoup:jsoup:1.11.3'
testImplementation 'junit:junit:4.13-beta-2'
}

lib-zxing

 android {
compileSdkVersion 28
buildToolsVersion ’28.0.3’

defaultConfig {
    minSdkVersion 14
    targetSdkVersion 28

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

}dependencies {
api fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

implementation 'com.android.support:appcompat-v7:28.0.0’
testImplementation 'junit:junit:4.13-beta-2'
}
like image 255
NeilLin Avatar asked May 03 '19 07:05

NeilLin


People also ask

What is a duplicate class?

The "duplicate class" error can also occur when the class is named the same with the same package naming hierarchy, even if one of the classes exists in a directory structure with directory names different than the package names.


2 Answers

You can use search everywhere dialog(Dialog that opens on pressing shift twice).

Simply copy class name and paste it in search dialog and it will show results in drop down. You can browse result and check for duplicate entries, Complete path of class will be displayed next to class name so you can find relative libraries and can safely exclude it from anyone of the library.

like image 26
karan Avatar answered Nov 11 '22 15:11

karan


You need to exclude the arch Jar. First of all check where the duplicate comes from. You can see it if you print your dependency tree with a gradle task:

./gradlew -q dependencies app:dependencies --configuration compile

Then exclude the older arch Jar like you did for glide but with the correct exclude, for example:

implementation ('android.arch.persistence.room:runtime:1.0.0-alpha1') {
    exclude group: "android.arch.core"
}
like image 128
Erythrozyt Avatar answered Nov 11 '22 17:11

Erythrozyt