#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.** { *; }