web-dev-qa-db-ja.com

commons-loggingは、Android St​​udioの更新後にAndroidが提供するクラスと競合するクラスを定義します

Android St​​udioをバージョン3に更新しましたが、以前にエラーなしでコンパイルされたプロジェクトをコンパイルできなくなったようです。

エラーメッセージは次のとおりです

Error:エラー: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 St​​udio 3のバグであるか、com.Android.tools.build:gradle:3.0.0プラグインが含まれているか、何か不足していますか?以前のバージョンでは、まったく同じプロジェクトをコンパイルしても問題ありません。

44
AndreaF

アプリモジュールにあるbuild.gradleに追加

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

問題がcommons-loggingにある場合は、それも除外する必要があります。 app/build.gradleに次のコードを追加します

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

プロジェクトフォルダー内のターミナルで実行します。

./gradlew app:dependencies > dependencies.txt

次に、dependencies.txtをチェックして、競合する依存関係を使用しているユーザーを見つけて、それに応じて行動します(更新の確認、削除、または@Silverstormが示唆するexcludeの使用)

5
Sergio Viudes

同じ問題が発生しました。以下の変更を行いました

 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'
}
4
Raja Peela

最新のgradleでは廃止されているため、「コンパイル」を「実装」に置き換え、Google APIクライアントライブラリから「org.Apache.httpcomponents」を除外する必要があります。

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
khammami

「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'
1
Muhammad Etisam

async-httpで続行する場合は、以下のコードをapp/build.gradleのみに追加します

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

上記のようにcommons-loggingを削除しました。もちろんFatal Exception: Java.lang.NoClassDefFoundError: Failed resolution of: Lorg/Apache/commons/logging/LogFactory;のある電話でクラッシュしました。 Android AP​​Iにこれらのクラスが含まれていないときに、Androidがcommons-loggingがAndroid AP​​Iと競合していると主張するにはどうすればよいですか?!? https://developer.Android.com/reference/packages :facepalm:にorg.Apache.commons.loggingはありません。

Build_gradleにimplementation 'commons-logging:commons-logging:1.0.4'を追加し直しました-Android St​​udioは赤で下線を引きますが、gradleは問題なくコンパイルします。 :facepalm:

Android:triple_facepalm:

0
Martin Vysny