web-dev-qa-db-ja.com

Android Gradle Apache HttpClientが存在しませんか?

IntelliJプロジェクトをAndroid StudioのGradleシステムに変換しようとしていますが、Apache HttpClientでエラーが発生していますか?私は何かが足りない、私が得ているエラーは次のとおりです。

Error:(10, 30) error: package org.Apache.http.client does not exist
Error:(11, 30) error: package org.Apache.http.client does not exist
Error:(12, 37) error: package org.Apache.http.client.entity does not exist
Error:(13, 38) error: package org.Apache.http.client.methods does not exist
Error:(14, 38) error: package org.Apache.http.client.methods does not exist
Error:(15, 38) error: package org.Apache.http.client.methods does not exist
Error:(16, 35) error: package org.Apache.http.impl.client does not exist
Error:(134, 33) error: cannot find symbol class HttpUriRequest
Error:(164, 39) error: cannot find symbol class HttpUriRequest
Error:(106, 17) error: cannot find symbol class HttpGet
Error:(106, 39) error: cannot find symbol class HttpGet
Error:(117, 17) error: cannot find symbol class HttpPost
Error:(117, 40) error: cannot find symbol class HttpPost
Error:(125, 43) error: cannot find symbol class UrlEncodedFormEntity
Error:(135, 9) error: cannot find symbol class HttpClient
Error:(135, 33) error: cannot find symbol class DefaultHttpClient
Error:(155, 18) error: cannot find symbol class ClientProtocolException
Error:(165, 9) error: cannot find symbol class HttpClient
Error:(165, 33) error: cannot find symbol class DefaultHttpClient
Error:(185, 18) error: cannot find symbol class ClientProtocolException

私のbuild.gradleファイルには以下の依存関係があります。

dependencies {
    compile 'com.google.Android.gms:play-services:+'
    compile 'org.Apache.httpcomponents:httpclient:4.2.6'
    compile 'org.Apache.httpcomponents:httpmime:4.2.6'
    compile files('libs/core.jar')
}

多くの人が似たような問題を抱えているようですが、SOまたはGoogleのどちらにも解決策がないので、この質問が将来の検索者に役立つことを願っています。

248
Apqu

非推奨のApache HttpClientを新しいHttpURLConnectionに置き換えることをお勧めします。

これは、よりクリーンなソリューションです。移行は非常に簡単です。一般的には、最新のSDKの変更に固執するほうが、/ patch /回避策を試してみるよりはましです。

ステップ1

HttpGet httpGet = new HttpGet(url);

になります:

URL urlObj = new URL(url);

ステップ2

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpGet, localContext);
InputStream is = response.getEntity().getContent();

になります:

HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
InputStream is = urlConnection.getInputStream();

ステップ2ビス

int status = response.getStatusLine().getStatusCode();

になります:

int status = urlConnection.getResponseCode();
36
Benjamin Piette

あなたが23としてターゲットSDKを使用している場合あなたのbuild.gradleで以下のコードを追加

Android{
    compileSdkVersion 23
    buildToolsVersion '23.0.1'
    useLibrary  'org.Apache.http.legacy'
}

そしてあなたのbuildscriptを

classpath 'com.Android.tools.build:gradle:1.3.0' 

より多くの情報のためにこれに続きなさい link

513
Jinu

私はこの問題を抱えていて、それからこれらのページを見つけました:ここであなたはApacheライブラリが非推奨であることを見ることができます、しかし、それは取り除かれない、それでそれは働くべきです。そうではありません。

見る

そしてここであなたのプロジェクトにApacheライブラリを含める方法を見ることができます

見る

2番目のリンクで推奨されているように、build.gradleファイルに以下を追加して問題を解決しました。

Android {
    useLibrary 'org.Apache.http.legacy'
}

しかし、これはgradle 1.3.0-beta2以降を使用している場合にのみ機能するので、それより低いバージョンを使用している場合はbuildscriptの依存関係にこれを追加する必要があります。

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

お役に立てれば。

92
Milos Savanovic

このライブラリをbuild.gradleに追加してください

 Android {
      useLibrary 'org.Apache.http.legacy'
 }
39
Darshan Dhoriya

org.Apache.http.legacy.jarフォルダーにあるAndroid/Sdk/platforms/Android-23/optionalapp/libsにコピーします

また、この行をapp.gradleファイルに追加しました

compile files('libs/org.Apache.http.legacy.jar')

しかし、もっとjarライブラリを使っているのであれば、この方法を使うことができます。

compile fileTree(dir: 'libs', include: ['*.jar'])
36
do01

基本的にあなたがする必要があるのはaddだけです:

