commons-logging定义了与Android Studio Update之后Android现在提供的类冲突的类

时间:2017-10-28 11:41:20

标签: android android-studio android-gradle android-studio-3.0 android-gradle-3.0

我已将Android Studio更新为版本3,现在似乎无法编译我之前编译的项目而没有错误。

错误消息如下:

  

错误:错误:commons-logging定义与之冲突的类   类现在由Android提供。解决方案包括寻找新的   不具备相同问题的版本或替代库   (例如,对于httpclient,使用HttpUrlConnection或okhttp代替),   或使用jarjar之类的东西重新包装库。   [DuplicatePlatformClasses]

依赖项是

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'
}

并且错误似乎是由

引起的
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'

我已经使用exclude module: 'httpclient' 那为什么它不编译? 这是Android Studio 3和\或包含com.android.tools.build:gradle:3.0.0插件的错误还是我错过了什么?使用以前的版本编译完全相同的项目没有问题。

9 个答案:

答案 0 :(得分:54)

添加到位于app模块中的build.gradle

configurations {
    all {
        exclude module: 'httpclient'
    }
}

答案 1 :(得分:26)

如果问题在于公共日志记录,那么它也必须被排除。 在app / build.gradle中添加以下代码

configurations {
    all {
        exclude module: 'httpclient'
        exclude module: 'commons-logging'
    }
}

答案 2 :(得分:4)

你应该替换"编译"与"实施"因为它在最新的gradle和exlude" org.apache.httpcomponents"中被弃用了。来自Google API客户端库:

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'
}

这个解决方案在这里找到: https://developers.google.com/google-apps/activity/v1/quickstart/android

答案 3 :(得分:4)

在项目文件夹内的终端中运行:

./gradlew app:dependencies > dependencies.txt

然后检查dependencies.txt以查找谁正在使用冲突依赖项并相应地执行操作(检查更新,删除它,或使用@Silverstorm建议的排除)

答案 4 :(得分:2)

遇到同样的问题。我做了以下更改

 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'
}

答案 5 :(得分:1)

如果您想继续使用async-http,请仅在app/build.gradle

中添加以下代码
configurations {
    all {
        exclude module: 'commons-logging'
    }
}

答案 6 :(得分:1)

as' org.apache.httpcomponents:httpclient:4.3.3'在SDKversion 23之后不推荐使用

替换这个:

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

compile 'org.apache.httpcomponents:httpclient:4.3.3'

答案 7 :(得分:0)

我按照上面的建议删除了commons-logging,当然在装有Fatal Exception: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/logging/LogFactory;的某些手机上崩溃了。当Android API不包含任何此类时,Android如何声称commons-logging与Android API冲突? https://developer.android.com/reference/packages上没有org.apache.commons.logging:facepalm:

我已将implementation 'commons-logging:commons-logging:1.0.4'重新添加到build.gradle-Android Studio用红色强调它,但是gradle编译愉快。 :facepalm:

Android:triple_facepalm:

答案 8 :(得分:0)

添加这个然后同步你的gradle

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