Working with "Cxense SDK for Android", I'm getting the message of duplicated class:
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)
This is my app level build.gradle configuration:
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'
}
How could I avoid this duplicated classes that are surely contained in Cxense SDK?
The "duplicate class" error can also occur when the class is named the same with the same package naming hierarchy, even if one of the classes exists in a directory structure with directory names different than the package names.
There are two ways to fix your issue.
Excluding duplicated dependencies while implementation
individually,
Excluding duplicated dependencies from every implementation
s in generic way.
Here, in your case artifact com.android.support
is duplicated, because your app module uses version : 27.1.1 while your artifact com.cxpublic:cxense-android:1.0.1
is having internal dependency of com.android.support
uses version : 22.2.0.
So, you should remove one of them manually (removing older or lower version is recommended). Let's try to remove it !
By first approach:
implementation ('com.cxpublic:cxense-android:1.0.1') {
exclude group: "com.android.support", module: "support-v4"
}
Putting exclude for group com.android.support
in our artifact com.cxpublic:cxense-android:1.0.1
will not get imported for support-v4
libraries when we use our implementation on this artifact.
So, issue would be resolved by manually putting this block to every artifact having this conflict.
By Second way:
We can remove included dependencies and replace them with one package with latest number. In our case, it is support-v4
with different version. So, go to the android block of app level build.gradle and put below block there to remove duplicated support-v4
from all artifacts, so that we can have distinct dependency.
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
}
If there are duplicates, use exclude
:
implementation ('com.cxpublic:cxense-android:1.0.1') {
exclude group: "com.android.support", module: "support-v4"
}
Or remove implementation 'com.android.support:appcompat-v7:27.1.1'
in favour of support-v4
.
See: https://discuss.gradle.org/t/how-do-i-exclude-specific-transitive-dependencies-of-something-i-depend-on/17991
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With