Commons-logging определяет классы, конфликтующие с классами, которые теперь предоставляются Android после Android Studio Update

Я обновил 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, или я чего-то не хватает? В предыдущей версии нет проблем с компиляцией точно такого же проекта.

Ответы

Ответ 1

Добавить в build.gradle, расположенный в модуле приложения

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

Ответ 2

Если проблема связана с общедоступной информацией, она также должна быть исключена. Добавьте следующий код в app/build.gradle

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

Ответ 3

Вы должны заменить "компиляцию" на "реализацию", поскольку она устарела в последних gradle и исключает "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

Ответ 4

Запуск в терминале, внутри папки проекта:

./gradlew app:dependencies > dependencies.txt

Затем проверьте файл зависимостей .txt, чтобы найти, кто использует конфликтующие зависимости и действовать соответственно (проверьте наличие обновлений, избавитесь от него или используйте исключение, как это было предложено @Silverstorm)

Ответ 5

Получается та же проблема. Я сделал ниже изменений

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

Ответ 6

Если вы хотите продолжить работу с async-http добавьте следующий код только в app/build.gradle

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

Ответ 7

Как 'org.apache.httpcomponents: httpclient: 4.3.3' устарела после SDK версии 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'

Ответ 8

Я удалил регистрацию в общем-то, как предложено выше, конечно, он завис на каком-то телефоне с Fatal Exception: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/logging/LogFactory; , Как Android может утверждать, что регистрация общего доступа конфликтует с Android API, если Android API не содержит ни одного из этих классов?!? На сайте https://developer.android.com/reference/packages: facepalm нет ни одного org.apache.commons.logging.

Я добавил обратно в build.gradle implementation 'commons-logging:commons-logging:1.0.4' - Android Studio подчеркивает это красным, но gradle-компиляции счастливы. : Facepalm:

Android: triple_facepalm: