Ошибка Lint: `httpclient` определяет классы, которые конфликтуют с классами, теперь предоставляемыми Android - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь обновить свое приложение с устаревшего API-интерфейса Android Drive до API Drive REST, следуя примеру приложения .

При попытке создать подписанный выпуск 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'

Я пробовал решения, опубликованные здесь и здесь, но они не работают.

Как и этот комментарий говорит:

Я не могу получить релиз apk, если исключить httpclient

Какие еще есть решения?

1 Ответ

0 голосов
/ 13 июня 2019

Попробуйте исключить модуль org.apache.httpcomponents также из google-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'

Тогда вам просто нужно изменить все ваши org.apache.http импорт на cz.msebera.android.httpclient, например

import org.apache.http.HttpResponse

становится

import cz.msebera.android.httpclient.HttpResponse
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...