web-dev-qa-db-ja.com

Android gradleビルドファイルを使用してorg.ApacheからHttpClientを適切にインポートするにはどうすればよいですか?

「gradle build」を実行しようとすると、このエラーが表示されます

WARNING: Dependency org.Apache.httpcomponents:httpclient:4.2.3 is ignored for the default configuration as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage with jarjar to change the class packages
:prepareFreeDebugDependencies
:compileFreeDebugAidl UP-TO-DATE
:generateFreeDebugBuildConfig UP-TO-DATE
:mergeFreeDebugAssets UP-TO-DATE
:compileFreeDebugRenderscript UP-TO-DATE
:mergeFreeDebugResources UP-TO-DATE
:processFreeDebugManifest UP-TO-DATE
:processFreeDebugResources UP-TO-DATE
:compileFreeDebug
/home/xrdawson/Projects/Foo/Bar/src/main/Java/com/Foo/app/PixActivity.Java:20: error: package org.Apache.http.entity.mime does not exist
import org.Apache.http.entity.mime.HttpMultipartMode;
                              ^

Build.gradleの最後は次のようになります。

    repositories {
        mavenCentral()
    }

    dependencies { 
        compile fileTree(dir: 'libs', include: '*.jar')
        compile "org.Eclipse.mylyn.github:org.Eclipse.egit.github.core:2.1.3"
        compile "com.madgag:markdownj-core:0.4.1"
//      compile "org.Apache.httpcomponents:com.springsource.org.Apache.httpcomponents.httpclient:4.2.1"
        compile 'org.Apache.httpcomponents:httpclient:4.2.3'
        compile "com.google.Android:support-v4:r6"
    } 
}

コンパイルプロセスでHttpClientが無視されるのに、コンパイルに失敗するのはなぜですか?

38
xrd

HttpclientライブラリにはMIMEパーツは含まれていないと思います。これらはhttpmimeにあります。これは、httpclientの推移的な依存関係ですが、無視されるため、考慮されません。

この依存関係を追加してみてください。

compile "org.Apache.httpcomponents:httpmime:4.2.3"
79
Hiery Nomus

http-mimeを依存関係として追加すると、httpclientが推移的な依存関係として含まれるので、私にとっては、OPと同じ警告が表示されます。推移的な依存関係を無視するようにgradleに指示する必要がありました。

compile ('org.Apache.httpcomponents:httpmime:4.3.5') {
    // avoid "is ignored for the default configuration X" warnings 
    // since httpclient is included in the Android SDK.
    exclude group: 'org.Apache.httpcomponents', module: 'httpclient'
}
17
twelve17

Androidでは、Mavenディストリビューションを再パッケージ化したHttpClient 4.3.Xが利用可能になりました

プロジェクトリポジトリ: https://github.com/smarek/httpclient-Android
Mavenタグ:cz.msebera.Android:httpclient:4.3.+
Maven Centralリポジトリに公開

バージョン4.3.3では、HttpCore、HttpClient、HttpClient-Cache、およびHttpMime(すべて同じバージョン)が含まれます

免責事項:私はこのプロジェクトの著者です

13
Marek Sebera

これに追加して、compileSdkVersionが19(IN MY CASE)の場合、これを使用して問題を解決しました。

compile ('org.Apache.httpcomponents:httpmime:4.3'){
    exclude group: 'org.Apache.httpcomponents', module: 'httpclient'
}
compile ('org.Apache.httpcomponents:httpcore:4.4.1'){
    exclude group: 'org.Apache.httpcomponents', module: 'httpclient'
}
compile 'commons-io:commons-io:1.3.2'

または、compileSdkVersionが23の場合は、使用します

Android {
useLibrary 'org.Apache.http.legacy'
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    }
}
3
Sophia

公式のAndroid APIにはhttpclientが含まれているため、推移的な依存関係を含む、httpclientへの依存関係をすべて削除します。

本当にhttpclientを使用したい場合は、jarjarで再パッケージし、パッケージの名前を変更して、代わりにこれを使用します。

Httpmimeに関しては、実際にはAndroid.jarにないように見えるため、フィルタリングを避けることができますが、今のところは手動で追加する必要があります。

おそらく、ビルドシステムが1.0になる前にこれを微調整する必要があります。

2
Xavier Ducrohet

これをbuild.gradle(Module:app)ファイルに追加するだけです:

dependencies {
...
   implementation "org.Apache.httpcomponents:httpmime:4.5.6"
}
0
Gabriel