I\'m dipping my toes into Android development. I have a project that will interface with a RESTful resource and I\'m trying to figure out how to do a basic GET with params o
After API 28, legacy libraries such as HttpClient
have been deprecated, throws a Stub!
error and you must now include this in your Manifest file:
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
https://developers.google.com/maps/documentation/android-sdk/config#specify_requirement_for_apache_http_legacy_library
This happens when using Proguard and the com.apache.http.legacy
library in Android SDK 23.
It worked after I added this to my Proguard config:
-keep class org.apache.http.** { *; }
-keep class org.apache.commons.codec.** { *; }
-keep class org.apache.commons.logging.** { *; }
-keep class android.net.compatibility.** { *; }
-keep class android.net.http.** { *; }
-keep class com.android.internal.http.multipart.** { *; }
-dontwarn org.apache.http.**
-dontwarn android.webkit.**
Which allows the system Apache implementation to properly override the stubs compiled into the app.
I think this is Android's way of telling you that you cannot run that unit test on that platform. Unit tests that involve interacting with the Android platform (e.g. the network in this case) need to be run on an actual Android device or a functioning Android emulator.
(They cannot be run in the context of regular Eclipse. In the early days, you needed Android plugins for Eclipse. These days (since 2013) you should be using Android Studio which build on Intellij.)
Apparently, what you were actually doing was running the unit tests against the stub classes provided by the Android SDK. This cannot ever work.
This thread kind of old, but to whoever doesn't know, Robolectric solves this problem for testing.
For anyone who may be interested, I bumped into a similar problem - though instead of HttpClient
I was getting stub errors for DateUtils
.
Stephen appears to be absolutely correct - classes that are part of the Android platform need the emulator up and running: http://simpleprogrammer.com/2010/07/27/the-best-way-to-unit-test-in-android/
Really quick summary of the above link:
As a matter of fact, all the methods are stubbed out to throw an exception with the message “Stub!” when you call them. How cute.
The real android.jar implementations live on the emulator, or your real Android device.
Therefore, you can unit test...
OR