NoClassDefFoundError - Eclipse和Android

时间:2010-02-11 21:52:21

标签: java android eclipse ant build

我在尝试运行Android应用程序时遇到问题,直到在其构建路径中添加第二个外部库,才能正常运行。由于添加了scoreninja jar,我现在在尝试运行应用程序时得到 NoClassDefFoundError

以下是信息:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

由于所有构建脚本都是由Android工具(?)生成的,我不知道除了清理和重建或重启eclipse之外我还能做些什么(我已经尝试了所有这三个)。有谁知道我怎么能修改这个?

27 个答案:

答案 0 :(得分:234)

更新ADT后我遇到了这个问题。

我将所有JAR文件存储在名为“lib”的文件夹中,并以正常的Ec​​lipse方式将jar添加到构建路径中。在我更新之前,这很好用。

在我更新之后,我得到了一个我可以清楚地看到包含在jar中的类的NoClassDefFoundError(检查了ReferencedLibraries类)。

解决方案是从构建路径中删除我的jar并将我的“lib”文件夹重命名为“libs”。这是一个蚂蚁约定,似乎是新ADT找到的方式,并在.apk文件中包含库。一旦我这样做,一切正常。

答案 1 :(得分:100)

我没有把jar文件库放在资产或lib中,但只在“属性”中勾选此jar的框 - > Java构建路径 - > “订单和出口”(之前已列出,但未选中)

答案 2 :(得分:68)

通过将外部jar添加到构建路径中,只需将jar添加到包中,但在运行时它将无法使用。

为了让jar在运行时可用,您需要:

  • 将jar放在assets文件夹
  • 在构建路径中包含此jar副本
  • 转到同一弹出窗口中的导出标签
  • 选中新添加的jar

答案 3 :(得分:48)

我有这个用于MapActivity。 Eclipse中的构建在调试器中获得NoClassDefFound。

忘记将库添加到清单<Application>...</Application>元素

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

答案 4 :(得分:27)

我更改了包含项目的顺序(Eclipse /配置构建路径/订单和导出)。我已将我的两个依赖项目移到“订单和导出”列表的顶部。它解决了“NoClassDefFoundError”问题。

对我来说很奇怪。我没有听说包含的图书馆和项目的顺序的重要性。 Android + Eclipse很有趣:)

答案 5 :(得分:15)

我不确定这是否相关,或者你是否还在寻找答案,但我在尝试研究同样的错误时遇到了这个问题(但可能出于不同的原因)。

我在网上找不到任何解决方案,但在类似线程上的回答让我思考并意识到我可能只需要重建(或清理)项目。

在Eclipse中,转到Project =&gt;清洁。选择你的项目,Eclipse似乎自己修复它。对我来说,这解决了这个问题。

希望这有帮助。

答案 6 :(得分:13)

我遇到了同样的问题。原因是我尝试使用的库已经使用标准JDK 7编译。

我使用-source 1.6 -target 1.6选项重新编译它,它运行正常。

答案 7 :(得分:7)

同样的事情对我有用:属性 - &gt; Java构建路径 - &gt; “订单和出口” 有趣的是 - 为什么这不是自动完成的? 我想有些设置缺失了。 SDK升级后也发生了这种情况。

答案 8 :(得分:3)

右键单击项目文件夹,在Java构建路径中查找“属性”,然后选择您看到的jar文件。它对我有用。

答案 9 :(得分:3)

约翰奥康纳对此问题是正确的。安装ADT 17及以上版本时仍存在问题。找到此链接以修复错误:

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

答案 10 :(得分:2)

所有现有的答案对我都不起作用,因为我的情况有点不同。我花了几个小时才开始工作。我正在使用Eclipse。

我的android项目包含另一个普通的java 1.6项目,需要第三方jar文件。诀窍是:

  • 在正常的java项目中包含jar以供它编译(仅限),不要在“Order and Export”选项卡中检查它
  • 还将此jar文件复制到android项目的“libs”文件夹中,以便它在运行时可用

希望这能帮助那些有类似情景的人。

答案 11 :(得分:2)

我在ADT22上遇到了同样的错误。解决了它检查属性中的“Android私有库” - &gt; Java构建路径 - &gt;订单和出口。如果您正在使用任何库项目,也应该为它们做同样的事情。

答案 12 :(得分:2)

我尝试了这篇文章(以及其他一些帖子)中的所有内容,但它对我没用,这是迄今为止我遇到的最糟糕的ADT升级,如果没有正常的ADT备份,我将永远不会升级。 / p>

