Search code examples
androidjsondeserializationproguardgenson

Genson with Android - Proguard config


I have a problem with proguard config in Android Project. I'm using Genson to parse incoming JSON data. It is fast and there is no need for extra configuration or deserializers, because on the Server-side there is also Genson.

Everything works fine in debug mode, but in release, with proguard it doesn't.

Unfortunately I have some error during runtime:

FATAL EXCEPTION: main
Process: com.es.mobile.meedy, PID: 16650
java.lang.UnsupportedOperationException: Couldn't find parameter at 0 from type interface com.owlike.genson.Converter , you should first locate the parameterized type, expand it and then use typeOf.
    at com.owlike.genson.reflect.TypeUtil.typeOf(Unknown Source)
    at com.owlike.genson.GensonBuilder.withConverters(Unknown Source)
    at com.mypackage.f.k.a(Unknown Source)
    at com.a.a.b.n.a(Unknown Source)
    at com.a.a.i.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5086)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)

It happens even if datamodel is in keep class. I tried all configrations with keep class, classmembers, etc. What else can i do?

EDIT

What else do I know:

  • I tried keep class with all classes in my project.
  • I have keep class with genson (-keep class com.owlike.genson.** { *; })
  • Instanceof with my class shows that it is instance of com.owlike.genson.Converter

Solution

  • The solution to the problem was to add -keepattributes Signature

    If annotations are being used then this option should be enabled too -keepattributes *Annotation*

    Also the application class being ser/de by Genson must also be provided: -keep class com.mypackage.model.** { *; }