ADT 和 SDK 工具更新到 v17 后的 Gson NoClassDefFoundError

Posted

技术标签:

【中文标题】ADT 和 SDK 工具更新到 v17 后的 Gson NoClassDefFoundError【英文标题】:Gson NoClassDefFoundError after ADT and SDK Tools update to v17 【发布时间】:2012-04-06 22:04:10 【问题描述】:

今天我将我的 ADT 和 SDK 工具更新到 v17,我的项目使用 Google 的 gson jar 库开始抛出 NoClassDefFoundError。 这是 logcat 的输出:

> 03-22 12:30:58.941: E/androidRuntime(21672): FATAL EXCEPTION: main
> 03-22 12:30:58.941: E/AndroidRuntime(21672):
> java.lang.NoClassDefFoundError: com.google.gson.Gson 03-22
> 12:30:58.941: E/AndroidRuntime(21672):    at
> com.matriksdata.conn.XRequestHandler.connect(XRequestHandler.java:35)
> 03-22 12:30:58.941: E/AndroidRuntime(21672):    at
> com.matriksdata.conn.XRequestHandler.makeRequest(XRequestHandler.java:
> 29) 03-22 12:30:58.941: E/AndroidRuntime(21672):    at
> com.matriksdata.bavul.XBaseWithConnectionActivity.makeRequest(XBaseWithConnectionActivity.java:
> 46) 03-22 12:30:58.941: E/AndroidRuntime(21672):    at
> com.matriksdata.ui.login.SplashScreenActivity.onCreate(SplashScreenActivity.java:
> 36) 03-22 12:30:58.941: E/AndroidRuntime(21672):    at
> android.app.Activity.performCreate(Activity.java:4465) 03-22
> 12:30:58.941: E/AndroidRuntime(21672):    at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:
> 1049) 03-22 12:30:58.941: E/AndroidRuntime(21672):    at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:
> 1919) 03-22 12:30:58.941: E/AndroidRuntime(21672):    at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:
> 1980) 03-22 12:30:58.941: E/AndroidRuntime(21672):    at
> android.app.ActivityThread.access$600(ActivityThread.java:122) 03-22
> 12:30:58.941: E/AndroidRuntime(21672):    at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
> 03-22 12:30:58.941: E/AndroidRuntime(21672):    at
> android.os.Handler.dispatchMessage(Handler.java:99) 03-22
> 12:30:58.941: E/AndroidRuntime(21672):    at
> android.os.Looper.loop(Looper.java:137) 03-22 12:30:58.941:
> E/AndroidRuntime(21672):    at
> android.app.ActivityThread.main(ActivityThread.java:4340) 03-22
> 12:30:58.941: E/AndroidRuntime(21672):    at
> java.lang.reflect.Method.invokeNative(Native Method) 03-22
> 12:30:58.941: E/AndroidRuntime(21672):    at
> java.lang.reflect.Method.invoke(Method.java:511) 03-22 12:30:58.941:
> E/AndroidRuntime(21672):    at com.android.internal.os.ZygoteInit
> $MethodAndArgsCaller.run(ZygoteInit.java:784) 03-22 12:30:58.941:
> E/AndroidRuntime(21672):    at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 03-22
> 12:30:58.941: E/AndroidRuntime(21672):    at
> dalvik.system.NativeStart.main(Native Method)

有什么想法吗?

【问题讨论】:

您是否尝试过从 Eclipse 中清理项目? 【参考方案1】:

我今天遇到了类似的问题。

这为我解决了问题:

从构建路径中删除所有 Android 库项目和外部 jar。 在您的项目中创建一个名为“libs”的文件夹。 将所有外部 .jar 文件放在该文件夹中,ADT 现在应该将它们放在“Android 依赖项”下。 以正常方式重新导入您之前的所有 Android 库项目。

问题是在使用属性 - Java 构建路径 - 添加外部 Jar 时,默认情况下外部 jar 不会放在“libs”文件夹中,而是放在“引用库”而不是“Android 依赖项”下,这会导致NoClassDefFoundError。

请查看Dealing with dependencies in Android projects了解更多详情。

【讨论】:

能否请您扩展您的帖子,解释如何使用此配置链接 sourcesjavadoc 对于这个报告的问题,在 cmets 中有一些“操作方法”修复源和 javadocs:Link【参考方案2】:
    右键单击项目,然后选择属性 转到 Java 构建路径顺序和导出。 勾选“Android 私有库” 点击项目,清理

【讨论】:

它帮助了我并节省了我很多时间 谢谢,这是唯一对我有帮助的事情【参考方案3】:

对于 SDK 工具 17,您需要按照建议 here 将库项目的文件夹从“lib”重命名为“libs”。 也看看this。

【讨论】:

【参考方案4】:

这个网站有对我有用的最简单的解决方案,在“订购和导出”下选中图书馆的复选框。

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

【讨论】:

这为我修复了它,但我不得不重新启动 eclipse,而不是“清理”项目。 @CQM,感谢您的评论,对我来说重新启动 Eclipse 也有效,而清理项目却没有。【参考方案5】:

我在博客中创建了一篇快速帖子,解释如何解决这些问题。它与库以及他们对 Eclipse 现在管理库的方式所做的更改有关。如果需要,可以在这里查看:http://xrigau.wordpress.com/2012/03/22/fix-some-problems-with-libraries-in-the-adt-17-plugin-10/

【讨论】:

【参考方案6】:

查看订单并选择

Project->Properties->Java build path->Order and Export:

订购和选择:

select Google APIs (optional)
select Dependencies
select Android Private Libraries
[-] src
[-] gen

在标签库中:

依赖项 私有库('libs' 目录中的 jars) 其他

为我工作!

【讨论】:

【参考方案7】:

在构建路径中检查您的 gson 库。也许 gson libraty 是不可访问的。

【讨论】:

【参考方案8】:

这是由 Google 的 Android Devs 提供的官方链接。 如果您在之后遇到 NoClassDefFoundException,请阅读本文 更新插件和/或 SDK

https://plus.google.com/115995639636688350464/posts/38o8ZA6xQK4

【讨论】:

【参考方案9】:

下载 GSON jar 并制作为类路径

【讨论】:

【参考方案10】:

我在一个库项目中使用 GSON,所以要解决这个问题,除了在构建路径上添加 GSON jar,我需要在我的库项目清单中声明它,如下所示:

<uses-library android:name="com.google.gson" />

【讨论】:

以上是关于ADT 和 SDK 工具更新到 v17 后的 Gson NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章

将 Android ADT 工具从 21.0.1 更新到 21.1.0

如何解决Eclipse更新ADT或者更新SDK的问题

更新sdk后出现eclipse adt错误[重复]

在 SDK/ADT 更新后 Android 库依赖关系被破坏

ADT 更新后的 ClassNotFoundException

此 Android SDK 需要 ADT 版本 23.0.0 或更高版本。当前版本是 22.6。请更新 ADT 到最新版本? [复制]