119

当我implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'在 my中使用时app/build.gradle,我收到此错误:

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.

我也有app/build.gradle这样的:

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'

也许我正在使用的库之一已经包含对 In-App Messaging 依赖项的支持,然后它就变得多余了?谢谢你。

4

10 回答 10

308

2020解决方案

谷歌知道这个错误,所以他们制作了一个特殊的包来解决冲突。

将此添加到您的build.gradle

implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
于 2020-03-02T16:27:32.760 回答
90

我在如何解决已经存在的程序类型中找到了解决方案:com.google.common.util.concurrent.ListenableFuture?. user2297550 说:

我只是implementation 'com.google.guava:guava:27.0.1-android'在我的应用程序 gradle 文件的末尾添加,错误就消失了。

这就是我的解决方案。现在我有了这个,我的应用程序可以正确编译:

implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
于 2019-06-17T23:15:09.673 回答
26

我在构建我的 Flutter 项目时遇到了这个问题。不太清楚为什么它会抬起丑陋的头,但我在这里。

所以,如果有任何 Flutter 开发人员遇到这个问题,@Ray Li 的回答对我有用。build.gradle您要编辑的文件是文件夹中的文件android/app(即不是文件夹中的android文件)。

只需implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'在文件末尾添加依赖项部分,如下所示:

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
}
于 2020-10-17T11:53:05.760 回答
14

在 build.gradle 中添加这一行

    implementation 'com.google.guava:guava:27.0.1-android'
于 2020-02-22T13:31:59.913 回答
8

我遇到了同样的问题。我在下面添加了一行

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

这可行,但我遇到了另一个问题Cannot fit requested classes in a single dex file (# methods: 89411 > 65536)- 要解决此错误,请确保启用 multiDex,如下所示

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
}

然后最后添加以下行。

   implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
    implementation 'androidx.multidex:multidex:2.0.1'
于 2020-05-29T20:17:18.473 回答
6

减少项目中的重复依赖项

例如,许多依赖项使用 support-v4 和 appcompat-v7 作为包含的包,然后可能是不同的版本,因此您需要从依赖项内部删除这些包并创建一个编译依赖项。

这将删除所有包含的库模块

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

或者您可以管理 throw 每个依赖项以更清晰地删除包,如下所示:

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

所有已删除的依赖项必须在 mapbox 之外声明为一份副本,以便所有库使用它们。

于 2019-12-02T11:48:58.687 回答
6

将此添加到您的 gradle 文件中

configurations {
    all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
于 2020-10-19T05:57:52.103 回答
2
  1. 打开build.gradle文件。

  2. 不要更换!只需将此行添加到dependencies{}

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

注意:要获取版本,请访问https://mvnrepository.com/artifact/com.google.guava/guava并查找最新版本的jre.

于 2020-10-15T02:25:53.017 回答
2

我添加了这个并为我完美地工作。

implementation 'com.google.guava:guava:27.0.1-android'
于 2021-06-25T09:27:49.387 回答
1

将这两个实现添加到您的应用级别 build.gradle / app/build.gradle

implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
于 2021-01-18T22:40:22.083 回答