我试图在Android项目中使用Json4s。我的项目编译等,但我看到以下错误:
W / dalvikvm(24527):VFY:无法找到签名中引用的类 (Lcom / thoughtworks / paranamer / CachingParanamer;)I / dalvikvm(24527): 找不到方法 com.thoughtworks.paranamer.CachingParanamer.lookupParameterNames, 从方法中引用 org.json4s.Meta $ ParanamerReader $ .lookupParameterNames W / dalvikvm(24527):VFY:无法解析虚方法11: LCOM / ThoughtWorks的/ paranamer / CachingParanamer; .lookupParameterNames (Ljava /郎/反映/的AccessibleObject;)[Ljava /郎/字符串; D / dalvikvm(24527):VFY:将操作码0x6e替换为0x0008 E / dalvikvm(24527):找不到上课 ' com.thoughtworks.paranamer.CachingParanamer',从方法引用 org.json4s.Meta $。 W / dalvikvm(24527):VFY:无法解决 新实例15(Lcom / thoughtworks / paranamer / CachingParanamer;)in Lorg / json4s /元$; D / dalvikvm(24527):VFY:替换操作码0x22 at 0x0013 W / dalvikvm(24527):VFY:无法找到引用的类 签名(Lcom / thoughtworks / paranamer / CachingParanamer;) D / dalvikvm(24527):DexOpt:无法选择在0x17处直接调用0x0009 Lorg / json4s /元$ ;. D / dalvikvm(24527):DexOpt:无法选择 在Lorg / json4s / Meta $;中直接调用0x000a在0x1a。 W / dalvikvm(24527):异常Ljava / lang / NoClassDefFoundError;抛出 初始化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 $提取$$ 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): 在models.Metadata $ .fromJson(Metadata.scala:20)W / System.err(24527): 在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):在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 方法)W / System.err(24527):at java.lang.reflect.Method.invoke(Method.java:511)W / System.err(24527): 在 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):引起: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 更多I / dalvikvm(24527):在先前失败的类上拒绝重新初始化 Lorg / json4s /元$; v = 0x0 D / AndroidRuntime(24527):关闭VM W / dalvikvm(24527):threadid = 1:线程退出未捕获的异常 (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 $提取$$ 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):在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 方法)
我不确定dalvikvm是否存在问题,或者只是一个问题。如果相关,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._
其次是一堆案例类等。
有关如何解决此问题的想法吗?
答案 0 :(得分:0)
看起来代码中缺少类com.thoughtworks.paranamer.CachingParanamer
。这可能是因为库中缺少它,或者因为ProGuard已经删除或重命名它(错误地?)。
在前一种情况下,您应该确保libs目录中存在所有必需的库。如果输入中似乎缺少任何类,ProGuard应该抱怨。
在后一种情况下,您应确保在Android SDK中使用最新版本的ProGuard(此时为4.8或4.9beta)。如果这没有帮助,您可以尝试明确地保留该类:
-keep class com.thoughtworks.paranamer.CachingParanamer
这不太可能是一个合适的解决方案,因为ProGuard真的应该为你解决这个问题。