2

json4s-native を使用して JSON にシリアル化したい非常に単純なケース クラス (Baz) があります。Proguardを使用してAndroid 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)

私のプロガード構成には以下が含まれます:

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

実際のコードに対してテスト ケースを実行すると期待どおりに動作しますが、proguard ステップの後には常にこの問題が発生します。

何か助けはありますか?

乾杯。

4

1 に答える 1

1

たぶんこれが役立ちます:

「トップレベルのオブジェクトまたはオブジェクトで直接定義されたオブジェクトのみがサポートされています」 json4s. たとえば、定義内で定義されたクラスは機能しません。Proguard がコード構造を変更すると仮定します。

(コメントできなくてすみません)

于 2014-12-24T17:49:52.003 に答える