web-dev-qa-db-ja.com

API23からのApache HTTPクライアントの削除、それはVolleyに影響を及ぼしますか?

Apache HTTP ClientAPI 23で削除されていることがわかっています。

Apache HTTPクライアントの削除

ただし、Volleyライブラリは現在、次のようなApacheのライブラリを使用しています。

import org.Apache.http.Header;
import org.Apache.http.HttpEntity;
import org.Apache.http.HttpResponse;
import org.Apache.http.HttpStatus;
import org.Apache.http.StatusLine;
import org.Apache.http.conn.ConnectTimeoutException;
import org.Apache.http.impl.cookie.DateUtils;

そして、私は2つのプロジェクトをテストしました。1つはcompileSdkVersion 22を使用し、もう1つはcompileSdkVersion 23を使用して、2つのスクリーンショットを取得しました。

compileSdkVersion 22

enter image description here

compileSdkVersion 23

enter image description here

2つの質問があります。

  1. もちろん、Volleyを使用したAPI23プロジェクトは引き続き正常に機能します。ただし、実行時にApacheのライブラリをどのように使用するのか理解できません。代わりにAPI22以下で見つかりますか?
  2. さらに、近い将来、VolleyはApacheのライブラリを使用しないようにアップグレードされるのでしょうか?そうでない場合、Apacheのライブラリが完全に削除されてサポートされなくなっても、現在のプロジェクトは将来も機能しますか?

おそらく私の英語はそれほど明確ではありませんが、私の質問を理解していただければ幸いです。

説明をいただければ幸いです。

UPDATE:

@randomのコメントから、git clone https://Android.googlesource.com/platform/frameworks/volleyファイルでcompile 'com.mcxiaoke.volley:library:1.0.17'を使用する代わりに、Googleの公式Volleyライブラリ(つまり、build.gradleはGoogleが提案した here )を使用して新しいAPI23プロジェクトを作成しました。はい、プロジェクトのビルド時にApacheライブラリが不足しているというエラーが発生しました。記載されているとおり、useLibrary 'org.Apache.http.legacy'build.gradleファイルに追加する必要があります。


2回目の更新:

私はGoogleのボレーをカスタマイズし(私のプロジェクトのモジュールとして)、Apacheライブラリを削除しました。参考のために my GitHubサンプルプロジェクト にアクセスしてください。ただし、すべてのケースで完全にテストされているわけではなく、WebサービスがASP.NET Web APIであるGETおよびPOSTリクエストの02の単純なケースのみをテストしたことに注意してください。

22
BNK

Android MのVolleyライブラリにはかなり混乱があったようです。バグはすでに報告されており、グーグルによって認められています。

https://code.google.com/p/Android-developer-preview/issues/detail?id=301

今後の更新については、スターを付けて追跡する必要があります

更新

最初の質問については、Apacheファイルがないためにエラーが発生することはありません。これは、使用しているライブラリがAPI 22を使用してコンパイルされているためです。

Android_BUILD_TARGET_SDK_VERSION=22
Android_BUILD_TOOLS_VERSION=22.0.1
Android_BUILD_SDK_VERSION=22

https://github.com/mcxiaoke/Android-volley/blob/master/gradle.properties

また、レガシーライブラリを追加できるライブラリから 未解決の問題 を確認してください

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    useLibrary 'org.Apache.http.legacy'
    ...
}
10
random

Apache HTTPクライアントの削除このプレビューでは、Apache HTTPクライアントのサポートを削除します。アプリがこのクライアントを使用しており、Android 2.3(APIレベル9)以上)をターゲットにしている場合は、代わりにHttpURLConnectionクラスを使用します。このAPIは、透過的な圧縮と応答のキャッシュによりネットワークの使用を削減するため、より効率的です、および消費電力を最小限に抑えます。ApacheHTTP APIを引き続き使用するには、まずbuild.gradleファイルで次のコンパイル時の依存関係を宣言する必要があります。

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

AndroidはOpenSSLからBoringSSLライブラリに移行しています。 Android NDKをアプリで使用している場合は、libcrypto.soやlibssl.soなど、NDK APIの一部ではない暗号化ライブラリに対してリンクしないでください。これらのライブラリはパブリックAPIではないため、リリースやデバイスによって予告なく変更または中断される可能性があります。さらに、セキュリティの脆弱性にさらされる可能性があります。代わりに、ネイティブコードを変更してJavaを介して暗号化APIを呼び出しますJNI、または選択した暗号化ライブラリに対して静的にリンクします。

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

dependencies {
    compile 'commons-httpclient:commons-httpclient:3.1'
}
2
itzhar

これをアプリのde依存関係に追加すると、正しく機能します。

依存関係{...コンパイル 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'}

Appache Httpは、Android API level 23から削除されました。引き続きApache Httpクライアントを使用している場合は、Android { useLibrary 'org.Apache.http.legacy'}project - module build.gradleに含めることができます。

0
Abhijit Chakra

これは、ApacheのHTTPクライアントに関する大きなヒステリーです。何の影響もなく、任意のプロジェクトで引き続き使用できます。コードを他のライブラリに移植するのに時間を無駄にするのはなぜですか?ここで、Apacheのライブラリを引き続き使用するための最良の方法について説明しました: https://stackoverflow.com/a/37623038/1727132 (ネタバレ:レガシーバージョンを使用しないでください!)