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*(); } 
  • Uso de Spongycastle con Proguard
  • Proguard no funciona cuando se exporta con el complemento Eclipse ADT R19
  • Archivo proguard obsoleto; Usar -contienen a los miembros en vez de -contemplarlosconmiembros
  • Minify la aplicación para Android, pero no la ofusque
  • ¿Cómo mantener los nombres de métodos de clase que anulan \ implementa otro método de ser ofuscado?
  • Android Studio 1.0 'runProguard' vs 'minifyEnabled'
  • Android 'Conversión a formato dalvik falló con error 1' y proguard
  • Proguard no puede encontrar la clase referenciada com.google.ads.internal.state.AdState
  • Eclipse exportado apk
  • ¿Cómo funciona Proguard en Intellij Idea?
  • PerferenceActivity con PreferenceFragment falla en el dispositivo con proguard okay sin proguard
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.