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?
There are two ways to fix your issue.
Excluding duplicated dependencies while
implementation
individually,Excluding duplicated dependencies from every
implementation
s in generic way.Let's first understand the problem :
Here, in your case artifact
com.android.support
is duplicated, because your app module uses version : 27.1.1 while your artifactcom.cxpublic:cxense-android:1.0.1
is having internal dependency ofcom.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:
Putting exclude for group
com.android.support
in our artifactcom.cxpublic:cxense-android:1.0.1
will not get imported forsupport-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 duplicatedsupport-v4
from all artifacts, so that we can have distinct dependency.If there are duplicates, use
exclude
:Or remove
implementation 'com.android.support:appcompat-v7:27.1.1'
in favour ofsupport-v4
.See: https://discuss.gradle.org/t/how-do-i-exclude-specific-transitive-dependencies-of-something-i-depend-on/17991