NoClassDefFoundError-Eclipse和Android


193

我在尝试运行一个Android应用程序时遇到问题,直到向其构建路径添加第二个外部库为止,它运行良好。由于添加了scoreninja jar,当我尝试运行应用程序时,现在出现了NoClassDefFoundError

这是消息:

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

由于所有的构建脚本都是由Android工具生成的(?),所以我不确定除了清理,重建或重新启动Eclipse外我还能做些什么(我已经尝试了全部三个)。有人知道我该如何修改吗?


1
您是如何添加jar文件的?您是否使用构建路径->库->外部jar添加了?
Teja Kantamneni

1
右键单击项目>构建路径>添加外部存档...,按照此处的说明进行操作:scoreninja.appspot.com
Tom R 2010年

4
如果您最近更新了ADT,请在下面查看John的答案(并对其进行投票!)stackoverflow.com/a/9916751/489852
Atul Goyal 2012年

1
如果您遇到此问题,请在直接进入John的答案之前,以下@Till的答案也适用于很多人,包括我自己。
卡洛斯·P

您尝试过multidex吗?
Ashish Rawat

Answers:


234

更新ADT后出现此问题。

我将所有JAR文件存储在一个名为“ lib”的文件夹中,然后以普通的Eclipse方式将jars添加到构建路径中。在我进行更新之前,这个工作正常。

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

解决方案是从构建路径中删除我的jar,然后将“ lib”文件夹重命名为“ libs”。这是一个蚂蚁惯例,并且似乎是新ADT在.apk文件中查找并包括库的方式。完成此操作后,一切正常。


1
非常感谢!在昨天的ADT更新之前,我既没有lib也没有libs文件夹,并且一切正常。更新后,所有外部jar都有此问题。由于您的回答,这些问题已得到解决。我必须将您的产品与Brian的产品结合使用,以使其正常运行。

谢谢约翰!我将添加到文件夹更改为libs后,我必须重新启动eclipse才能正常工作。
Michaeldcooney 2012年

5
更新ADT后,我遇到了同样的问题,但是我将jars保留在项目外部的目录中,并将其作为用户库包含在构建路径中。解决方案是从我的构建路径中删除用户库,而是使用“添加外部jar”添加jar,然后通过选中“订单和导出”选项卡上的复选框来导出它们。
特拉维斯2012年

1
我将android-support-v13.jar引用为C:\ android-sdk-windows \ extras \ android \ compatibility \ v13的外部库。我将该JAR移到了项目libs文件夹中,并从Java Build Path-> Libraries中删除了该引用。一个干净的构建,我又去了。
Snowwire

你好 我通过在/ libs内添加外部jar库尝试了我们的方法,现在我收到此错误:转换为Dalvik格式失败,错误1
Jonathan

100

我不必将jar库放在资产或库中,而只需在Properties-> Java Build Path->“ Order and Export”中选中该jar的框(它在前面列出,但未选中) )


非常感谢!我已经为这个错误苦苦挣扎了很长时间,我所要做的就是在“订购和出口”屏幕中选中罐子的织补框。有趣的是,我只需要这样做就可以在Nook Tablet模拟器上运行。在设备或其他仿真器上没有问题。
路易斯2012年

5
有谁知道您为什么必须同时做这两个工作,添加库并选中“订购和出口”中的复选框?我为什么要添加一个外部JAR但不将其包括在Order and Export中,是否有原因?
Lou Morda

更新ADT后我遇到了这个问题,这为我解决了。
cdavidyoung 2012年

5
它对我有所帮助,但只有在我完成Project-> Clean
altumano,2012年

谢谢!!救了我。安装Eclipse Juno后必须进行清理并重新启动。
里纳德(Rynardt)

68

通过将外部jar添加到您的构建路径中,只需将jar添加到您的包中,但在运行时将不可用。

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

  • 将罐子放在assets文件夹下
  • 将此jar副本包含在您的构建路径中
  • 转到同一弹出窗口上的导出选项卡
  • 在新添加的罐子上选中复选框

ScoreNinjaAdapter是其他人的代码,但是如果它包含通常使用的错误,我会感到非常惊讶。错误发生在我自己的代码中。
汤姆R 2010年

该错误实际上只是在这里发生:sna = new ScoreNinjaAdapter(this,SN_APP_ID,SN_APP_KEY);
汤姆R 2010年

您是否需要import外部jar文件的声明?我没用过
Anthony Forloney'2

您是否尝试过从文件assests夹方法中删除.jar文件?
Anthony Forloney,2010年

是的 最后,我受够了所有这些,只是下载了源代码并将源文件复制到我的项目中。不是最好的解决方案,但现在可以使用。感谢你的帮助。
汤姆R 2010年

48

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

忘了在<Application>...</Application>元素内部添加要显示的库

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

27

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

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


这也是Bugruport中第二个用户评论中提到的解决方案:code.google.com/p/android/issues/detail?
id=55304

15

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

我无法在线找到任何解决方案,但是对类似主题的回答让我开始思考,并意识到我可能只需要重建(或清理)该项目。

