Migrate from Bazel
This commit is contained in:
commit
016dbd0814
59 changed files with 7044 additions and 0 deletions
66
content/posts/use-apache-http-client-on-android-sdk-23.md
Normal file
66
content/posts/use-apache-http-client-on-android-sdk-23.md
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
+++
|
||||
template = "article.html"
|
||||
title = "Use Apache HTTP Client on Android SDK 23"
|
||||
date = 2015-10-01T15:46:00+02:00
|
||||
description = "How to continue using Apache HTTP Client in Android SDK 23 after Google removed it from the platform."
|
||||
|
||||
[taxonomies]
|
||||
tags = ["android"]
|
||||
+++
|
||||
|
||||
With the Android M SDK (API 23), Google removed the Apache HTTP Client library.
|
||||
It was deprecated since API 22, and Google recommanded to use
|
||||
`HttpURLConnection` instead since API 9. While the classes are still bundled in
|
||||
Android 6 ROMs, it won't be long until we see them completely go away.
|
||||
|
||||
Some applications are still relying on this library, and need to be updated to
|
||||
use the SDK 23, without having time/budget/whatever required to switch from
|
||||
HTTP Client. While I strongly recommend you to still take time to move to
|
||||
something else (there are many high-level libraries, like
|
||||
[OkHttp](http://square.github.io/okhttp/) or
|
||||
[Ion](https://github.com/koush/ion), or you can use `HttpURLConnection`
|
||||
to keep a low-level access), there is a way to use the Apache library
|
||||
while using the SDK 23.
|
||||
|
||||
<!--more-->
|
||||
|
||||
## Current situation
|
||||
|
||||
The Android SDK is mainly a JAR of empty stubs, which allows the build system to
|
||||
assemble an APK depending on these stubs. But the JAR is not bundled in the
|
||||
APK. At runtime, Android will provide actual implementations of all these
|
||||
classes and their methods. That's a rough explanation, but we don't have to go
|
||||
more in-depth to explain the issue we have with the SDK 23.
|
||||
|
||||
In this new SDK, Google simply removed the stubs for the Apache HTTP Client
|
||||
library. As a result, any application using it doesn't build anymore. But… an
|
||||
old APK still works on devices running on Android M. The explanation is simple:
|
||||
the stubs have been removed, but not the matching classes on the device. The
|
||||
solution seems obvious: we need to get back those stubs!
|
||||
|
||||
## Fixing the problem on a Gradle project
|
||||
|
||||
Using the build-tools 23 and the SDK 23 (well, you won't have the issue without
|
||||
it anyway), providing stubs for the Apache library is really easy. Simply
|
||||
add this command in the `android` section of your `build.gradle`:
|
||||
|
||||
*build.gradle*
|
||||
|
||||
```groovy
|
||||
android {
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
}
|
||||
```
|
||||
|
||||
Rebuild, problem solved.
|
||||
|
||||
## Other project types
|
||||
|
||||
If you're not using Gradle, the solution is not much more complicated. Google is
|
||||
providing a JAR with the stubs you need. That's the one used by Gradle. You can
|
||||
find it in your SDK: `platforms/android-23/optional/org.apache.http.legacy.jar`.
|
||||
Simply build against this JAR, and you'll be fine.
|
||||
|
||||
In both cases, please remember to actually fix this by not using the Apache HTTP
|
||||
Client library any more as soon as possible, as it will probably be deleted in a
|
||||
future Android release.
|
||||
Loading…
Add table
Add a link
Reference in a new issue