Проблема с Android Proguard Jackson (сериализатор не найден)

#android #jackson #proguard

#Android #джексон #proguard

Вопрос:

При включении Proguard в моем проекте у меня возникает следующая ошибка:

 com.fasterxml.jackson.databind.JsonMappingException: 
No serializer found for class com.myapp.service.MyRequest and no properties discovered to create BeanSerializer 
(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) 
 

Все работает нормально, когда я отключаю proguard (minifyEnabled false)

build.gradle:

    compileSdkVersion 26
   minSdkVersion 19
   targetSdkVersion 26 

   buildTypes {
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
 

proguard-rules.pro:

 # Jackson
-keep @com.fasterxml.jackson.annotation.JsonIgnoreProperties class * { *; }
-keep class com.fasterxml.** { *; }
-keep class org.codehaus.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepclassmembers public final enum com.fasterxml.jackson.annotation.JsonAutoDetect$Visibility {
    public static final com.fasterxml.jackson.annotation.JsonAutoDetect$Visibility *;
}
 

Ответ №1:

Я решаю проблему, добавляя это в proguard-rules.pro:

 -keep public class your.class.** {
    public void set*(***);
    public *** get*();
}
 

Ответ №2:

Я столкнулся с подобной проблемой. Я мог бы решить ее с помощью keepclasseswithmembers

 -keepclasseswithmembers class com.example.ClassName
 

У меня также был пакет, в котором многие классы сериализованы и десериализованы. В этом случае я исключил этот пакет из запутывания

 -keep class com.example.package.** { *; }