0

我正在尝试在 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/lang/reflect/AccessibleObject;)[Ljava/lang /细绳; D/dalvikvm(24527):VFY:在 0x0008 处替换操作码 0x6e E/dalvikvm(24527):找不到类 'com.thoughtworks.paranamer.CachingParanamer',引用自方法 org.json4s.Meta$。W/dalvikvm(24527): VFY: 无法解析 Lorg/json4s/Meta$ 中的新实例 15 (Lcom/thoughtworks/paranamer/CachingParanamer;);D/dalvikvm(24527):VFY:在 0x0013 W/dalvikvm(24527) 处替换操作码 0x22:VFY:无法找到签名中引用的类 (Lcom/thoughtworks/paranamer/CachingParanamer;) D/dalvikvm(24527):DexOpt:无法在 Lorg 的 0x17 处选择直接调用 0x0009 /json4s/元$;。D/dalvikvm(24527):DexOpt:无法在 Lorg/json4s/Meta$ 的 0x1a 处选择直接调用 0x000a;。W/dalvikvm(24527):异常 Ljava/lang/NoClassDefFoundError;初始化 Lorg/json4s/Meta$ 时抛出;W/System.err(24527): java.lang.ExceptionInInitializerError W/System.err(24527): 在 org.json4s.Extraction$.mkMapping$1(Extraction.scala:207) W/System.err(24527): 在org.json4s.Extraction$.org$json4s$Extraction$$extract0(Extraction.scala:214) W/System.err(24527):在 org.json4s.Extraction$.extract(Extraction.scala:47) W/System .err(24527):在 org.json4s.ExtractableJsonAstNode。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/Meta$ 上拒绝重新初始化;v = 0x0 D / AndroidRuntime(24527):关闭VM W / dalvikvm(24527):threadid = 1:线程退出未捕获的异常(组= 0x40dc0438)E / AndroidRuntime(24527):致命异常:主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 .

我不确定 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._

其次是一堆案例类等。

关于如何解决这个问题的任何想法?

4

1 回答 1

0

代码中似乎com.thoughtworks.paranamer.CachingParanamer缺少该类。这可能是因为它从一开始就从库中丢失,或者因为 ProGuard 已将其删除或重命名(错误地?)。

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

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

-keep class com.thoughtworks.paranamer.CachingParanamer

这不太可能是一个合适的解决方案,因为 ProGuard 确实应该为您解决这个问题。

于 2013-02-01T23:48:20.147 回答