我在尝试运行Android应用程序时遇到问题,直到在其构建路径中添加第二个外部库,才能正常运行。由于添加了scoreninja jar,我现在在尝试运行应用程序时得到 NoClassDefFoundError 。
以下是信息:
02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter
由于所有构建脚本都是由Android工具(?)生成的,我不知道除了清理和重建或重启eclipse之外我还能做些什么(我已经尝试了所有这三个)。有谁知道我怎么能修改这个?
答案 0 :(得分:234)
更新ADT后我遇到了这个问题。
我将所有JAR文件存储在名为“lib”的文件夹中,并以正常的Eclipse方式将jar添加到构建路径中。在我更新之前,这很好用。
在我更新之后,我得到了一个我可以清楚地看到包含在jar中的类的NoClassDefFoundError(检查了ReferencedLibraries类)。
解决方案是从构建路径中删除我的jar并将我的“lib”文件夹重命名为“libs”。这是一个蚂蚁约定,似乎是新ADT找到的方式,并在.apk文件中包含库。一旦我这样做,一切正常。
答案 1 :(得分:100)
我没有把jar文件库放在资产或lib中,但只在“属性”中勾选此jar的框 - > Java构建路径 - > “订单和出口”(之前已列出,但未选中)
答案 2 :(得分:68)
通过将外部jar添加到构建路径中,只需将jar添加到包中,但在运行时它将无法使用。
为了让jar在运行时可用,您需要:
assets
文件夹答案 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)
http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17
答案 10 :(得分:2)
所有现有的答案对我都不起作用,因为我的情况有点不同。我花了几个小时才开始工作。我正在使用Eclipse。
我的android项目包含另一个普通的java 1.6项目,需要第三方jar文件。诀窍是:
希望这能帮助那些有类似情景的人。
答案 11 :(得分:2)
我在ADT22上遇到了同样的错误。解决了它检查属性中的“Android私有库” - &gt; Java构建路径 - &gt;订单和出口。如果您正在使用任何库项目,也应该为它们做同样的事情。
答案 12 :(得分:2)
我尝试了这篇文章(以及其他一些帖子)中的所有内容,但它对我没用,这是迄今为止我遇到的最糟糕的ADT升级,如果没有正常的ADT备份,我将永远不会升级。 / p>
我设法通过删除项目来解决它,然后使用我的源备份再次添加它。
答案 13 :(得分:1)
有时您必须将整个外部项目作为库而不仅仅是jar:
我的问题通过将整个项目(在我的情况下是google-play-services_lib)添加为库而不仅仅是jar来解决。它的步骤(来自@style answer):
答案 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