模块 classes.jar 中发现了重复的类。

20

我正在使用Cxense Android SDK开发,但是出现了重复类的错误提示:

Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (**com.android.support:support-compat:27.1.1**) and classes.jar (**com.android.support:support-v4:22.2.0**)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules classes.jar (com.android.support:support-compat:27.1.1) and classes.jar (com.android.support:support-v4:22.2.0) 
Duplicate class android.support.v4.app.INotificationSideChannel$Stub$Proxy found in modules classes.jar (com.android.support:support-compat:27.1.1) and classes.jar (com.android.support:support-v4:22.2.0) 
Duplicate class android.support.v4.app.ListFragment found in modules classes.jar (com.android.support:support-fragment:27.1.1) and classes.jar (com.android.support:support-v4:22.2.0) 
Duplicate class android.support.v4.app.ListFragment$1 found in modules classes.jar (com.android.support:support-fragment:27.1.1) and classes.jar (com.android.support:support-v4:22.2.0) 
Duplicate class android.support.v4.app.ListFragment$2 found in modules classes.jar (com.android.support:support-fragment:27.1.1) and classes.jar (com.android.support:support-v4:22.2.0) 
Duplicate class android.support.v4.app.LoaderManager found in modules classes.jar (com.android.support:support-fragment:27.1.1) and classes.jar (com.android.support:support-v4:22.2.0) 

这是我的应用级别的 build.gradle 配置:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.tototita.cxensetestapp"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }


    packagingOptions {
        exclude 'META-INF/LICENSE'
    }
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }


}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1' 
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

     //**CXsense
     implementation 'com.cxpublic:cxense-android:1.0.1'
}

我该如何避免Cxense SDK中肯定包含的这些重复类?


1
你在这里发布了所有的依赖项吗?我只是将它们添加到一个示例项目中,但没有出现任何错误。 - Linh
你的配置和我一样吗?compileSdkVersion 27,targetSdkVersion 27等等? - Jorgesys
1
更多信息:https://dev59.com/llMI5IYBdhLWcg3whLxC#56029604 - A Farmanbar
3个回答

37

修复问题的方法有两种。

  1. implementation逐个排除重复依赖项,

  2. 通用的方式从每个 implementation排除重复依赖项。

首先让我们了解问题:

在您的情况下,因为您的应用程序模块使用的版本是27.1.1,而您的构件com.cxpublic:cxense-android:1.0.1内部依赖于com.android.support的版本是22.2.0,所以com.android.support被重复了。

因此,您应该手动删除其中一个(建议删除较旧或更低版本)。让我们尝试删除它!


第一种方法:

implementation ('com.cxpublic:cxense-android:1.0.1') {
    exclude group: "com.android.support", module: "support-v4"
}

在我们的工件com.cxpublic:cxense-android:1.0.1中为groupcom.android.support放置< strong>exclude将不会导入support-v4库,当我们在此工件上使用我们的实现时,问题将得到解决。

因此,可以通过手动将此块放入每个具有此冲突的工件来解决该问题。

第二种方法:

我们可以删除已包含的依赖项并将它们替换为具有最新编号的一个包。在我们的情况下,它是不同版本的support-v4。因此,转到应用程序级别的build.gradle文件的android块,并将以下块放置在那里以从所有工件中删除重复的support-v4,以便我们可以拥有独特的依赖项。

android {
    // Some other stuffs
    configurations {
        all*.exclude module: 'support-v4' // This removes all other versions of `support-v4` if gets duplicated from all the artifacts.
    }
    // Rest of other stuffs
}

25

@aucd29 我正在使用以下代码:implementation 'com.google.android.libraries.places:places:2.0.0' implementation 'com.google.android.libraries.places:places-compat:2.0.0'但是出现了以下错误:在模块 classes.jar (com.google.android.libraries.places:places-compat:2.0.0) 和 classes.jar (com.google.android.libraries.places:places:2.0.0) 中都找到了重复的类 com.google.android.libraries.places.widget.AutocompleteActivity。 - Mahesh Shahane
1
请问在 build.gradle 文件中应该将这行代码放在哪里?是在 packagingoption 还是 dependencies 内部? - Arslan Kaleem

-2
您可以从以下路径中简单删除缓存文件夹并重新构建项目。然后它会重新构建所有内容。
C:\Users\%USERNAME%\.gradle

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