¿Cómo hacer que org.apache.http.legacy funcione con ProGuard (azure mobile services)?

El problema:

Estoy utilizando los servicios móviles android, que se basa en androidhttpclient.

Hacer referencia a org.apache.http.legacy resuelve todos los problemas y la aplicación se ejecuta correctamente. Sin embargo, con proguard en, sigo corriendo en los problemas.

El problema se desarrolla en dos escenarios. Si mantengo la casilla de verificación de exportación marcada (en el camino de construcción de jave), obtengo un 'Stub!' Excepción como se esperaba (ver discusión a continuación) (ver captura de pantalla de la que estoy hablando)

Introduzca aquí la descripción de la imagen

El tiempo de ejecución de tipo: "Stub!":

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.stuffd/com.stuffd.MainActivity}: java.lang.RuntimeException: Stub! at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405) at android.app.ActivityThread.access$800(ActivityThread.java:149) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:211) at android.app.ActivityThread.main(ActivityThread.java:5317) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811) Caused by: java.lang.RuntimeException: Stub! at org.apache.http.message.AbstractHttpMessage.(AbstractHttpMessage.java:7) at org.apache.http.client.methods.HttpRequestBase.(HttpRequestBase.java:7) at org.apache.http.client.methods.HttpGet.(HttpGet.java:8) at com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.executeGetRecords(MobileServiceJsonTable.java:952) at com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.executeUrlQuery(MobileServiceJsonTable.java:183) at com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.execute(MobileServiceJsonTable.java:160) at com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.execute(MobileServiceTable.java:158) at com.microsoft.windowsazure.mobileservices.table.MobileServiceTable.execute(MobileServiceTable.java:249) at com.microsoft.windowsazure.mobileservices.table.query.ExecutableQuery.execute(ExecutableQuery.java:101) 

Si, sin embargo, mantengo la casilla desmarcada (como se sugiere – vea la discusión a continuación), me sale y AbstractMethodError excepción.

 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:811) Caused by: java.lang.AbstractMethodError: abstract method "java.lang.String org.apache.http.client.methods.HttpRequestBase.getMethod()" at android.net.http.AndroidHttpClient.getMethod(AndroidHttpClient.java:283) at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:301) 

Proguard config utilizado:

 -dontwarn org.apache.http.** -dontwarn android.net.http.** -dontwarn com.microsoft.windowsazure.mobileservices.** 

¿Alguien más se ha topado con esto y lo ha descubierto?

Esto es lo que estoy usando, permitiendo que el sistema operativo reemplace correctamente los métodos stubbed en tiempo de ejecución.

 -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.** { *; } -dontwarn org.apache.http.** -dontwarn android.webkit.** 

Se trata de todos los paquetes de stubbed proporcionados por org.apache.http.legacy.jar .

Tienes razón al no exportar el legacy apache lib. Sin embargo, tiene que estar ubicado fuera de la carpeta libs y agregado a la ruta de compilación (cuando se utiliza Eclipse). De lo contrario se exporta de todos modos con sus Android Private Libraries .

Estoy usando GMS, Volley y AndroidHttpClient en mis propias clases de comunicación. Esto es lo que tuve que añadir a la configuración proguard:

 -dontwarn org.apache.http.** -dontwarn com.google.android.gms.** -dontwarn com.android.volley.toolbox.** -dontwarn com.myapp.communication.** -keep class com.google.android.gms.** { *; } 
  • Proguard: IllegalArgumentException: Las pilas tienen diferentes tamaños de corriente
  • Android: ¿Cuáles son las configuraciones recomendadas para Proguard?
  • ¿Es posible Proguard un módulo de biblioteca de Android, pero no el módulo de aplicación?
  • ¿Cómo Proguard dos proyecto androide?
  • Proguard con el proyecto android utilizando bibliotecas (de compatibilidad)
  • Android Studio - ProGuard IOException Duplicate Zip Entry
  • Proguard rompe Android WebView, ¿Por qué?
  • ¿Cómo usar nuevo Android 2.0 Shrinker y setProPropertor falsa?
  • Agregar ruta de archivo jar agregada en proyecto de biblioteca en PROGUARD
  • ¿Cómo generar proguard-android.txt automáticamente?
  • Nota: android.support.v4.text.ICUCompatIcs: no se puede encontrar la clase referenciada dinámicamente libcore.icu.ICU
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.