私は次のgradleファイルを持っています:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/DEPENDENCIES'
}
defaultConfig {
applicationId "com.guesstheurf.guesstheurf"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile (
[group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.5.0'],
[group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.5.0'],
[group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.5.0']
)
compile ('org.apache.httpcomponents:fluent-hc:4.4.1')
}
これを作成すると、次のような警告が表示されます
依存関係
org.apache.httpcomponents:httpclient:4.4.1
は、Androidが提供する内部バージョンと競合する可能性があるため、リリースでは無視されます。
これは、によって依存される依存関係httpcomponents:fluent-hc
です。
このソースは、競合の原因となる推移的な依存関係を除外できることを示す依存関係管理(51.4.7章:推移的な依存関係の除外)で見つかりました。
しかし、私がそれを変更すると
compile ('org.apache.httpcomponents:fluent-hc:4.4.1') { exclude module: 'httpclient' }
Gradleの警告は実際に消えましたが、問題は解決していません。
原因:java.lang.NoClassDefFoundError:org.apache.http.client.fluent.InternalEntityEnclosingHttpRequest at org.apache.http.client.fluent.Request.Post(Request.java:95)
使用しても問題は解決しません
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
使うとき
configurations {
all*.exclude module: 'httpclient'
}
ランタイムエラーは解決しませんが、警告も表示されなくなります。
を使用force = true
して自分のバージョンを強制することを提案するこのソースも、問題を修正しません。
ここで提案されているようにhttpclient関連の依存関係を明示的に追加することも機能しません(そして警告を削除しません):
compile 'org.apache.httpcomponents:httpclient:4.4.1'
compile 'org.apache.httpcomponents:fluent-hc:4.4.1'
compile "org.apache.httpcomponents:httpmime:4.4.1"
compile 'org.apache.httpcomponents:httpcore:4.4.1'
どうすればfluent-hcを機能させることができますか?また、51.2.3バージョンの競合を解決するためのデフォルトの解決戦略であるため、httpclientパッケージの最新バージョンを単に選択しないのはなぜですか?
そして、それがデフォルトの解決戦略であるため、httpclientパッケージの最新バージョンを単に選択しないのはなぜですか?
Androidには非常に古い(BETA1より前の)バージョンのHttpClient 4.0が付属しているため、ストックHttpClientのどのバージョンも使用できません。Gradleプラグインは明らかに、非互換性と競合の可能性について警告するのに十分スマートです。
ここには2つのオプションがあります。
HttpClientの公式Androidポートを使用します。これは、デフォルトでAndroidに付属しているバージョンとAPI互換です。
dependencies {
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
compile group: 'org.apache.httpcomponents' , name: 'fluent-hc' , version: '4.3.5'
}
Dirk Boyeによって開発されたスクリプトを使用して、HttpClientを別の名前空間に再パッケージ化します。HttpClientの最新リリースでのマイレージは異なる場合があります。
org.apache.http -> thank.you.google.org.apache.http
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加