从API23移除Apache HTTP Client会对Volley产生影响吗?

我们已经知道在API 23中删除了Apache 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的库,他们是在API22或更低版本中find的?
  2. 而且,我想知道在不久的将来,Volley会不会升级,以便不再使用Apache的库? 如果没有,当Apache的库完全删除并且不受支持时,我的当前项目是否仍将继续工作?

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

任何解释将不胜感激。

更新:

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


第二次更新:

我刚刚定制了谷歌的排球(作为我项目中的一个模块),删除了Apache库。 请转到我的GitHub示例项目供您参考。 但请注意,它尚未针对所有情况进行全面测试,我仅测试了02个简单案例:使用我的Web服务即ASP.NET Web API GETPOST请求。

Related of "从API23移除Apache HTTP Client会对Volley产生影响吗?"

似乎Android M中的Volley库已经相当混乱了。已经为它提交了一个bug并得到谷歌的认可。

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

您应该标记并跟踪它以进行任何进一步的更新

UPDATE

关于您的第一个问题,您没有因缺少apache文件而出错,因为您使用的库仍然使用API​​编译

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

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或静态链接到您选择的加密库。

 android { useLibrary 'org.apache.http.legacy' } dependencies { compile 'commons-httpclient:commons-httpclient:3.1' } 

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

dependencies {… compile’org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2′}

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

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