迁移到Androidx后出现模块中发现重复的com.google.common类错误

3

这是我的build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app"
        multiDexEnabled true
        minSdkVersion 26
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/INDEX.LIST'
    }
}

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

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'com.facebook.shimmer:shimmer:0.2.0'
    implementation 'androidx.multidex:multidex:2.0.0'
    testImplementation 'junit:junit:4.12'
    implementation 'com.victor:lib:1.0.4'
    implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
    implementation 'net.gotev:speech:1.3.1'
    implementation files('libs/YouTubeAndroidPlayerApi.jar')
    implementation 'com.facebook.fresco:fresco:1.3.0'
    implementation 'com.haozhang.libary:android-animated-recording-view:1.0'
    implementation 'com.github.arimorty:floatingsearchview:2.1.1'
    implementation 'com.google.apis:google-api-services-youtube:v3-rev204-1.23.0'
    implementation 'com.shawnlin:number-picker:2.4.6'
    implementation 'com.unstoppable:submitbutton:1.1.3'
    implementation 'ru.github.igla:ferriswheel:1.1.1'
    implementation 'com.github.Yalantis:Context-Menu.Android:1.0.8'
   // implementation 'com.android.support:cardview-v7:23.+'
    implementation 'com.jaredrummler:material-spinner:1.2.5'
    implementation 'com.github.clans:fab:1.6.4'
    implementation 'com.chauthai.swipereveallayout:swipe-reveal-layout:1.4.1'
    implementation 'com.mapzen.android:speakerbox:1.4.1'
    implementation 'com.github.adrielcafe:AndroidAudioConverter:0.0.8'


    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core:1.1.0'

    implementation group: 'com.google.cloud', name: 'google-cloud-speech', version: '1.22.0'

}

在构建我的项目时,我遇到了以下错误:

Duplicate class com.google.common.annotations.Beta found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.annotations.GwtCompatible found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.annotations.GwtIncompatible found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.annotations.VisibleForTesting found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Absent found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.AbstractIterator found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.AbstractIterator$1 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.AbstractIterator$State found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Ascii found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CaseFormat found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CaseFormat$1 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CaseFormat$2 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CaseFormat$3 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CaseFormat$4 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CaseFormat$5 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CaseFormat$StringConverter found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CharMatcher found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CharMatcher$1 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CharMatcher$And found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CharMatcher$BitSetMatcher found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CharMatcher$FastMatcher found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CharMatcher$NegatedFastMatcher found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CharMatcher$Or found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.CharMatcher$RangesMatcher found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Charsets found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Converter found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Converter$1 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Converter$1$1 found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Converter$ConverterComposition found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Converter$FunctionBasedConverter found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)
Duplicate class com.google.common.base.Converter$IdentityConverter found in modules guava-28.1-android.jar (com.google.guava:guava:28.1-android) and guava-jdk5-17.0.jar (com.google.guava:guava-jdk5:17.0)

如何修复这个问题?

4个回答

11

经过数小时的研究,我找到了解决方案。问题所在是这个依赖项:

'com.google.apis:google-api-services-youtube:v3-rev204-1.23.0'

我通过使用以下内容解决了它:

implementation ('com.google.apis:google-api-services-youtube:v3-rev204-1.23.0'){
        exclude group:'com.google.guava'
    }

如果你遇到类似的问题,请尝试创建一个新的Android项目,并仅导入之前项目中的依赖关系。然后分而治之,直到找到有问题的依赖项。


1

也许已经有点晚了,但我正在回答您的问题。

我曾经遇到过同样的问题。 我正在使用Youtube Data API v3。 经过几次搜索并查看来自Stackoverflow的答案后,我将它们混合在一起,不知何故它起作用了!

以下是我所做的所有事情,并且它有效。

在应用程序级别的build.gradle文件中添加配置,如下所示:

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

在依赖块中添加了这两行

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

在需要使用YouTube数据API的依赖项中,我添加了exclude group:'com.google.guava'。

就像下面这样:

implementation ('com.google.api-client:google-api-client-android:1.22.0') {
        exclude group: 'org.apache.httpcomponents'
        exclude group:'com.google.guava'
    }
    implementation ('com.google.apis:google-api-services-youtube:v3-rev183-1.22.0') {
        exclude group: 'org.apache.httpcomponents'
        exclude group:'com.google.guava'
    }

了解更多,请查看https://stackguides.com/questions/61480581/duplicate-class-found-in-modules-guava-26-0-android-jar-and-guava-jdk5-17-0-jar#


1
表面上看,您需要同时使用com.google.guava:guava-jdk5:17.0和com.google.guava:guava:28.1-android依赖项吗?
我经常看到两种情况下会出现重复类错误:
1)两个库使用了相同依赖的不同版本。
2)在项目中同时使用androidx和support库。您的两个guava依赖可能正在使用存在于androidx和support库中的google commons类。
您应该验证所有支持库依赖项是否已替换为androidx,并且如果已完成,则考虑从com.google.guava:guava-jdk5:17.0或com.google.guava:guava:28.1-android中排除冲突的类包。

我不认为我需要guava。问题是我无法从我的项目中删除它。 - stavros.3p
1
有人可以逐步说明如何“从com.google.guava:guava-jdk5:17.0或com.google.guava:guava:28.1-android中排除冲突的类包”吗? - Kofi Sammie
2
@KofiYah 请尝试在 build.gradle 文件中添加以下行: configurations { implementation.exclude module:'guava-jdk5' } - Girish

0

我遇到了相同的错误

“在jetified-guava-27.1-android (com.google.guava:guava:27.1-android) 和jetified-guava-jdk5-17.0(com.google.guava:guava-jdk5:17.0)模块中发现重复的类com.google.common.annotations.Beta”

我使用YouTube数据API v3在我的应用程序中实现了Youtube,并将此应用程序作为模块添加到我的主应用程序中,结果我遇到了相同的错误。

通过删除一些依赖项,我解决了这个错误。

implementation('com.google.api-client:google-api-client-android:1.23.0') {
    exclude group: 'org.apache.httpcomponents'
}

implementation('com.google.apis:google-api-services-youtube:v3-rev183-1.22.0') {
    exclude group: 'org.apache.httpcomponents'
}

implementation('com.google.api-client:google-api-client-android:1.23.0') {
    exclude group: 'org.apache.httpcomponents'
}

总之,我添加了这三个库,但是它们都无用且会引发错误,因此我将它们全部移除了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接