commons-logging defines classes that conflict with classes now provided by Android after Android Studio Update
Solution 1
Add to build.gradle
located in app module
configurations {
all {
exclude module: 'httpclient'
}
}
Solution 2
If the problem is with commons-logging then it must be excluded too. Add the following code in app/build.gradle
configurations {
all {
exclude module: 'httpclient'
exclude module: 'commons-logging'
}
}
Solution 3
Got the same issue. I have done below changes
configurations {
all{
exclude group: 'commons-logging', module: 'commons-logging'
exclude group: 'org.apache.httpcomponents'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'org/apache/http/version.properties'
exclude 'org/apache/http/client/version.properties'
}
Solution 4
You should replace "compile" with "implementation" as it's deprecated in the latest gradle and exlude "org.apache.httpcomponents" from Google api client libraries:
implementation('com.google.api-client:google-api-client-android:1.23.0') {
exclude group: 'org.apache.httpcomponents'
}
implementation('com.google.http-client:google-http-client-gson:1.23.0') {
exclude group: 'org.apache.httpcomponents'
}
this solution was found here: https://developers.google.com/google-apps/activity/v1/quickstart/android
Solution 5
Run in terminal, inside project folder:
./gradlew app:dependencies > dependencies.txt
Then check dependencies.txt to find who is using conflictive dependencies and act accordingly (check for updates, get rid of it, or use exclude as suggested by @Silverstorm)
AndreaF
Updated on March 24, 2022Comments
-
AndreaF about 2 years
I have updated Android Studio to version 3 and now seems unable to compile my project previously compiled without errors.
The error message is the follow
Error:Error: commons-logging defines classes that conflict with classes now provided by Android. Solutions include finding newer versions or alternative libraries that don't have the same problem (for example, for httpclient use HttpUrlConnection or okhttp instead), or repackaging the library using something like jarjar. [DuplicatePlatformClasses]
The dependencies are
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:27.0.0' compile 'com.android.support:design:27.0.0' compile 'com.google.api-client:google-api-client-android:1.23.0' exclude module: 'httpclient' compile 'com.google.http-client:google-http-client-gson:1.23.0' exclude module: 'httpclient' compile 'com.google.firebase:firebase-core:11.4.2' }
and error seems caused by
compile 'com.google.api-client:google-api-client-android:1.23.0' exclude module: 'httpclient' compile 'com.google.http-client:google-http-client-gson:1.23.0' exclude module: 'httpclient'
I already use
exclude module: 'httpclient'
So why It doesn't compile? Is this a bug of Android Studio 3 and\or includedcom.android.tools.build:gradle:3.0.0
plugin or I'm missing something? With the previous version no problem to compile exactly the same project.-
CommonsWare over 6 years"So why It doesn't compile?" -- your problem is with
commons-logging
, based on the error. Perhaps there are newer versions of thosecom.google
dependencies that you should be using. -
AndreaF over 6 years@CommonsWareI haven't find any newer library these versions are latest October 2017 releases
-
Gabriele Mariotti over 6 yearsDo you have same jars in libs folder?
-
AndreaF over 6 years@GabrieleMariotti absolutely not. I haven't any jars in libs folder. The libraries are only specified in dependencies section in build.gradle (otherwise also the previous Android studio would have refused to build). For this reason I cannot figure why after Android Studio update won't compile.
-
-
Ramesh sambu over 6 yearsI am not able to get release apk if exclude httpclient
-
Silverstorm over 6 years@RameshSambu Have you placed the above code in the inner build.gradle of the app module?
-
Ramesh sambu over 6 yearsYes I added like that
-
scionoftech over 6 yearsyou can find release apk at app/release
-
Pkmmte over 6 yearsYou have just saved me from a major release crisis. Thank you!
-
Vahe Gharibyan over 6 yearscompile: compile library for each which contain current module. implementation: compile library for current module, that's mean implemented library not visible for "parent" modules
-
Narendra Singh over 6 yearsIn which tag, do I need to put that?
-
Silverstorm over 6 years@NerendraJi in configurations. If It's missing just copy paste the code that I have posted.
-
Stevey over 6 yearsWhat if I'm using httpclient? My code used to compile before upgrading to Android Studio 3.0. I'm actually using httpclient in my code, and I don't want to switch to okhttp.
-
Pravinsingh Waghela over 6 years@user3562927 I am also facing and having the same issue as you are having. Did You got any solution for it, as in older version it was working. but after upggading Android Studio and Gradle it is not.
-
gbansal about 6 yearsconfigurations { all { exclude module: 'httpclient' exclude module: 'commons-logging' exclude group: 'org.json', module: 'json' exclude group: 'org.apache.httpcomponents' exclude module: 'opengl-api' exclude module: 'xmlParserAPIs' exclude module: 'xpp3' } } this works for me
-
ARLabs about 6 yearsOk, but how libraries that use httpclient would work without it? LVL library of Google depends on org.apache.http
-
khammami almost 6 yearsbut compile is deprecated in the new Android Studio so you'll get a warning to replace it with "implementation" or " api' & that depends on your need
-
kibitzerCZ almost 5 years@ARLabs @user3562927 @Pravinsingh-Waghela You need to provide some different
httpclient
library/wrapper. You could try this one - I was in the same situation yesterday and this library is the only solution that worked for me. You will only have to change allorg.apache.http
imports in your code tocz.msebera.android.httpclient
. -
Kirill Karmazin almost 5 yearsNote:
app:dependencies
- hereapp
is the name of your app module, for examplemyAwesomeApp
-
Muhammad Saqib about 4 yearsthis will exclude
org.apache.http.client.HttpClient
what if our code is already using this library? -
srs about 4 yearsthen you need to find that specific library which is causing this duplicate httpclient import and need to remove the transitive httpclient dependency from that specific library.
-
Muhammad Saqib about 4 yearsin my case,
org.apache.http.client.HttpClient
was causing the conflict since android is now itself providing this library. Luckily, I found a clone github repo oforg.apache.http.client.HttpClient
with different name space which solved my problem. -
Muhammad Saqib about 4 yearshere is the clone, just in case if anyone want to use
implementation group: 'cz.msebera.android', name: 'httpclient', version: '4.4.1.2'
-
Alex Lipov almost 4 yearsThose classes are not exposed as public API, though they are used as part of implementation. To see an example of such conflict, check this issue.
-
Pratik Saluja over 2 yearsWhere to put this code? In App or Project Level Gradle? @Raja Peela
-
Raja Peela over 2 years@PratikSaluja App level inside android {}
-
Pratik Saluja over 2 yearsWeird for me it worked outside of the android block.