我有一个非常简单的案例类(Baz),我想使用json4s-native序列化为JSON。 当使用Proguard制作一个安卓apk时,我似乎无法使用它。
序列化时,会发生以下异常:
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: org.json4s.package$MappingException: Can't find ScalaSig for class foo.bar.Baz
at org.json4s.reflect.ScalaSigReader$.findClass(ScalaSigReader.scala:42)
at org.json4s.reflect.ScalaSigReader$.org$json4s$reflect$ScalaSigReader$$read$1(ScalaSigReader.scala:36)
at org.json4s.reflect.ScalaSigReader$.readField(ScalaSigReader.scala:38)
我的proguard配置包含:
-keepclassmembers class * { ** MODULE$; }
-dontoptimize
-dontobfuscate
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
在针对实际代码运行测试用例时,事情按预期工作,但在proguard步骤之后,始终会出现此问题。
任何帮助?
干杯。
答案 0 :(得分:1)
也许这会有所帮助:
“json4s只支持直接在对象中定义的顶级对象或对象”。例如,def中定义的类不起作用。我假设Proguard改变了代码结构。
(对不起,我无法发表评论)