述べたように ここ 、Android MはApache HTTP APIをサポートしません。ドキュメントは以下のように述べています。
代わりにHttpURLConnectionクラスを使用してください。
または
Apache HTTP APIを使い続けるには、まずbuild.gradleファイルで次のコンパイル時の依存関係を宣言する必要があります。
Android {useLibrary 'org.Apache.http.legacy'}
私は自分のプロジェクトのHttpClientの使用法の多くをHttpURLConnectionに変換しましたが、いくつかの分野でHttpClientを使用するにはまだ必要があります。したがって、私は 'org.Apache.http.legacy'をコンパイル時の依存関係として宣言しようとしていますが、build.gradleでエラーが発生しています。
Gradle DSLメソッドが見つかりません: 'useLibrary()'
私の質問は、「org.Apache.http.legacy」を私のプロジェクトでコンパイル時の依存関係としてどのように宣言するのですか?
任意の助けは大歓迎です。ありがとう
API 23の場合:
トップレベルbuild.gradle - /build.gradle
buildscript {
...
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.1'
}
}
...
モジュール固有のbuild.gradle - /app/build.gradle
Android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary 'org.Apache.http.legacy'
...
}
公式ドキュメント(プレビュー用): http://developer.Android.com/about/versions/Marshmallow/Android-6.0-changes.html#behavior-Apache-http-client
最新のAndroidグラドルプラグインの変更履歴: http://tools.Android.com/tech-docs/new-build-system
もう1つの方法は、jbundle依存関係を追加することです。 Android Studioでは「シンボルを解決できません...」というメッセージが表示されないため、これはよりAndroid Studioに適しています。
dependencies {
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
}
Build.gradleファイルに seLibrary 'org.Apache.http.legacy' をAndroid 6.0 Changes
> Apache HTTP Client Removal
ノートに従って追加してください。
Android {
...
useLibrary 'org.Apache.http.legacy'
...
}
欠けているリンクエラーを避けるために依存関係を増やします
dependencies {
provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
}
'提供'を使用すると、依存関係はapkに含まれません
ファイルorg.Apache.http.legacy.jar
をAndroid/Sdk/platforms/Android-23/optional
フォルダーからプロジェクトフォルダーapp/libs
にコピーしただけです。
23.1.1の魅力のように働きました。
Android 9(Pie)用のメモです。
useLibrary 'org.Apache.http.legacy'
に加えて、AndroidManifest.xmlに追加する必要があります。
<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>
ソース: https://developer.Android.com/about/versions/pie/Android-9.0-changes-28
答えが少し古いので、私は私の解決策を置きます(私のために働いたもの)、それは他の誰かに役立つことができます...私は 公式文書から私の解決策を取りました Apacheの、回避策はありません。
1/gradleで:
dependencies {
...
// This is the maintained version from Apache.
compile group: 'cz.msebera.Android', name: 'httpclient', version: '4.4.1.1'
}
2 /アプリの残りの部分でorg.Apache.http
をcz.msebera.Android.httpclient
に置き換えると、すべてのインポート(依存関係)が修正されます。 Ctrl + Shift + Rを押して、プロジェクト全体で置き換えることができます。
FWIW Apacheライブラリの削除はしばらく前に予見されていました。私たちの親友Jesse Wilsonが2011年に私たちに手掛かりを与えました: http://Android-developers.blogspot.com/2011/09/androids-http-clients.html
Googleはしばらく前にApacheHTTPClientの開発を中止しました。そのため、それに依存しているライブラリは、メンテナがコードを更新しない限り、廃止予定のライブラリのリストに載せるべきです。
<rant>
私は、Apache HTTPクライアントに固執することを主張した人々と私がいくつの技術的な議論をしたのかあなたに言うことができません。私の名前が付けられていない前の雇用主の経営陣は、トップエンジニアに耳を傾けなかったり、警告を無視したときに彼らが何について話していたのか知っていなかったために壊れそうな主要なアプリがあります…橋。
勝ちます
</rant>
私はこの問題を次のように解決しました:
1.)GUGが述べたようにトップレベルのビルドファイルにクラスパスを設定します。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0-beta2'
}
allprojects {
repositories {
jcenter()
}
}
}
2.)特定のモジュールのビルドファイル内:
Android {
useLibrary 'org.Apache.http.legacy'
compileSdkVersion 'Android-MNC'
buildToolsVersion '23.0.0 rc3'
}
それは役立つはずです:
Android {
...
useLibrary 'org.Apache.http.legacy'
...
}
欠けているリンクエラーを避けるために依存関係を増やします
dependencies {
provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
}
または
dependencies {
compileOnly 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
}
なぜなら
Warning: Configuration 'provided' is obsolete and has been replaced with 'compileOnly'.
この問題を解決するには、ビルドツールのバージョン "23.0.0 rc2"を次のツールで使用していることを確認してください。
classpath 'com.Android.tools.build:gradle:1.3.0-beta2'