1
我的应用使用Jackson。我得到了最小化,构建大多与此配置工作:Jackson + ProGuard:不能反序列化使用自定义解串器的类
# don't obfuscate Jackson classes
-keep class com.fasterxml.** { *; }
# don't strip runtime annotations
-keepattributes RuntimeVisibleAnnotations
# keep members with Jackson annotations
-keepclassmembers public class * {
@com.fasterxml.jackson.annotation.JsonCreator *;
@com.fasterxml.jackson.annotation.JsonProperty *;
}
但最小化版本是仍然无法反序列化使用自定义解串器,又使用一厂一类。工厂,反序列化器和映射器都是由Dagger2生产的。错误是:
com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.mycompany.myapp.c.y]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
at [Source: N/A; line: -1, column: -1]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(Unknown Source)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(Unknown Source)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(Unknown Source)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(Unknown Source)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(Unknown Source)
at com.fasterxml.jackson.databind.ObjectMapper.treeToValue(Unknown Source)
at com.mycompany.myapp.c.x.a(Unknown Source)
at com.mycompany.myapp.c.x.a(Unknown Source)
at com.mycompany.myapp.c.x.deserialize(Unknown Source)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(Unknown Source)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(Unknown Source)
at com.mycompany.myapp.c.ag.d(Unknown Source)
at com.mycompany.myapp.c.ag.a(Unknown Source)
at com.mycompany.myapp.c.at.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4508)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
at dalvik.system.NativeStart.main(Native Method)
错误消息表明我的课没有默认构造函数,它的确如此,因为实例是由自定义解串器使用工厂创建。这在我禁用ProGuard时正常工作。我需要做些什么才能使它与ProGuard协同工作?