2013-02-01 89 views
0

我想在Android项目中使用Json4s。我的项目编译等,但我看到了以下错误:NoClassDefFoundError在Android项目中的包私人Scala对象

W/dalvikvm(24527): VFY: unable to find class referenced in signature (Lcom/thoughtworks/paranamer/CachingParanamer;) I/dalvikvm(24527): Could not find method com.thoughtworks.paranamer.CachingParanamer.lookupParameterNames, referenced from method org.json4s.Meta$ParanamerReader$.lookupParameterNames W/dalvikvm(24527): VFY: unable to resolve virtual method 11: Lcom/thoughtworks/paranamer/CachingParanamer;.lookupParameterNames (Ljava/lang/reflect/AccessibleObject;)[Ljava/lang/String; D/dalvikvm(24527): VFY: replacing opcode 0x6e at 0x0008 E/dalvikvm(24527): Could not find class 'com.thoughtworks.paranamer.CachingParanamer', referenced from method org.json4s.Meta$. W/dalvikvm(24527): VFY: unable to resolve new-instance 15 (Lcom/thoughtworks/paranamer/CachingParanamer;) in Lorg/json4s/Meta$; D/dalvikvm(24527): VFY: replacing opcode 0x22 at 0x0013 W/dalvikvm(24527): VFY: unable to find class referenced in signature (Lcom/thoughtworks/paranamer/CachingParanamer;) D/dalvikvm(24527): DexOpt: unable to opt direct call 0x0009 at 0x17 in Lorg/json4s/Meta$;. D/dalvikvm(24527): DexOpt: unable to opt direct call 0x000a at 0x1a in Lorg/json4s/Meta$;. W/dalvikvm(24527): Exception Ljava/lang/NoClassDefFoundError; thrown while initializing Lorg/json4s/Meta$; W/System.err(24527): java.lang.ExceptionInInitializerError W/System.err(24527): at org.json4s.Extraction$.mkMapping$1(Extraction.scala:207) W/System.err(24527): at org.json4s.Extraction$.org$json4s$Extraction$$extract0(Extraction.scala:214) W/System.err(24527): at org.json4s.Extraction$.extract(Extraction.scala:47) W/System.err(24527): at org.json4s.ExtractableJsonAstNode.extract(ExtractableJsonAstNode.scala:21) W/System.err(24527): at models.Metadata$$anon$1.(Metadata.scala:21) W/System.err(24527): at models.Metadata$.fromJson(Metadata.scala:20) W/System.err(24527): at my.last.attempt.MainActivity.doStuff(MainActivity.scala:55) W/System.err(24527): at my.last.attempt.MainActivity.onCreate(MainActivity.scala:18) W/System.err(24527): at android.app.Activity.performCreate(Activity.java:5048) W/System.err(24527): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) W/System.err(24527): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052) W/System.err(24527): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113) W/System.err(24527): at android.app.ActivityThread.access$700(ActivityThread.java:139) W/System.err(24527): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224) W/System.err(24527): at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err(24527): at android.os.Looper.loop(Looper.java:137) W/System.err(24527): at android.app.ActivityThread.main(ActivityThread.java:4918) W/System.err(24527): at java.lang.reflect.Method.invokeNative(Native Method) W/System.err(24527): at java.lang.reflect.Method.invoke(Method.java:511) W/System.err(24527): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) W/System.err(24527): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) W/System.err(24527): at dalvik.system.NativeStart.main(Native Method) W/System.err(24527): Caused by: java.lang.NoClassDefFoundError: com.thoughtworks.paranamer.CachingParanamer W/System.err(24527): at org.json4s.Meta$.(Meta.scala:93) W/System.err(24527): at org.json4s.Meta$.(Meta.scala) W/System.err(24527): ... 22 more I/dalvikvm(24527): Rejecting re-init on previously-failed class Lorg/json4s/Meta$; v=0x0 D/AndroidRuntime(24527): Shutting down VM W/dalvikvm(24527): threadid=1: thread exiting with uncaught exception (group=0x40dc0438) E/AndroidRuntime(24527): FATAL EXCEPTION: main E/AndroidRuntime(24527): java.lang.NoClassDefFoundError: org/json4s/Meta$ E/AndroidRuntime(24527): at org.json4s.Extraction$.mkMapping$1(Extraction.scala:207) E/AndroidRuntime(24527): at org.json4s.Extraction$.org$json4s$Extraction$$extract0(Extraction.scala:214) E/AndroidRuntime(24527): at org.json4s.Extraction$.extract(Extraction.scala:47) E/AndroidRuntime(24527): at org.json4s.ExtractableJsonAstNode.extract(ExtractableJsonAstNode.scala:21) E/AndroidRuntime(24527): at my.last.attempt.MainActivity.onCreate(MainActivity.scala:44) E/AndroidRuntime(24527): at android.app.Activity.performCreate(Activity.java:5048) E/AndroidRuntime(24527): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) E/AndroidRuntime(24527): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052) E/AndroidRuntime(24527): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113) E/AndroidRuntime(24527): at android.app.ActivityThread.access$700(ActivityThread.java:139) E/AndroidRuntime(24527): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224) E/AndroidRuntime(24527): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(24527): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(24527): at android.app.ActivityThread.main(ActivityThread.java:4918) E/AndroidRuntime(24527): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(24527): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(24527): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) E/AndroidRuntime(24527): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) E/AndroidRuntime(24527): at dalvik.system.NativeStart.main(Native Method)

我不知道是否有与dalvikvm问题具体或只是一个proguard相关问题。如果是相关的,Json4s.Meta来源是这样的:

package org.json4s 

import java.lang.reflect.{Constructor => JConstructor, Field, Type, ParameterizedType, GenericArrayType} 
import java.util.Date 
import java.sql.Timestamp 
import com.thoughtworks.paranamer.{ParameterNamesNotFoundException, BytecodeReadingParanamer, CachingParanamer} 
import scalashim._ 

case class TypeInfo(clazz: Class[_], parameterizedType: Option[ParameterizedType]) 

trait ParameterNameReader { 
    def lookupParameterNames(constructor: JConstructor[_]): Traversable[String] 
} 

private[json4s] object Meta { 
    import com.thoughtworks.paranamer._ 

由一堆case类其次,等

我如何能解决这个问题的任何想法如何?

回答

0

看起来代码中缺少类com.thoughtworks.paranamer.CachingParanamer。这可能是因为它从图书馆开始就缺失,或者因为ProGuard删除或重命名了它(错误?)。

在前一种情况下,您应该确保所有必需的库都存在于libs目录中。 ProGuard应该抱怨如果输入中看不到任何类别。

在后一种情况下,您应该确保您在Android SDK内部使用最新版本的ProGuard(此时为4.8或4.9beta)。如果没有帮助,你可以尝试明确保护类:

-keep class com.thoughtworks.paranamer.CachingParanamer 

这不可能是一个妥善的解决办法,因为ProGuard的确实应该算出来给你。