找不到适用于类的ScalaSig-具有Scala + Proguard的json4s用于Android应用 [英] Can't find ScalaSig for class - json4s with scala + proguard for an android app

查看:95
本文介绍了找不到适用于类的ScalaSig-具有Scala + Proguard的json4s用于Android应用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个非常简单的案例类(Baz),我想使用json4s-native序列化为JSON. 使用Proguard制作android apk时,我似乎根本无法使它正常工作.

I have a very simple case class (Baz) that I want to serialise to JSON using json4s-native. I cannot seem to get this to work at all, when using Proguard to make an android apk.

序列化时,发生以下异常:

When serialising, the following exception occurs:

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配置包含:

My proguard config contains:

-keepclassmembers class * { ** MODULE$; }
-dontoptimize
-dontobfuscate
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

针对实际代码运行测试用例时,事情可以按预期工作,但是在执行proguard步骤之后,始终会出现此问题.

Things work as expected when running test cases against actual code, but after the proguard step, this problem always occurs.

有帮助吗?

干杯.

推荐答案

也许有帮助:

json4s仅支持顶级对象或直接在对象中定义的对象.例如,在def中定义的类不起作用.我认为Proguard会更改代码结构.

"Only top level objects or objects defined directly in an object are supported" by json4s. For example classes defined inside a def don't work. I assume Proguard changes the code structure.

(对不起,我无法发表评论)

(sorry I can't comment)

这篇关于找不到适用于类的ScalaSig-具有Scala + Proguard的json4s用于Android应用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