2013-02-01 39 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的確實應該算出來給你。