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

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*(); } 
  • Errores de Proguard con jar externo - devuelve el código de error 1
  • La ejecución instantánea no funciona con proguard
  • Error: Error de ejecución para la tarea ': app: transformClassesAndResourcesWithProguardForDebug'
  • ProGuard no funciona con okhttp
  • PerferenceActivity con PreferenceFragment falla en el dispositivo con proguard okay sin proguard
  • Android Studio, ProGuard no puede calcular hash de Classes.jar
  • ¿Es posible usar proguard en el modo de depuración?
  • No se puede generar APK firmado en Android Studio, porque proguard-rules.txt está ausente
  • ¿Cómo verificar los datos de POST se envía desde la aplicación de Android con la firma SHA1 correcta?
  • Proguard: excluir el frasco externo de la biblioteca de la ofuscación
  • ¿Proguard.cfg es necesario para proyectos de biblioteca?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.