在模块guava-20.0.jar(com.google.guava:guava:20.0)中找到的重复类com.google.common.util.concurrent.ListenableFuture


79

在我的中使用implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'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依赖的支持,然后变得多余了?谢谢。

Answers:


230

2020解决方案

Google知道此错误,因此他们制作了一个特殊的程序包来解决冲突。

将此添加到您的 build.gradle

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

18
大声笑,这应该永远留在项目中吗?我们如何知道何时可以将其删除?
约尔根·斯文内维克·诺兰

1
这节省了一天。
丹尼斯·奥卢卡

9
哇,来自Google的令人印象深刻的图书馆
winsontan520

7
这将很好地工作,但是,如果您没有在等级defaultConfig上启用mutliDex,则会遇到另一个错误“无法在单个dex文件中容纳请求的类(#方法:89411> 65536)”要解决此问题,请确保您添加实现依赖项上的“ androidx.multidex:multidex:2.0.1”,并在android defaultConfig上将multiDexEnabled设置为true
杰克逊

3
当您快速修复产品时
-Farwa

61

我在“如何解决程序类型”中找到了解决方案: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'

1
但是,这意味着什么?我们正在添加一些新的依赖项,而不是删除发生的重复项和错误消失了.. !!!
杰明·莫迪

@JaiminModi据github.com/google/guava称,“ Guava是Google的一组核心Java库,其中包括新的集合类型(如multimap和multiset),不可变的集合,图形库以及用于并发,I /噢,哈希,高速缓存,原语,字符串等等!它在Google内的大多数Java项目中得到了广泛使用,并且也被许多其他公司广泛使用。”
Jaime Montoya

2
当前的最新版本是implementation 'com.google.guava:guava:28.2-android' github.com/google/guava/releases
Joonsoo,2010年

2
还有一个更新的版本:implementation 'com.google.guava:guava:29.0-jre'
RoarGrønmo20年

9

在build.gradle中添加此行

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

7

我在构建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'
}

2
今天,我的Flutter项目也突然发生了这种情况,这是在升级软件包和Flutter版本之后发生的。
UnicornsOnLSD

5

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

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'

4

减少项目中重复的依赖项

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

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

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

或者,您可以管理将每个依赖项抛出,以便更清楚地删除软件包,如下所示:

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之外声明为一个副本,因为所有库都使用它们。


第一个示例从库中删除所有包含的模块。如果要从导致错误的垂直库中删除几个模块,请尝试第二个垂直库示例。
vishwajit76年


1

将此添加到您的gradle文件

configurations {
    all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.