web-dev-qa-db-ja.com

Android Mのbuild.gradeにコンパイル時の依存関係としてApache HTTP API(レガシー)を追加するにはどうすればいいですか?

述べたように ここ 、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」を私のプロジェクトでコンパイル時の依存関係としてどのように宣言するのですか?

任意の助けは大歓迎です。ありがとう

91
Virat Singh

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

170
hidro

もう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'
 }
28
nexDev

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に含まれません

11
lrampazzo

ファイルorg.Apache.http.legacy.jarAndroid/Sdk/platforms/Android-23/optionalフォルダーからプロジェクトフォルダーapp/libsにコピーしただけです。

23.1.1の魅力のように働きました。

11
CodeBulls Inc.

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

5

答えが少し古いので、私は私の解決策を置きます(私のために働いたもの)、それは他の誰かに役立つことができます...私は 公式文書から私の解決策を取りました 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.httpcz.msebera.Android.httpclientに置き換えると、すべてのインポート(依存関係)が修正されます。 Ctrl + Shift + Rを押して、プロジェクト全体で置き換えることができます。

3
ahmed_khan_89

FWIW Apacheライブラリの削除はしばらく前に予見されていました。私たちの親友Jesse Wilsonが2011年に私たちに手掛かりを与えました: http://Android-developers.blogspot.com/2011/09/androids-http-clients.html

Googleはしばらく前にApacheHTTPClientの開発を中止しました。そのため、それに依存しているライブラリは、メンテナがコードを更新しない限り、廃止予定のライブラリのリストに載せるべきです。

<rant>私は、Apache HTTPクライアントに固執することを主張した人々と私がいくつの技術的な議論をしたのかあなたに言うことができません。私の名前が付けられていない前の雇用主の経営陣は、トップエンジニアに耳を傾けなかったり、警告を無視したときに彼らが何について話していたのか知​​っていなかったために壊れそうな主要なアプリがあります…橋。

勝ちます

</rant>

2
Coder Roadie

私はこの問題を次のように解決しました:

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'
}
2
A.D.

それは役立つはずです:

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'.
0
logeshwaran

この問題を解決するには、ビルドツールのバージョン "23.0.0 rc2"を次のツールで使用していることを確認してください。

classpath 'com.Android.tools.build:gradle:1.3.0-beta2'
0
GUG