我正在尝试按照sample app将应用从不推荐使用的Android Drive API更新为Drive REST API。
当尝试构建签名的发行版APK时,出现以下问题:
httpclient定义与Android现在提供的类冲突的类。解决方案包括查找没有相同问题的较新版本或替代库(例如,对于httpclient使用HttpUrlConnection或okhttp替代),或使用jarjar之类的库重新打包该库。
这是我的gradle依赖项:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:customtabs:27.1.1'
implementation 'com.google.http-client:google-http-client-gson:1.26.0'
implementation('com.google.api-client:google-api-client-android:1.26.0') {
exclude group: 'org.apache.httpcomponents'
}
implementation('com.google.apis:google-api-services-drive:v3-rev136-1.25.0') {
exclude group: 'org.apache.httpcomponents'
}
}
我猜这是由以下原因引起的:
implementation 'com.google.http-client:google-http-client-gson:1.26.0'
我已经尝试过发布在here和here上的解决方案,但是它们不起作用。
像this comment这样说:
如果排除httpclient,我将无法获得发布APK
还有什么其他解决方案?
答案 0 :(得分:0)
尝试将org.apache.httpcomponents
模块也从google-http-client-gson
中排除。
然后,如果您的项目需要Apache HttpClient类,请使用一些包装器来提供它们,例如this one即使定位到最新的SDK也能很好地发挥作用。
我在app\build.gradle
中使用以下代码块,并且工作正常(我仅使用google-http-client-gson
模块的旧版本):
compile ('com.google.http-client:google-http-client-gson:1.19.0') {
//Exclude conflicting modules
exclude module: 'httpclient'
exclude module: 'commons-logging'
}
//Add HttpClient classes from a different package
compile 'cz.msebera.android:httpclient:4.5.8'
然后,您只需将所有org.apache.http
导入更改为cz.msebera.android.httpclient
,例如
import org.apache.http.HttpResponse
成为
import cz.msebera.android.httpclient.HttpResponse