Search code examples
javaandroidjacksonproguardandroid-proguard

jackson UnrecognizedPropertyException - proguard minification misconfig


Debug buildtype works fine, but production (with proguard and minification) throw an Exception

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)

Proguard section for Firebase is the following

# 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.**

Update:

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

solves the problem. But I don't want to keep package, I want to keep just one class.


Solution

  • I had a similar exception thrown in my application that uses Firebase. Solved it by moving my POJOs into a package and exclude that package from being obfuscated with this proguard rule

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