useLibrary  'org.Apache.http.legacy'

あなたのbuild.gradleファイルへ。

12
ATechPerson

私は似たような問題に出くわしました、あなたはそれを同じような方法を使って動かすことができるかもしれません。

まず、現在の設定でこれを試し、httpclientからhttpmimeを除外します。

dependencies {
    compile 'com.google.Android.gms:play-services:+'
    compile ('org.Apache.httpcomponents:httpmime:4.2.6'){
            exclude module: 'httpclient'
        }
    compile 'org.Apache.httpcomponents:httpclient:4.2.6'
} 

私の場合は、次のjarファイルを使用して修正しました。

次に、build.gradle内でhttpclientからhttpmimeを除外します。

dependencies {
    compile 'com.google.Android.gms:play-services:+'
    compile('org.Apache.httpcomponents:httpmime:4.3.5') {
        exclude module: 'httpclient'
    }
    compile 'org.Apache.httpcomponents:httpclient-Android:4.3.5.1'
}
9
Daniel Nugent

私は同じ問題に遭遇しました。 Daniel Nugentの答えは、手助けとなりました(HttpResponseが見つかった - 彼のアドバイスに従った後 - HttpClientはまだ欠けていた)。

だからここに私のためにそれを修正したものがあります:

  1. (まだ行っていない場合は、以前の輸入明細書を賞賛する)
  2. http://hc.Apache.org/downloads.cgi にアクセスしてください。
  3. バイナリセクションから4.5.1.Zipを取得します
  4. 解凍して、httpcore-4.4.3フォルダーにhttpclient-4.5.1.jarproject/libsを貼り付けます。
  5. jarを右クリックして ライブラリとして追加 を選択します。

それが役に立てば幸い。

9
Martin Pfeffer

JinuとDanielによる完璧な答え

これに追加私はあなたのcompileSdkVersionが19の場合、これを使用して問題を解決しました(私の場合)

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'
    }
}
7
Sophia

これは私がしたことです、そしてそれは私のために働きます。

ステップ1:これをbuild.gradeに追加します(モジュール:app)

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'

ステップ2:プロジェクトを同期して完了。

5

ストックAndroidで提供されるApache HTTPクライアントのバージョンは 非常に古い でした。

Google Android 1.0は、Apache HttpClientのベータ前のスナップショットとともにリリースされました。最初のAndroidリリースに合わせて、Apache HttpClient 4.0 APIを早急に凍結する必要がありましたが、多くのインターフェースと内部構造はまだ完全には機能していませんでした。 Apache HttpClient 4.0が成熟するにつれて、プロジェクトはGoogleがコードツリーに最新のコード改善を組み込むことを期待していました。残念ながらそれは起こりませんでした。

あなたはcoulduseLibrary 'org.Apache.http.legacy'回避策(@Jinuなどによって推奨)を介して古い非推奨ライブラリを使用し続けることができますが、箇条書きと別の何か、たとえばネイティブAndroid HttpUrlConnection に更新するか、それがニーズに合わない場合は、 OkHttpライブラリ を使用できます。 、これはHttpUrlConnection内部的に基づいている とにかくです。

OkHttpには実際には 互換性レイヤー があり、Apacheクライアントと同じAPIを使用しますが、allを実装していません同じ機能なので、走行距離は異なる場合があります。

Apacheクライアントの新しいバージョンをインポートすることは可能です (@MartinPfefferが示唆するように)、以前使用していたクラスとメソッドのほとんどは非推奨になっている可能性が高く、更新によってコードにバグが発生するという大きなリスク(たとえば、以前はプロキシの背後から機能していた接続が機能しなくなったことがわかったため)は、これは優れたソリューションではありません。

1
Tim Rae

上記の答えのどれも私のために完全に働かなかったので私は掲示しなければならなかった。

Android Studioを使用しています

classpath 'com.Android.tools.build:gradle:1.5.0'

compileSdkVersion 23
buildToolsVersion "23.0.3"

