找不到类的 ScalaSig - json4s with scala + proguard for an android app

Posted

技术标签:

【中文标题】找不到类的 ScalaSig - json4s with scala + proguard for an android app【英文标题】:Can't find ScalaSig for class - json4s with scala + proguard for an android app 【发布时间】:2015-02-22 15:35:30 【问题描述】:

我有一个非常简单的案例类 (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 步骤之后,总是会出现此问题。

有什么帮助吗?

干杯。

【问题讨论】:

【参考方案1】:

也许这会有所帮助:

“仅支持***对象或直接在对象中定义的对象”由 json4s.例如,定义在 def 中的类不起作用。我假设 Proguard 改变了代码结构。

(对不起,我无法评论)

【讨论】:

案例类已经是***对象。我也尝试将它们放在一个对象中,但这没有帮助。 我也有同样的问题,而且 proguard 似乎不遵守一些 scala 约定

以上是关于找不到类的 ScalaSig - json4s with scala + proguard for an android app的主要内容,如果未能解决你的问题,请参考以下文章

修复 IntelliJ IDEA 中 Cucumber 6.8.1运行找不到类的问题

“找不到类'XMLWriter'” php 中的错误| php55w-xml-5.5.24-1.w6.x86_64.rpm 丢失

android studio导jar包找不到类的解决方法

InvalidDefinitionException:找不到内部类的序列化程序

找不到案例类的 JsonWriter 或 JsonFormat 类型类

关于如何修复错误“找不到名为 viewcontroller 的类的任何信息”的建议