22

正如我们所知,在API 23Apache HTTP Client中删除

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

compileSdkVersion 22

在此处输入图像描述

compileSdkVersion 23

在此处输入图像描述

我有两个问题:

  1. 当然,使用 Volley 的 API23 项目仍然可以成功运行。但是,我不明白他们如何Apache在运行时使用 's 库,他们是在 API22 或更低版本中找到的吗?
  2. 而且,不知道在不久的将来,Volley 会不会升级到不再使用Apache's library?如果没有,我当前的项目将来在Apache's 库完全删除且不受支持时仍然可以工作吗?

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

任何解释将不胜感激。

更新:

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


第二次更新:

我刚刚定制了谷歌的凌空(作为我项目中的一个模块)删除 Apache 库。请前往我的 GitHub 示例项目供您参考。但是,请注意,它并没有针对所有案例进行全面测试,我只测试了 02 个简单案例:GET并且POST使用我的 Web 服务请求ASP.NET Web API.

4

6 回答 6

10

似乎 Android M 中的 Volley 库相当混乱。一个错误已经被提交并被谷歌承认。

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

还可以从库中检查这个未解决的问题,您可以根据它添加旧库

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    useLibrary 'org.apache.http.legacy'
    ...
}
于 2015-09-09T07:00:30.533 回答
8

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

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

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

于 2015-09-09T08:01:10.000 回答
2
android {
    useLibrary 'org.apache.http.legacy'
}

dependencies {
    compile 'commons-httpclient:commons-httpclient:3.1'
}
于 2016-05-01T13:25:38.373 回答
1

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

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

于 2015-09-09T13:41:07.027 回答
0

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

于 2017-08-08T11:23:26.310 回答
0

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

于 2016-06-05T20:23:31.840 回答