我设法通过删除项目来解决它,然后使用我的源备份再次添加它。

答案 13 :(得分:1)

有时您必须将整个外部项目作为库而不仅仅是jar:

我的问题通过将整个项目(在我的情况下是google-play-services_lib)添加为库而不仅仅是jar来解决。它的步骤(来自@style answer):

  1. 文件&GT;新建 - &gt;其他
  2. 选择Android项目
  3. 选择“从现有来源创建项目”
  4. 点击“浏览...”按钮,然后导航至 想要的项目
  5. 完成(现在工作区中的操作栏项目)
  6. 右键点击您的项目 - &gt;特性
  7. 在Android-&gt;图书馆部分,点击添加
  8. 选择最近添加的项目 - &gt;确定

答案 14 :(得分:1)

我有这个问题,这是由于没有&#34;导出&#34; library.Issue只是因为在打包APK时,某些类的.class文件不可用。编译时它可以正常工作而无法进行展示

就我而言,我正在使用&#34; CusrsorAdapter&#34; class&under&#34; JavaBuildPath-&gt; Order and Export&#34;我没有检查支持V4 jar。一旦它被选中,问题就消失了。

为了确保您因为上述原因而收到noClassDefFound错误,请检查您的logacat,您将在运行时看到未知的超类错误。

答案 15 :(得分:1)

有时它会发生,因为不包括jar,你有依赖,&#34; uses-libary&#34; AndroidManifest.xml中的标记。

另外,确保它应该在内部&#34;应用程序&#34;标签

此致

拉​​维

答案 16 :(得分:0)

解决方案here为我工作。这是将库导入libs文件夹,然后修改build.gradle文件然后使用gradlew进行清理的问题。

答案 17 :(得分:0)

如果您想知道解决方法与哪些文件相关,这就是我找到的内容。将.classpath文件简单地更改为

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

替换所有库项目和主android项目中的.classpath文件。 .classpath文件位于eclipse项目的根文件夹中。原因是不要忘记添加自己的类路径条目,如果你有任何(因此与你当前版本的.classpath比较)。

我认为这与通过eclipse菜单进行的结果相同,就像上面介绍的componavt-user(Eclipse / Configure Build Path / Order and Export)。

答案 18 :(得分:0)

我花了两天时间尝试在更新ADT后解决此问题。最后我很幸运能在这里得到这篇文章:

https://code.google.com/p/android/issues/detail?id=55304

这使我朝着正确的方向前进。当你按照解决方案 - 记得将所有项目的android支持库替换为相同的版本(删除它并将其重新安装到项目中)。我希望这会有所帮助 - 祝你好运

答案 19 :(得分:0)

如果您在项目构建路径中更改订单并导出,则不会发生此错误。 实现它的另一种方法是通过项目文件夹中的.classpath。

答案 20 :(得分:0)

试试这个: -

第1步

添加所有库以在Eclipse中构建pat(意味着使所有库引用库)

第2步

删除R.java文件并再次构建项目。别担心,R.java会自动重新创建。

寒意:)

答案 21 :(得分:0)

据我了解,您的项目没有显示任何错误,因为您包含了Jar。但是,当您的项目“导出”到设备时,将不会使用Jar。 试试这个

项目 - &gt;特性

Java构建路径/订单和导出

[✔]你的罐子

答案 22 :(得分:0)

这种情况经常发生在我身上。

上次发生这种情况我记得是因为将Eclipse ADT(Google特别版)切换到Android Studio并切换回来。我基本上尝试了所有可以在stackoverflow上找到的方法,这些方法对我来说都不起作用。

最后,我通过ADT将IDE切换到原始Eclipse(Kepler),让应用程序再次运行(不再是NoCalssDeffoundError)。

答案 23 :(得分:0)

我遇到了完全相同的问题...为了解决这个问题,我刚刚在“构建路径”中删除了我的Android私有Libs并点击了确定...当我再次打开op“构建路径”时,eclipse已经添加了它们再次,然后它对我有用;)...

答案 24 :(得分:0)

请确保您的jar文件位于项目的libs目录中,而您正在使用更新的ADT版本与您的eclipse。

答案 25 :(得分:0)

我尝试了各种各样的事情,我的案例中出错的原因是在Java Build Path中的maps.jar和Google Api之间存在冲突 - &gt;库。所以,当我删除maps.jar时它工作正常。

此致

wahib

答案 26 :(得分:0)

实际上你已经达到臭名昭着的64k限制问题,你需要启用multidex。

这是你如何做到的。 https://developer.android.com/tools/building/multidex.html