外部.jar文件的Android Eclipse NoClassDefFoundError

时间:2012-03-23 03:00:05

标签: android eclipse adt

我遇到了一个奇怪的错误。我有一个使用外部库的Android项目,特别是:

  • android-support-v4.jar(适用于Android 1.6中的Fragment支持)
  • GoogleAdMobAdsSdk-4.3.1.jar(适用于广告)

该项目运行正常,直到我更新了插件的某些方面(由于我没有过多关注它而无法回忆具体细节),之后,每当我尝试使用上述.jar文件中的任何类时(或者它的任何子类,甚至是我定义的子类),我会得到一个java.lang.NoClassDefFoundError。经过多次搜索后我找不到答案,所以我真的很难过。

我认为这个问题与我的IDE设置方式有关,而且与实际代码没什么关系,所以除非绝对必要,否则我不会发帖。

7 个答案:

答案 0 :(得分:35)

您需要阅读此内容 - Dealing with dependencies in Android projects

此链接也很有用 - ClassDefNotFoundError with ADT 17

基本上,创建一个名为libs的文件夹,并将所有jar个文件放在里面。最近的更新将自动为您处理剩下的事情。您不再需要编辑路径了。

答案 1 :(得分:7)

Android到目前为止还不支持Java1.7。使用合规级别1.7构建的Jars无法在Android应用程序中使用。在导出jar文件之前,使用合规性级别5.0或6.0重建Java项目。

我通过谷歌发现这篇文章,上面的答案并没有解决我的问题。希望我所说的对别人有所帮助。

答案 2 :(得分:7)

如果您在升级到 ADT 22 后看到NoClassDefFoundError,请在Eclipse中尝试:

  • 转到项目属性 Java构建路径订购和导出选项卡。
  • 检查 Android私有库选项。

Android Private Libraries option

答案 3 :(得分:1)

同时向其他已更新为r17且具有许多依赖关系的人发出警告。我在构建路径上有另一个引用的项目,并且在遵循此r17问题上的所有指示后仍然无法正常工作。

一小时后发现,我引用的项目使用的是外部Jar的旧版本而不是我的主项目。在尝试编译主项目时,由于这个jar版本的差异,Eclipse会放弃,我从来没有注意到Console中的警告消息。

解决方案是将较新版本的外部jar文件复制到引用项目的libs目录。

哇 - 这样的生产力杀手......

答案 4 :(得分:0)

我今天也遇到了这个错误,因为更新到 Android SDK,r17 。 @aneal指出的链接没有讨论的是如何处理外部运行时库(例如在其自己的标题下导入的那些 - 而不是导入的用户库)。

解决此问题的最简单方法是更改​​构建路径中的构建顺序。只需右键单击您的项目,然后选择 Properties 。从这里,选择 Java Build Path 。在显示屏的顶部,选择标签订单并导出,然后在 Android X 上方移动 GoogleAdMobAdsSdk-4.3.1.jar (将x替换为你正在使用的版本)。接下来,清理您的项目并运行它。你应该好好去!

答案 5 :(得分:0)

我解决它的方法是:右键单击项目并选择构建路径。在显示的选项中选择配置构建路径。之后,查看库中是否存在库,然后选择订单和导出选项卡,然后选择所有jar文件。然后选择确定并运行您的项目。

答案 6 :(得分:0)

如果您正在使用Eclipse与Maven IDE(m2e),请转到“Java Build Path”,然后选择“Order and Export”,最后检查项目“Maven Dependencies”并将其下拉到列表的BOTTOM。您应该在同一工作区中对项目引用执行相同的操作。 每次我在新计算机中设置项目时都会发生。