Migrate from Bazel

This commit is contained in:
Marc Plano-Lesay 2025-12-12 15:30:04 +11:00
commit 016dbd0814
Signed by: kernald
GPG key ID: 66A41B08CC62A6CF
59 changed files with 7044 additions and 0 deletions

View 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.