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: オペコード 0x6e を 0x0008 に置き換えます W/dalvikvm(24527): VFY: Lorg/json4s/Meta$ で新しいインスタンス 15 (Lcom/thoughtworks/paranamer/CachingParanamer;) を解決できません。D/dalvikvm(24527): VFY: オペコード 0x22 を 0x0013 に置き換える W/dalvikvm(24527): VFY: 署名で参照されているクラスが見つかりません (Lcom/thoughtworks/paranamer/CachingParanamer;) D/dalvikvm(24527): DexOpt: Lorg の 0x17 で直接呼び出し 0x0009 を選択できません/json4s/Meta$;. 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): 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): org.json4s.Extraction$.extract(Extraction.scala:47) で.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: キャッチされない例外で終了するスレッド (group=0x40dc0438) E/AndroidRuntime(24527): 致命的な例外: 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 .

特に 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._

その後に一連のケースクラスなどが続きます。

この問題を解決する方法についてのアイデアはありますか?

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 に答える