2016-07-07 18 views
0

zu analysieren Ich habe Proguard aktiviert und richtige Proguard Regeln für alle Bibliotheken, die ich verwende.Nach dem Anwenden von Proguard, Jackson überspringen, um JSON Antwort mit Root

Ich verwende Retrofit für Netzwerkanrufe und Jackson Converter für Parsing-Antworten.

Meine JSON-Antworten haben root -Werte, um dies mit Jackson zu analysieren verwende ich SerializationFeature.WRAP_ROOT_VALUE und DeserializationFeature.UNWRAP_ROOT_VALUE. Alles funktionierte, bis ich Proguard anwendete.

Ohne Angabe von Parsing-Ausnahmen werden die Felder als Nullwerte analysiert.

Die Proguard Regeln, die ich für Jackson verwende sind

-keepnames class com.fasterxml.jackson.** { *; } 

-dontwarn com.fasterxml.jackson.databind.* 

-keepattributes *Annotation*,EnclosingMethod,Signature 

-keep class org.codehaus.** { *; } 

-keepclassmembers public final enum 
org.codehaus.jackson.annotate.JsonAutoDetect$Visibility { 
    public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; 
} 

-keepclasseswithmembers class com.jombay.vger.rx.resources.** { 
    public protected private <init>(...); 
    public void set(*); 
    public ** get*(); 
} 

-keepclasseswithmembers public class com.jombay.vger.retrofit.resources.** { 
    public protected private <init>(...); 
    public void set(*); 
    public ** get*(); 
} 

-keepclasseswithmembers public class com.jombay.vger.utils.** { 
    public protected private <init>(...); 
} 

-keepclassmembers class * { 
@org.codehaus.jackson.annotate.* *; 
} 

-keep class com.fasterxml.jackson.databind.ObjectMapper {*;} 

-keep class com.fasterxml.jackson.databind.ObjectWriter {*;} 

Ich habe nach der Lösung viele andere Probleme mit dieser Konfiguration kommen.

Nicht in der Lage zu debuggen und das Problem hier zu verstehen.

Antwort

0

In Ihrer Konfiguration, um Ihre Domain-Klassen zu behalten, fehlen Ihnen einige Platzhalter. Anstelle dieser

-keepclasseswithmembers class com.jombay.vger.rx.resources.** { 
    public protected private <init>(...); 
    public void set(*); 
    public ** get*(); 
} 

sollte es vielmehr sein:

-keepclasseswithmembers class com.jombay.vger.rx.resources.** { 
    <init>(...); 
    public void set*(***); 
    public *** get*(); 
} 
+0

@ t-Neidhart: Dank arbeitete viel es wie ein Zauber –