Lint 错误:`httpclient` 定义的类与 Android 现在提供的类冲突

Ivá*_*oko 3 android google-drive-api

我正在尝试按照示例应用程序将我的应用程序从已弃用的 Android Drive API 更新为 Drive REST API 。

在尝试构建签名发布 APK 时,我遇到了以下 lint 问题:

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'
    }
}
Run Code Online (Sandbox Code Playgroud)

我猜这个问题是由以下原因引起的:

    implementation 'com.google.http-client:google-http-client-gson:1.26.0'
Run Code Online (Sandbox Code Playgroud)

我已经尝试了此处此处发布的解决方案,但它们不起作用。

就像这条评论说:

如果排除 httpclient,我将无法获得发布 apk

还有哪些其他解决方案?

kib*_*rCZ 5

尝试org.apache.httpcomponentsgoogle-http-client-gson. 然后,如果您的项目需要 Apache HttpClient 类,请使用一些包装器来提供它们,例如,即使以最新的 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'
Run Code Online (Sandbox Code Playgroud)

然后您只需要将所有org.apache.http导入更改为cz.msebera.android.httpclient,例如

import org.apache.http.HttpResponse
Run Code Online (Sandbox Code Playgroud)

变成

import cz.msebera.android.httpclient.HttpResponse
Run Code Online (Sandbox Code Playgroud)