杰克逊 未识别属性异常 - 保护缩小错误配置



调试构建类型工作正常,但生产(带有 proguard 和缩小)会抛出异常

Caused by com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "timestamp" (class com.two_two.checkreaction.models.firebase.FireComplexResult), not marked as ignorable (0 known properties: ])
 at [Source: java.io.StringReader@42256aa8; line: 1, column: 27] (through reference chain: com.two_two.checkreaction.models.firebase.FireComplexResult["timestamp"])
       at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)
       at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708)
       at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160)
       at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315)
   at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
   at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
   at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)
   at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183)
   at com.firebase.ui.FirebaseListAdapter.getView(FirebaseListAdapter.java:130)
   at android.widget.AbsListView.obtainView(AbsListView.java:2338)
   at android.widget.ListView.makeAndAddView(ListView.java:1812)

Firebase 的 Proguard 部分如下

# Basic ProGuard rules for Firebase Android SDK 2.0.0+
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keep class com.two_two.checkreaction.models.firebase.FireComplexResult
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**
# Firebase-UI
#-keepnames class com.firebase.ui.** { *; }
#-keep class com.firebase.ui.** { *; }
-dontwarn com.firebase.ui.**

更新:

   -keep class com.two_two.checkreaction.models.firebase.** { *; } 

解决了问题。但我不想保留包,我只想保留一个类。

我在使用 Firebase 的应用程序中抛出了类似的异常。通过将我的 POJO 移动到一个包中并排除该包不被此 proguard 规则混淆来解决它

-keepnames class com.my.package.beans.** { *; }

最新更新