As we have known that Apache HTTP Client
removed in API 23
Apache HTTP Client Removal
However, Volley
library currently still uses Apache
's library such as
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;
And I have tested 2 projects: one with compileSdkVersion 22
, the other with compileSdkVersion 23
, got 2 screenshots:
compileSdkVersion 22
compileSdkVersion 23
I have 2 questions:
- Of course, API23 projects using Volley still work successfully.
However, I don't understand how they use the
Apache
's library at runtime, do they
find in API22 or lower instead?
- Moreover, I wonder if in the near future, will Volley be upgraded so
that no longer uses
Apache
's library? If not, will my current projects still work in the future when Apache
's library completely removed and not supported?
Perhaps my English is not so clear, however, hope that you understand my question.
Any explanation will be appreciated.
UPDATE:
From @random's comments, I created a new API23 project using Google's official Volley library (I mean by git clone https://android.googlesource.com/platform/frameworks/volley
as Google suggested here), instead of using compile 'com.mcxiaoke.volley:library:1.0.17'
in build.gradle
file. Yes, got errors with lack of Apache library when building project. Must add useLibrary 'org.apache.http.legacy'
into build.gradle
file as documented.
2nd UPDATE:
I have just customized Google's volley (as a module in my project) removing Apache library. Please go to my GitHub sample project for your reference. However, please note that it has not been fully tested for all cases, and I have tested only 02 simple cases: GET
and POST
requests with my web service that is ASP.NET Web API
.
It seems there has been quite a mess with the Volley library in Android M. A bug has already been filed for it and acknowledged by google.
https://code.google.com/p/android-developer-preview/issues/detail?id=3013
You should star and track it for any further updates
UPDATE
Regarding your first question, you don't get an error for missing apache
files because the library that you're using is still compiled using 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
Also check this open issue from the library
according to which you can add legacy library
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary 'org.apache.http.legacy'
...
}
Apache HTTP Client Removal
This preview removes support for the Apache HTTP client. If your app is using this client and targets Android 2.3 (API level 9) or higher, use the HttpURLConnection class instead. This API is more efficient because it reduces network use through transparent compression and response caching, and minimizes power consumption. To continue using the Apache HTTP APIs, you must first declare the following compile-time dependency in your build.gradle file:
android {
useLibrary 'org.apache.http.legacy'
}
Android is moving away from OpenSSL to the BoringSSL library. If you’re using the Android NDK in your app, don't link against cryptographic libraries that are not a part of the NDK API, such as libcrypto.so and libssl.so. These libraries are not public APIs, and may change or break without notice across releases and devices. In addition, you may expose yourself to security vulnerabilities. Instead, modify your native code to call the Java cryptography APIs via JNI or to statically link against a cryptography library of your choice.
android {
useLibrary 'org.apache.http.legacy'
}
dependencies {
compile 'commons-httpclient:commons-httpclient:3.1'
}
Add this to the de dependencies of your app, and then works correctly:
dependencies {
...
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}
It's one huge hysteria about Apache's HTTP client. You can continue using it in any project you want without any consequences. Why waste time porting code to other libraries? I described the best way to continue using Apache's libraries here: https://stackoverflow.com/a/37623038/1727132 (spoiler: don't use legacy version!)
Appache Http
is removed from android API level 23
if you still using the Apache Http client you can include android { useLibrary 'org.apache.http.legacy'}
in your project - module build.gradle