ステップ1:最新のjarファイルをダウンロードする( http://www-eu.Apache.org/dist//httpcomponents/httpclient/binary/httpcomponents-client-4.5.2-bin.Zip

ステップ2:.jarファイルをモジュールのlibsフォルダーにコピーペーストします(まだ存在しない場合は作成します)。

ステップ3:jarを右クリックして「ライブラリとして追加」モジュールのgradleファイルに依存関係としてjarファイルが自動的に追加されます

ステップ4:これで自動的に問題は解決しますが、アプリでproguardを使用している場合は、重複したクラスファイルに関する警告が表示され、ビルドできなくなります。これは既知のバグであり、proguard-rulesに以下を追加する必要があります

-dontwarn org.Apache.commons.**
-keep class org.Apache.http.** { *; }
-dontwarn org.Apache.http.**

がんばろう!

1
Debasish Mitra

この問題に何日も費やした後、私はついにそれを解決することができました。残念ながら、私たちが拡張ファイルを使いたいのならそれが必要です。解決策は、ここで少数の人々によって提供されました、しかし私にとって答えは私にとって多くの時間を節約することができたいくつかのマイナーな詳細を欠いていました。これは私のような初心者があなたの貴重な時間を節約するための一連の出来事です。

最初にD:\ Users\Imre\AppData\Local\Android\sdk1\extras\google\play_licensingから "ライブラリ"フォルダをプロジェクトにインポートし、[ファイル]、[新規作成]、[インポートモジュール]の順に選択し、[ライブラリ]フォルダに移動します。 SDKマネージャを開いてポップアップ画面の下部にある[Launch Standalone SDK Manager]をクリックすると、ポインタを下部の[Extras]フォルダの上に移動すると、小さな黄色の情報で場所がわかります。インポートする必要があるパッケージ.

それが済んだら、左ペインの "プロジェクト"のある "ライブラリ"セクションに行き、その中の "Android"タブを開きます。ライブラリのJavaセクションを開き、APKExpansionPolicyクラスを開きます。エラーがあり、インポートorg.Apache.http.NameValuePairおよびインポートorg.Apache.http.client.utils.URLEncodedUtilsが薄いグレーである場合は、build.gradle(Project:whatever)を開き、「buildscript」でそれを確認してください。 「依存関係」の下には、「クラスパス 'com.Android.tools.build:gradle:1.5.0」が含まれています。 1.5.0はあなたの場合とは異なるかもしれません。それはあなたのスタジオのバージョンに依存すると思います。私のものは1.5.1です。あなたの方が新しい場合は、番号を更新するように促されます。

その後、 "build.gradle(Module:library)"に行き、 "useLibrary 'org.Apache.http.legacy'を" Android "セクションに追加してください。今すぐ同期(R/H上部コーナー)を提供する必要があります。やりなさい。

さらにエラーメッセージが表示された場合(逆のやり方で行ったのでわかりません)、Apacheはもうサポートされていないので、Apacheファイルがプロジェクトから欠落している可能性があります。 C/D:Users/Yourname/AppData/Local/Android/Sdk/platform/Android-23/optionalでそれらを見つけて、コピーしてyourproject/app/libsフォルダーに貼り付けます。そこにoptional.jsonとorg.Apache.http.legacy.jarファイルがあるはずです。 ApacheのWebサイトにアクセスして最新バージョンをダウンロードする方が良い場合があります。 http://hc.Apache.org/downloads.cgi 任意の場所に解凍して開き、 "lib"に移動してhttpclientをコピーします。 -4.5.1.jarファイルを追加し、org.Apache.http.legacy.jarファイルをそれに置き換えます。

プロジェクトを同期して再構築/クリーンアップすればうまくいくはずです。

念のため、あなたの端末(Android StudioのL/H下部)を開いて、「gradlew clean」と入力してください。いくつかインストールするでしょう。それが終わったら、「gradlew assemble」と入力してください。完了するまでに数分かかりますが、もちろんエラーがある場合はエラーが発生します。ターミナルに何も入力できない場合は、コマンドプロンプトを起動し(Windowsボタン+ R)、cmdを入力してOKを押し、小さな黒いポップアップ画面のタイトル(C:\ WINDOWS\system32\cmd.exe)を右クリックします。 、プロパティ、オプション、ウィンドウの下部にある[レガシコンソールを使用する]が太字になっていることを確認します。 A.Studioを再起動してください。

がんばろう!

1
Immy

私の場合は、自分のAndroidプロジェクトで自分のライブラリの1つを更新しました。

私は私のキャッシュストレージソリューションとしてReservoirを使っています: https://github.com/anupcowkur/Reservoir

私はから行った:

compile 'com.anupcowkur:reservoir:2.1'

に:

compile 'com.anupcowkur:reservoir:3.1.0'

ライブラリの作者がリポジトリからcommons-ioライブラリを削除したため、私のアプリは機能しなくなりました。

これをgradleに追加してcommons-ioを手動で含める必要がありました。

compile 'commons-io:commons-io:2.5'

https://mvnrepository.com/artifact/commons-io/commons-io/2.5

0
Simon

私は次のクローンを作成しました: https://github.com/google/play-licensing

それから私はそれを私のプロジェクトにインポートしました。

0
Likwidsage