1

我在 Android 项目中的 proguard 配置有问题。我正在使用 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)

即使数据模型在保持类中也会发生。我尝试了所有配置与保持类、类成员等。我还能做什么?

编辑

我还知道什么:

  • 我尝试在我的项目中保留所有课程。
  • 我跟 genson 上课(-keep class com.owlike.genson.** { *; })
  • 我的班级的 Instanceof 表明它是 com.owlike.genson.Converter 的实例
4

2 回答 2

1

该问题的解决方案是添加 -keepattributes 签名

如果正在使用注释,那么这个选项也应该被启用 -keepattributes *Annotation*

此外,还必须提供 Genson 的 ser/de 应用程序类:-keep class com.mypackage.model.** { *; }

于 2014-12-09T12:05:50.160 回答
0
-keep class com.owlike.genson.*{ *; }  

将该行添加到您的 ProGuard 配置中。

-keep [,modifier,...] class_specification
指定要保留为代码入口点的类和类成员(字段和方法)。例如,为了保留应用程序,您可以指定主类及其主方法。为了处理库,您应该指定所有可公开访问的元素。

于 2014-12-08T17:01:21.847 回答