Using newer version of HttpClient on Android (like 4.1.x)
Posted / Публикувана 2011-08-20 in category / в категория: Android
|
Warning: count(): Parameter must be an array or an object that implements Countable in /home/bolyarco/www-ikratko/ogrelab/wp-content/plugins/microkids-related-posts/microkids-related-posts.php on line 645
[EDIT] 2015-10-15: Now apache provides jar for android (currently 4.3.5.1). Also if you are targeting Android API 23 and newer you can use packages for Android maintained by Marek Sebera (currently 4.4.1.1).
[EDIT] This publication and method are old and deprecated. Please use http://code.google.com/p/httpclientandroidlib/ instead.
If you ended up here that is probably because you hit a bug in the built-in HttpClient library which is not just old, it is beta quality (httpclient-4.0-beta1.jar). Strangely enough there is no hope that Android team will update it soon (also this is impossible without breaking backward compatibility…).
Fear not, there is a remedy.
Sadly we cannot replace the build-in library nor just add newer version but we can "trick" the system and move the library in another namespace in order to avoid conflict with the built-in lib.
The quick solution: here is an zip file containing all the required files (JARs converted using "ogrelab-" namespace prefix). Jump directly to step 7 in the "thorough" solution bellow.
The thorough solution:
Steps:
1. Download JarJar -- this is the tool which we will use to move the classes in new namespace
2. Download latest HttpClient, CommonsLogging and Log4j (you will need "binary" packages) and extract them somewhere
3. Create a temporary dir somewhere like tmp_httpclient for example find following Jars and copy them into the temp dir (versions may differ):
- commons-logging-1.1.1.jar
- httpclient-4.1.2.jar
- httpcore-4.1.2.jar
- httpmime-4.1.2.jar
- log4j-1.2.16.jar
java -jar jarjar-1.1.jar process rules.txt LIBNAME.jar ogrelab-LIBNAME.jar
lib/
directory of your android project (you may need to create it first)- select your project
- right button -> Properties OR from the main menu Project -> Properties
- in the left pane select Java Build Path
- in the right pane select Libraries tab and use the "Add JARs…" button to add the jars from the
lib/
dir. - go to Order and Export tab and move the new jars to be on top, i.e. above Android API
src/
directory of your project.You are done. Be careful not to mix imports from the built-in and the new version.
Happy Http-ing :-)
|
March 9th, 2012 at 01:46:12
That is a very nice write up. Thanks for sharing.
I experienced a bug in the httpclient on a 2.3.6 device that didn't occur on 4.0. Bundling the latest httpclient with my application fixes the issue on all devices.
The issue was related to overwriting request params on a per request basis.
Thanks again. :)
March 28th, 2012 at 12:06:40
Thanks a lot!
This is exactly what I was looking for! Great job!
Thanks again and again!
March 28th, 2012 at 12:34:36
Hi again,
I have just tested it, it works well.
i am wondering if it is necessary to add log4j jar?
Thx!
March 28th, 2012 at 12:41:26
If you don't include log4j.jar you will get warnings at build time. It is not fatal but is annoying.
All in all, please note the first sentence in this publication. It is recommended to use http://code.google.com/p/httpclientandroidlib/ instead of the method described here.
March 28th, 2012 at 01:08:55
Thanks for your quick response and your advise!
Best regards,
Hus
March 28th, 2012 at 01:21:54
YW :-)
May 27th, 2015 at 08:40:10
Thanks a lot, this is exactly what i was looking for. Your blog was a godsend. I can't believe google refuses to give us a support library for Apache HttpClient.