2017-04-26 3 views
1

J'utilise Retrofit 2.1.0 avec Jackson 2.8.6 parser. Mais si Pro Guard est activé, cela ne fonctionne pas.Après activation de l'analyseur Pro Guard Jackson ne fonctionne pas

Exeption dans le journal:

D/EXAMPLE_PROJ: Class com.example.network.d.b.a.m$a has no default (no arg) constructor 
at [Source: [email protected]; line: 1, column: 1] 

Versions lib Mon gradle:

dependencies { 
    def supportLibraryVersion = "25.3.1" 
    def retrofitVersion = "2.1.0" 
    def playService = '10.2.0' 
    def jacksonVersion = "2.8.6" 

Mes règles de garde pro pour la modernisation et jackson:

# Retrofit2 
-dontwarn okio.** 
-dontwarn retrofit2.Platform$Java8 

# Jackson 
-keepnames class com.fasterxml.jackson.** { *; } 
-dontwarn com.fasterxml.jackson.databind.** 
-dontwarn org.codehaus.jackson.** 
-dontwarn javax.xml.** 
-dontwarn javax.xml.stream.events.** 
-keep class org.codehaus.** { *; } 
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility { 
public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; } 

-keepclassmembers class * { 
    @com.fasterxml.jackson.annotation.JsonCreator *; 
    @com.fasterxml.jackson.annotation.JsonProperty *; 
} 
-keepnames class com.fasterxml.jackson.** { *; } 

Je serai heureux de toute aide!

Répondre

1

Turning Out Solution est très simple dans ce cas. Le problème est que Proguard supprime mes constructeurs vides dans les classes réseau.

1), je l'a ajouté à proguard-rules.pro:

-keep public class com.example.network.** 

2) a également ajouté @Keep anotation sous vide par défaut constructeur:

@Keep 
public MyClass(){ 
//do not delete 
}