Error al trabajar con Jackson library post-obfuscation usando Proguard

Después de recurrir a todo tipo de consultas relacionadas con problemas con obfuscation usando Proguard, he llegado al punto en el que siento que podría ser el único que tiene este problema en particular. Por lo tanto, el puesto.

Tengo una aplicación androide bastante estándar que hace uso de llamadas REST basadas en JSON para intercambiar datos. Hago uso de la biblioteca de Jackson para analizar los datos de JSON. Todo había estado funcionando perfectamente, hasta que decidimos incorporar obfuscation para nuestras versiones de lanzamiento usando Proguard. Después de ordenar un mundo de problemas de devolución de llamada, finalmente me quedé con un problema relacionado con la biblioteca de Jackson.

Básicamente, la línea ObjectMapper om = new ObjectMapper() – simplemente no funciona! Sigo recibiendo el siguiente error en esa línea:

 Caused by: java.lang.ExceptionInInitializerError at org.codehaus.jackson.map.ObjectMapper.<clinit>(Unknown Source) ... 8 more Caused by: java.lang.NullPointerException at org.codehaus.jackson.map.introspect.VisibilityChecker$Std.<init>(Unknown Source) at org.codehaus.jackson.map.introspect.VisibilityChecker$Std.<clinit>(Unknown Source) ... 9 more 

Después de leer una serie de otros mensajes relacionados con la inclusión de bibliotecas externas, hacer proguard ignorar las clases de la biblioteca de Jackson, encender y apagar la optimización y encogimiento de banderas, estoy justo en este momento.

Las diversas cosas que he incluido en mi archivo proguard.cfg por el bien de Jackson –

 -dontskipnonpubliclibraryclassmembers -dontoptimize -dontshrink -libraryjars xtraLibs/joda-time-1.6.2.jar;xtraLibs/xml-apis.jar;xtraLibs/jsr311-api-0.8.jar;xtraLibs/stax2-api-3.0.0.jar;xtraLibs/httpmime-4.0.1.jar 

Entre ellos, he dontshrink banderas dontoptimize y dontshrink . Sin embargo, el resultado siempre ha sido el mismo.

En todo el tiempo que he pasado tratando de resolver este problema, he llegado a estar asombrado y asombrado por el tipo de esfuerzo que se metió en la biblioteca de Proguard. Es sólo que cuando las cosas no funcionan, están un poco ofuscadas .

Versión de Proguard – 4.6

One Solution collect form web for “Error al trabajar con Jackson library post-obfuscation usando Proguard”

No es obvio del rastro de la pila, pero Jackson necesita algunas anotaciones, que ProGuard elimina por defecto. Cfr. Manual de ProGuard> Ejemplos> Procesar anotaciones :

 -keepattributes *Annotation*,EnclosingMethod 

Además, como sugiere el ominoso nombre del paquete 'org.codehaus.jackson.map.introspect', Jackson realiza introspección en las clases analizadas para encontrar getters y setters. Sin saberlo mejor, ProGuard puede eliminar o cambiar el nombre de éstos, porque su código puede no utilizarlos explícitamente. Es posible que tenga que mantenerlos explícitamente, por ejemplo:

 -keep public class mydatapackage.** { public void set*(***); public *** get*(); } 
  • Cómo mantener / excluir una ruta de paquete particular cuando se utiliza proguard?
  • Proguard warning: la configuración mantiene el punto de entrada ... pero no la clase descriptor
  • Uso de Proguard para eliminar clases no utilizadas en la biblioteca de Servicios de Google Play
  • Proguard Nota para la clase desconocida 'Objeto' con Android Studio y Gradle
  • Proguard Error / Dalvik Error 1 al firmar la aplicación para Android
  • Eliminar el registro con Proguard
  • Android: Java: Proguard: ¿Cómo verificar si mi jar (proyecto jar diferente) / apk se procesa correctamente? (Estoy pensando en hacer ingeniería inversa)
  • Proguard devuelto con el código de error 1. Consulte consola
  • ProGuard: no puede encontrar la clase referenciada com.google.android.gms.R
  • Android BadParcelableException sólo con apk firmado
  • Gradle no puede encontrar el símbolo de la clase interna después de proguard
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.