在Eclipse中,转到Project => Clean。选择您的项目,Eclipse似乎可以对其进行修复。对我来说,这解决了问题。

希望这可以帮助。


是的,似乎在Eclipse / ADT / dex /任何地方都存在一个错误,该错误基本上会错过构建中的类。它还可能会漏掉Application导致不同错误的类。
Timmmm 2012年

13

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

我用-source 1.6 -target 1.6选项重新编译了它,效果很好。


谢谢YOUUUUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!!!! 这个问题让我感到沮丧,您解决了!具有讽刺意味的是,即使最新的Jelly Bean 4.3 SDK(API 18)仍无法读取1.7 JAR /类。最糟糕的是,它根本不会抱怨:(
Hendy Irawan 2013年

我遇到了同样的问题。最糟糕的是,我考虑了此选项,然后我将-source 1.7更改为-source 1.5(可以肯定),但问题并未解决。但是,在阅读您的评论后,我再次尝试使用1.6,然后,它像一个魅力一样发挥了作用。
PedroNáñez2014年

7

同样的事情对我有用:属性-> Java构建路径->“订购和出口”有趣的是-为什么不自动完成此操作?我猜缺少一些设置。SDK升级后,这对我也发生了。


3

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



2

我尝试了这篇文章(以及其他一些文章)中的所有内容,但对我没有用,这是迄今为止我所经历的最糟糕的ADT升级,并且如果没有有效的ADT备份,我将永远不会升级。

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


2

我在ADT22上遇到了同样的错误。解决了在属性-> Java构建路径->订购和导出中检查“ Android Private Libraries”的问题。如果您正在使用任何库项目,则也应对它们进行相同的操作。


它也为我工作。我包含了该库,但是忘记了在“订购和出口”中进行检查。谢谢!
jmrodrigg

2

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

我的Android项目包括另一个普通的Java 1.6项目,该项目需要一个3rd party jar文件。诀窍是:

  • 将jar包含在普通Java项目中以进行编译(仅),不要在“ Order and Export”标签中对其进行检查
  • 还将这个jar文件复制到android项目的“ libs”文件夹中,以便在运行时可用

希望这对像我这样有类似情况的人有所帮助。


1

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

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

  1. 文件->新建->其他
  2. 选择Android项目
  3. 选择“从现有来源创建项目”
  4. 单击“浏览...”按钮并导航到所需项目
  5. 完成(工作空间中的现在操作栏项目)
  6. 右键单击您的项目->属性
  7. 在Android->“库”部分中,单击添加
  8. 选择最近添加的项目->确定

1

有时由于AndroidManifest.xml中的“ uses-libary”标签未包含具有依赖关系的jar而会发生这种情况。

另外,确保它应该在“ application”标签内。

问候,

拉维


1

我遇到了这个问题,这是由于未“导出”库引起的。问题仅是因为打包APK时某些类的.class文件不可用。编译时它将正常工作而不会产生异常

以我为例,我使用的是“ CusrsorAdapter”类,在“ JavaBuildPath-> Order and Export”下,我没有检查支持V4的jar。一旦选中,问题就消失了。

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



0

我尝试了各种方法,而导致错误的原因是Java Build Path-> Libraries中的maps.jar和Google Api之间发生冲突。因此,当我删除maps.jar时,它工作正常。

问候,

瓦希卜


0

请确保您的jar文件位于项目的libs目录中,并且您正在将Eclipse与更新的ADT版本一起使用。


0

我遇到了完全相同的问题。要解决此问题,我只是在“构建路径”中删除了我的Android专用库,然后单击“确定” ...当我打开op的“构建路径”时,eclipse又一次将它们自己添加了,然后它对我有用;)...


0

更新ADT后,我花了两天的时间尝试解决此问题。终于我很幸运在这里得到这个帖子:

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

引导我走向正确的方向。当您遵循解决方案时-请记住将所有项目的android支持库替换为相同版本(将其删除并重新安装到项目中)。我希望这会有所帮助-祝你好运


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条目(因此,请与当前版本的.classpath比较)。

我相信这与通过上述componavt-user(Eclipse /配置构建路径/命令和导出)通过eclipse菜单获得的结果相同。


0

这里的解决方案为我工作。只需将库导入libs文件夹,然后修改build.gradle文件,然后使用gradlew进行清理即可。


0

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


0

试试这个:-

第1步

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

第2步

删除R.java文件,然后再次构建项目。不用担心,R.java将自动重新创建。

寒意:)


0

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

项目->属性

Java构建路径/订单和导出

[✔]你的罐子


0

这在我身上经常发生。

我记得的最后一次发生是由于将Eclipse ADT(Google特殊版)切换到Android Studio,然后又切换回原来的原因。我基本上尝试了在stackoverflow上可以找到的所有方法,这些方法对我不起作用。

最终,通过使用ADT将我的IDE切换到原始Eclipse(Kepler),我再次使该应用程序正常工作(不再发生NoCalssDeffoundError)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.