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.
- Traducción no captada SimException: dx.rop.cst.CstInterfaceMethodRef no se puede convertir en com.android.dx.rop.cst.CstMethodRef (Proguard)
- ¿Cómo invertir el ingeniero / descompilar un APK Android que se ofuscó con ProGuard?
- Nombre de clase obfuscated personalizado en proguard
- Proguard busca los números de línea que faltan
- Android Studio excluye clase o archivo de jar
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 se puede corregir Android Proguard Devuelto con error error de código 1
- Usar Proguard sólo para deshabilitar el registro y para reducir recursos
- Cómo ocultar clases públicas en la biblioteca Jar usando ProGuard (o cualquier otra forma)?
- Dependencia de Gradle que causa error "Número mágico inválido"
- AssertionError en Gson EnumTypeAdapter cuando se utiliza Proguard Obfuscation
- ¿Cómo generar proguard-android.txt automáticamente?
- Cómo decir Proguard para ofuscar nombres de clase
- Proguard Nota para la clase desconocida 'Objeto' con Android Studio y Gradle
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*(); }
- Android Studio: Importación de proyecto al proyecto existente
- EditText con una sola línea de texto, la línea de envolver y Hecho la acción?