Genson с Android - Конфигурация Proguard

У меня проблема с конфигурацией proguard в Android Project. Я использую Genson для анализа входящих данных JSON. Это быстро и не требует дополнительной настройки или десериализации, потому что на стороне сервера также есть Genson.

Все отлично работает в режиме отладки, но в выпуске с Proguard это не так.

К сожалению, у меня есть некоторые ошибки во время выполнения:

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)

Это случается, даже если модель данных находится в классе обслуживания. Я перепробовал все настройки с помощью keep class, classmembers и т. Д. Что еще я могу сделать?

РЕДАКТИРОВАТЬ

Что еще я знаю:

  • Я пытался держать класс со всеми классами в моем проекте.
  • У меня есть класс с Дженсоном (класс -компонента com.owlike.genson.** { *; })
  • Экземпляр моего класса показывает, что это экземпляр com.owlike.genson.Converter.

2 ответа

Решение

Решением проблемы было добавление подписи -keepattributes.

Если используются аннотации, этот параметр также должен быть включен -keepattributes *Annotation*

Также должен быть предоставлен класс приложения ser/de от Genson: -keep class com.mypackage.model.** { *; }

-keep class com.owlike.genson.*{ *; }  

Добавьте эту строку в вашу конфигурацию ProGuard.

-keep [, модификатор,...] class_specification
Указывает классы и члены класса (поля и методы), которые должны быть сохранены в качестве точек входа в ваш код. Например, чтобы сохранить приложение, вы можете указать основной класс вместе с его основным методом. Чтобы обработать библиотеку, вы должны указать все общедоступные элементы.

Другие вопросы по тегам