从 API23 中删除 Apache HTTP 客户端,这会对 Volley 产生影响吗?

Apache HTTP Client Removal from API23, will that have an effect on Volley?

我们知道 Apache HTTP ClientAPI 23

中删除

Apache HTTP Client Removal

但是,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 个项目:一个 compileSdkVersion 22,另一个 compileSdkVersion 23,得到 2 个屏幕截图:

compileSdkVersion 22

compileSdkVersion 23

我有两个问题:

  1. 当然,API23 个使用 Volley 的项目仍然成功运行。 但是,我不明白他们如何在运行时使用 Apache 的库,对吗? 找到 API22 或更低?
  2. 另外,不知道近期Volley会不会升级成这样 不再使用 Apache 的图书馆?如果不是,当 Apache 的库完全删除且不受支持时,我当前的项目在未来是否仍然有效?

也许我的英文不是很清楚,但是,希望你能理解我的问题。

任何解释将不胜感激。

更新:

根据@random 的评论,我使用 Google 的官方 Volley 库创建了一个新的 API23 项目(我的意思是 git clone https://android.googlesource.com/platform/frameworks/volley 是 Google 建议的 here),而不是在 build.gradle 文件中使用 compile 'com.mcxiaoke.volley:library:1.0.17'。是的,在构建项目时出现缺少 Apache 库的错误。必须按照记录将 useLibrary 'org.apache.http.legacy' 添加到 build.gradle 文件中。


第二次更新:

我刚刚自定义了 Google 的 volley(作为我项目中的一个模块)删除了 Apache 库。请前往 my GitHub sample project 供您参考。但是,请注意,它还没有针对所有情况进行全面测试,我只测试了 02 个简单情况:GETPOST 请求与我的 Web 服务 ASP.NET Web API.

Android M 中的 Volley 库似乎出现了相当混乱的情况。已经为它提交了一个错误并由 google 确认。

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

您应该加注星标并跟踪它以获取任何进一步的更新

更新

关于你的第一个问题,你不会因为缺少 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

同时从图书馆中查看此 open issue 根据它你可以添加遗留库

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    useLibrary 'org.apache.http.legacy'
    ...
}

Apache HTTP 客户端移除 此预览移除了对 Apache HTTP 客户端的支持。如果您的应用正在使用此客户端并面向 Android 2.3(API 级别 9)或更高版本,请改用 HttpURLConnection class。这个 API 更有效,因为它通过透明压缩和响应缓存减少了网络使用,并最大限度地减少了功耗。要继续使用 Apache HTTP APIs,您必须首先在 build.gradle 文件中声明以下编译时依赖项:

android {
    useLibrary 'org.apache.http.legacy'
}

Android 正在从 OpenSSL 转移到 BoringSSL 库。如果您在应用中使用 Android NDK,请不要 link 针对不属于 NDK API 的加密库,例如 libcrypto.so 和 libssl.so。这些库不是 public API,并且可能会在不同版本和设备之间更改或中断,恕不另行通知。此外,您可能会使自己面临安全漏洞。相反,修改您的本机代码以通过 JNI 调用 Java 加密 API 或针对您选择的加密库静态 link。

将此添加到您的应用程序的依赖项中,然后才能正常工作:

依赖关系{ ... 编译 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' }

android {
    useLibrary 'org.apache.http.legacy'
}

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

这是对 Apache 的 HTTP 客户端的一大歇斯底里。您可以在任何项目中继续使用它而不会产生任何后果。为什么要浪费时间将代码移植到其他库?我在这里描述了继续使用 Apache 库的最佳方法:(剧透:不要使用旧版本!)

Appache Http 已从 android API level 23 中删除,如果您仍在使用 Apache Http 客户端,则可以在 project - module build.gradle[=14= 中包含 android { useLibrary 'org.apache.http.legacy'} ]