我已将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
插件的错误还是我错过了什么?使用以前的版本编译完全相同的项目没有问题。
答案 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'
}