Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules guava-20.0.jar (com.google.guava:guava:20.0)

AndroidFirebaseGuavaFirebase in-App-Messaging

Android Problem Overview


When I use implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0' in my app/build.gradle, I get this error:

Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules guava-20.0.jar (com.google.guava:guava:20.0) and listenablefuture-1.0.jar (com.google.guava:listenablefuture:1.0)

Go to the documentation to learn how to Fix dependency resolution errors.

What I also have in my app/build.gradle is this:

implementation 'com.google.android.gms:play-services-base:16.1.0'
implementation 'com.google.android.gms:play-services-analytics:16.0.8'
implementation 'com.google.android.gms:play-services-awareness:16.0.0'
implementation 'com.google.android.gms:play-services-cast:16.2.0'
implementation 'com.google.android.gms:play-services-gcm:16.1.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-maps:16.1.0'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-iid:17.1.2'
implementation 'com.google.firebase:firebase-messaging:17.6.0'
implementation 'android.arch.work:work-runtime:1.0.1'
implementation 'com.android.support:multidex:1.0.3'
apply plugin: 'com.google.gms.google-services'

Maybe one of the libraries that I am using already includes support for the In-App Messaging dependency, and then it becomes redundant? Thank you.

Android Solutions


Solution 1 - Android

2020 Solution

Google knows about this error so they made a special package to fix the conflict.

Add this to your build.gradle

implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

Solution 2 - Android

I found the solution at https://stackoverflow.com/questions/52521302/how-to-solve-program-type-already-present-com-google-common-util-concurrent-lis. user2297550 said:

> I merely added implementation 'com.google.guava:guava:27.0.1-android' at the end of my app gradle file and the error went away.

That was the solution for me. Now I have this and my app compiles correctly:

implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'

Solution 3 - Android

I just came across this when building my Flutter project. Not quite sure why it reared its ugly head, but here I am.

So, if any Flutter devs come across this, @Ray Li's answer worked for me. The build.gradle file that you want to edit is the one in the android/app folder (ie. NOT the one in the android folder).

Just add the implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava' to the dependencies section at the end of the file, as follows:

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
}

Solution 4 - Android

Add this line in build.gradle

    implementation 'com.google.guava:guava:27.0.1-android'

Solution 5 - Android

I encountered the same problem. I added the line below

implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

This works but I encountered another issue- Cannot fit requested classes in a single dex file (# methods: 89411 > 65536) To resolve this error make sure to enable multiDex as below

defaultConfig {
    applicationId "com.techweezy.smartsync"
    minSdkVersion 19
    targetSdkVersion 29
    versionCode 5
    versionName "1.4"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true //added this line
}

Then finally add the below lines.

   implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
    implementation 'androidx.multidex:multidex:2.0.1'

Solution 6 - Android

Reduce duplicated dependencies from your project

For example many dependencies uses support-v4 and appcompat-v7 as included packages and then could be different versions, so you need remove this packages from inside of dependencies and create one compile dependency.

This will remove all included modules of libraries

android {
  configurations {
     all*.exclude module: 'appcompat-v7'
     all*.exclude module: 'support-v4'
  }
}

Or you can manage throw each dependency to more clear removing packages like this:

dependencies {
  implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:4.2.0@aar') {//depend on your library
     transitive = true
     exclude group: 'com.android.support', module: 'appcompat-v7'
     exclude group: 'com.android.support', module: 'recyclerview-v7'
     exclude group: 'com.android.support', module: 'design'
     exclude group: 'com.android.support', module: 'support-v4'
     exclude group: 'com.squareup.retrofit2' module: 'retrofit'
     exclude group: 'com.squareup.retrofit2', module: 'retrofit'
     exclude group: 'com.google.code.gson', module: 'gson'
     exclude module: 'guava'//add this line if you have build error "found in modules guava-xxx-android.jar"
  }
}

All of removed dependencies must be declared outside of mapbox in one copy for all libraries uses them.

Solution 7 - Android

add this to your gradle file

configurations {
    all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}

Solution 8 - Android

  1. Open build.gradle file.

  2. Do Not replace! Just add this line into dependencies{}:

    implementation 'com.google.guava:guava:<version>-jre'
    

> Note: To get the version go to https://mvnrepository.com/artifact/com.google.guava/guava and find for the latest version of jre.

Solution 9 - Android

I added this one and working perfectly for me.

implementation 'com.google.guava:guava:27.0.1-android'

Solution 10 - Android

add these two implementations to your app level build.gradle / app/build.gradle

implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJaime MontoyaView Question on Stackoverflow
Solution 1 - AndroidRay LiView Answer on Stackoverflow
Solution 2 - AndroidJaime MontoyaView Answer on Stackoverflow
Solution 3 - AndroidTarique NaseemView Answer on Stackoverflow
Solution 4 - AndroidPrabhuView Answer on Stackoverflow
Solution 5 - AndroidJacksonView Answer on Stackoverflow
Solution 6 - Androidvishwajit76View Answer on Stackoverflow
Solution 7 - AndroidDhruv gargView Answer on Stackoverflow
Solution 8 - AndroidPasindu JayanathView Answer on Stackoverflow
Solution 9 - AndroidFaisal AhmedView Answer on Stackoverflow
Solution 10 - AndroidRashid IqbalView Answer on Stackoverflow