Android Proguard Jackson 问题(未找到序列化程序)
Android Proguard Jackson Problem (No serializer found)
我在项目中启用 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 *;
}
我把这个添加到 proguard-rules.pro:
解决了这个问题
-keep public class your.class.** {
public void set*(***);
public *** get*();
}
我遇到了类似的问题。我可以使用 keepclasseswithmembers
来解决它
-keepclasseswithmembers class com.example.ClassName
我还有一个包,其中许多 类 被序列化和反序列化。在这种情况下,我已经从混淆中排除了这个包
-keep class com.example.package.** { *; }
我在项目中启用 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 *;
}
我把这个添加到 proguard-rules.pro:
解决了这个问题-keep public class your.class.** {
public void set*(***);
public *** get*();
}
我遇到了类似的问题。我可以使用 keepclasseswithmembers
-keepclasseswithmembers class com.example.ClassName
我还有一个包,其中许多 类 被序列化和反序列化。在这种情况下,我已经从混淆中排除了这个包
-keep class com.example.package.** { *; }