NoClassDefFoundError – Eclipse和Android
我遇到了一个问题,试图运行一个Android应用程序,直到第二个外部库添加到其构buildpath,工作正常。 自从添加了scoreninja jar之后,当我尝试运行应用程序时,我现在得到一个NoClassDefFoundError 。
这里是消息:
02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter
由于所有的构build脚本都是由Android工具(?)生成的,我不知道除了清理和重build或重新启动eclipse(我已经尝试了所有三种)之外,还有什么可以做的。 有谁知道我可以如何修改这个?
更新ADT后,我遇到了这个问题。
我将所有的JAR文件存储在名为“lib”的文件夹中,并将jar添加到正常Eclipse方式的构buildpath中。 这工作正常,直到我的更新。
在我的更新之后,我得到了NoClassDefFoundError,我可以清楚地看到它包含在jar中(检查ReferencedLibraries类)。
解决办法是从构buildpath中删除我的jar子,并将我的“lib”文件夹重命名为“libs”。 这是一个ant约定,似乎是新ADT在.apk文件中find并包含库的方式。 一旦我做到了这一切,一切正常。
我没有把jar文件放到assets或者lib文件夹中,只是在Properties – > Java Build Path – >“Order and Export”中勾选了这个jar文件。 )
通过将外部jar添加到构buildpath中,只需将jar添加到您的包中,但在运行时将不可用。
为了使jar在运行时可用,您需要:
- 把jar放在你的
assets
文件夹下 - 在你的构buildpath中包含这个jar的副本
- 转到同一个popup窗口中的导出选项卡
- 选中对新添加的jar的框
我有这个MapActivity。 在Eclipse中生成在debugging器中获得NoClassDefFound。
在<Application>...</Application>
元素内忘记添加库来显示
<uses-library android:name="com.google.android.maps" />
我已经改变了包含项目的顺序(Eclipse / Configure Build Path / Order and Export)。 我已将两个相关项目移至“订单和导出”列表的顶部。 它解决了“NoClassDefFoundError”的问题。
这对我来说很奇怪。 我没有听说包括图书馆和项目的顺序的重要性。 Android + Eclipse很有趣:)
我不确定这是否相关,或者如果你仍然在寻找答案,但是当我试图研究同样的错误(但可能是出于不同的原因)时,我碰到了这个线程。
我找不到任何在线解决scheme,但类似的线程的答案让我思考和意识到,我可能只需要重build(或清理)项目。
在Eclipse中,转到Project => Clean。 select你的项目,Eclipse似乎自己修复它。 对我来说,这解决了这个问题。
希望这可以帮助。
我遇到了同样的问题。 原因是我试图使用的库已经用一个标准的JDK 7编译。
我用-source 1.6 -target 1.6
选项重新编译它,它工作正常。
同样的事情为我工作:属性 – > Java构buildpath – >“订单和导出”有趣的是,为什么这不是自动完成? 我想一些设置是缺less的。 这也发生在SDK升级后。
右键单击你的项目文件夹,在Java构buildpath中查找Properties,并select你看到的jar文件。 它为我工作。
约翰·奥康纳对这个问题是正确的。 问题依然存在,安装ADT 17及以上版本。 find这个链接来修复错误:
http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17
我尝试了这篇文章(和其他一些文章)的所有内容,但这并不适合我,这是迄今为止我遇到的最可怕的ADT升级,而且如果没有ADT备份工作,我将永远无法升级。
我设法解决它通过删除该项目,然后再次使用我有一个源备份添加它。
我和ADT22有同样的错误。 解决了在属性 – > Java构buildpath – >订单和导出中检查“Android专用库”的问题。 如果你正在使用任何图书馆项目,也应该为他们完成。
所有现有的答案不适合我,因为我的情况有点不同。 我花了几个小时才把它工作。 我正在使用Eclipse。
我的Android项目包括另一个正常的Java 1.6项目,需要第三方的jar文件。 诀窍是:
- 在正常的java项目中包含jar以便编译(仅),不要在“Order and Export”选项卡中进行检查
- 也将这个jar文件复制到android项目的“libs”文件夹中,以便在运行时可用
希望这有助于那些像我一样的场景。
有时你必须把整个外部项目作为图书馆,而不仅仅是jar子:
我的问题通过添加整个项目(在我的情况下谷歌播放services_lib)作为库解决,而不仅仅是jar子。 到它的步骤(从@style答案 ):
- >其他文件 – >新build –
- selectAndroid项目
- select“从现有源创build项目”
- 点击“浏览…”button并导航到想要的项目
- 完成(现在工作区中的动作栏项目)
- 右键单击您的项目 – >属性
- 在Android-> Library部分,点击Add
- select最近添加的项目 – >确定
有时候会发生这种情况,因为在你的AndroidManifest.xml文件中没有包含jar,你有依赖关系,在你的AndroidManifest.xml文件中使用“uses-libary”标签。
另外,确保它应该在“应用程序”标签内。
问候,
拉维
我有这个问题,这是由于没有“导出”库造成的。问题只是因为某些类的.class文件在打包APK时不可用。编译时它可以正常工作
在我的情况下,我使用“CusrsorAdapter”类和“JavaBuildPath->命令和导出”我没有检查支持V4 jar.Once它被选中的问题已经消失。
为了确保你得到noClassDefFound错误,因为上述原因,请检查你的logacat,你会在运行时看到未知的超级类错误。
我尝试了各种各样的东西,在我的情况下错误的原因是在Java Build Path-> Libraries中maps.jar和Google Api之间的冲突。 所以,当我删除了maps.jar它工作正常。
问候,
wahib
请确保你的jar文件在你的项目的libs目录中,在你的eclipse中使用了更新的ADT版本。
我得到了完全相同的问题…为了解决这个问题,我刚刚删除了我的Android私人库在“构buildpath”,并单击确定…当我打开op“构buildpath”再次eclipse已经自己添加它们,然后它为我工作;)…
更新ADT后,我花了两天的时间来解决这个问题。 最后我很幸运的得到这个post:
https://code.google.com/p/android/issues/detail?id=55304
这导致我在正确的方向。 当你按照解决scheme – 记得把你的所有项目的Android支持库更换为相同的版本(删除它,并重新安装到项目)。 我希望这有助于 – 祝你好运
如果您想知道哪些解决scheme与哪些文件相关,请查看我发现的内容。 简单地将.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>
replace所有库项目和主android项目中的.classpath文件。 .classpath文件位于eclipse项目的根文件夹中。 因为不要忘了添加你自己的类path条目,所以你应该有任何(所以比较你的当前版本的.classpath)。
我相信这和上面解释的componavt-user(Eclipse / Configure Build Path / Order and Export)中的eclipse菜单是一样的。
这里的解决scheme为我工作。 这是将库导入到libs文件夹,然后修改build.gradle文件,然后用gradlew清理的问题。
如果您更改订单并在项目构buildpath中导出,则不会发生此错误。 实现它的另一种方式是通过.classpath在你的项目文件夹中。
尝试这个:-
步骤1
在Eclipse中添加所有库来构buildpat(意思是让所有库引用库)
第2步
删除R.java文件并重新生成项目。 别担心,R.java会自动重新创build。
寒意:)
据我了解,你的项目显示没有错误,因为你包括jar子。 但是,当您的项目“导出”到设备时,Jar将不会被使用。 尝试这个
项目 – >属性
Java构buildpath/订单和导出
[✔]你的jar子
我经常遇到这种情况。
上次发生的事情我记得是由于将Eclipse ADT(Google特别版)切换到Android Studio而导致的。 我基本上尝试了所有的方法,我可以在stackoverflowfind没有为我工作。
最终,我通过将ADT切换到原始Eclipse(Kepler),再次使应用程序工作(不再有NoCalssDeffoundError)。
实际上你已经达到臭名昭着的64k限制问题,你需要启用multidex。
这是你如何做到的。 https://developer.android.com/tools/building/multidex.html