【问题标题】:NoClassDefFoundError GsonNoClassDefFoundError Gson
【发布时间】:2013-06-06 05:56:43
【问题描述】:

我的代码已经运行了一年多,在其他地方更改了一些代码后,我没有更改MainActivity 中的任何代码,这是第一种形式。我现在得到这个error: java.lang.reflect.InvocationTargetException,然后在尝试这个时得到java.lang.NoClassDefFoundError: com/google/gson/Gson

   Gson gson = new Gson();

我还有其他使用 Gson 的程序,它们运行良好。我的项目的 libs 文件夹中有 gson-2.2.4。我已经尝试了几个小时阅读所有其他类似的问题,但我被困住了。 猫日志:

06-06 01:47:25.935: I/System.out(4393): debugger has settled (1304)
06-06 01:47:26.120: E/dalvikvm(4393): Could not find class 'com.google.gson.Gson', referenced from method com.comcasystems.routedriver.MainActivity.onCreate
06-06 01:47:26.120: W/dalvikvm(4393): VFY: unable to resolve new-instance 133 (Lcom/google/gson/Gson;) in Lcom/comcasystems/routedriver/MainActivity;
06-06 01:47:26.120: D/dalvikvm(4393): VFY: replacing opcode 0x22 at 0x000b
06-06 01:47:26.120: D/dalvikvm(4393): DexOpt: unable to opt direct call 0x0206 at 0x0d in Lcom/comcasystems/routedriver/MainActivity;.onCreate
06-06 01:47:26.170: E/dalvikvm(4393): Could not find class 'com.google.gson.Gson', referenced from method com.comcasystems.routedriver.MainActivity$1.handleMessage
06-06 01:47:26.170: W/dalvikvm(4393): VFY: unable to resolve new-instance 133 (Lcom/google/gson/Gson;) in Lcom/comcasystems/routedriver/MainActivity$1;
06-06 01:47:26.175: D/dalvikvm(4393): VFY: replacing opcode 0x22 at 0x0024

【问题讨论】:

  • 你保护你的代码了吗?
  • Gson jar 在你的构建路径上吗?
  • 提取 GSON jar 文件,看看是否所有的类都在那里

标签: android eclipse gson


【解决方案1】:

注意您在 Java 构建路径中包含了 Gson 库,并检查是否正确配置了 proguard:

# proguard configuration for Gson
-keepattributes Signature
-keep public class com.google.gson
-keep class sun.misc.Unsafe { *; }

-keep class com.comcasystems.routedriver.jsonclasses.** { *; }

注意:最后一个条目只是 Json 类的符号占位符,可防止它们被混淆。您必须在此处列出所有个受影响的类。

希望这会有所帮助……干杯!

【讨论】:

  • 如果你使用@SerializedName 来标记你的属性,我认为你不需要担心proguard。
  • @Christopher: ...什么可能对正在使用的 Json 类有效。但是,上面还有一些额外的条目。也检查code.google.com/p/google-gson/source/browse/trunk/examples/…
  • 将以上内容添加到 proguard-project.txt 并没有帮助我在第一次上线时得到它。请记住,在我只添加一些活动并重命名某些类之前它确实有效。 dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.comcasystems.routedriver-2.apk]
  • 好的,我明白了,只要您在模拟器中运行应用程序,proguard 无论如何都不会涉及 - 是吗?听起来您的 jar 文件或 Java 构建路径有问题。您是否检查了 dd619* 建议的内容(检查 bin 文件夹中的 APK 文件;只需解压缩它)。可能您将 jar 添加为外部 jar,这需要目标环境默认提供此 jar。
  • 我创建了一个新项目并将我的所有文件复制到新项目中,并将 gson 添加到 libs 文件夹中,它工作正常。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 2012-06-01
  • 2016-02-10
  • 1970-01-01
相关资源
最近更新 更多