从 API23 中删除 Apache HTTP 客户端,这会对 Volley 产生影响吗?
Apache HTTP Client Removal from API23, will that have an effect on Volley?
我们知道 Apache HTTP Client
在 API 23
中删除
但是,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
我有两个问题:
- 当然,API23 个使用 Volley 的项目仍然成功运行。
但是,我不明白他们如何在运行时使用
Apache
的库,对吗?
找到 API22 或更低?
- 另外,不知道近期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 个简单情况:GET
和 POST
请求与我的 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'}
]
我们知道 Apache HTTP Client
在 API 23
但是,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
我有两个问题:
- 当然,API23 个使用 Volley 的项目仍然成功运行。
但是,我不明白他们如何在运行时使用
Apache
的库,对吗? 找到 API22 或更低? - 另外,不知道近期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 个简单情况:GET
和 POST
请求与我的 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'}
]