NoClassDefFoundError - Eclipse 和 Android
Posted
技术标签:
【中文标题】NoClassDefFoundError - Eclipse 和 Android【英文标题】:NoClassDefFoundError - Eclipse and Android 【发布时间】:2011-01-15 22:06:38 【问题描述】:我在尝试运行 android 应用程序时遇到问题,直到将第二个外部库添加到其构建路径之前,该应用程序运行良好。添加 scoreninja jar 后,我现在在尝试运行应用程序时收到 NoClassDefFoundError。
这是消息:
02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter
由于所有构建脚本都是由 Android 工具 (?) 生成的,我不确定除了清理和重建或重新启动 eclipse 之外我还能做什么(我已经尝试了所有三个)。有谁知道我该如何修改这个?
【问题讨论】:
你是如何添加jar文件的?您是否使用构建路径添加 -> 库 -> 外部 jars?? 右键单击项目>构建路径>添加外部档案...按照此处的说明:scoreninja.appspot.com 如果您最近更新了 ADT,请查看下面 John 的答案(并点赞!)***.com/a/9916751/489852 如果您遇到此问题,在您直接进入 John 的回答之前,@Till 下面的回答也为很多人解决了这个问题,包括我自己。 你尝试过multidex吗? 【参考方案1】:实际上你已经达到了臭名昭著的 64k 限制问题,你需要启用 multidex。
这就是你的做法。 https://developer.android.com/tools/building/multidex.html
【讨论】:
【参考方案2】:我遇到了这个问题,它是由于没有“导出”库引起的。问题只是因为打包 APK 时某些类的 .class 文件不可用。编译时它可以在不导出的情况下正常工作
就我而言,我使用的是“CursorAdapter”类,并且在“JavaBuildPath->Order and Export”下我没有检查支持 V4 jar。一旦选择它,问题就消失了。
为确保您因上述原因收到 noClassDefFound 错误,请检查您的 logacat,您将在运行时看到未知的超类错误。
【讨论】:
【参考方案3】:有时会发生这种情况,因为您的 AndroidManifest.xml 中没有包含您所依赖的 jar,带有“uses-libary”标签。
另外,请确保它应该在“应用程序”标签内。
问候,
拉维
【讨论】:
【参考方案4】:所有现有的答案都对我不起作用,因为我的情况有点不同。我花了几个小时才让它工作。我正在使用 Eclipse。
我的 android 项目包括另一个普通的 java 1.6 项目,它需要一个 3rd 方 jar 文件。诀窍是:
将 jar 包含在普通 java 项目中以供编译(仅),不要在“订购和导出”选项卡中检查它 还要将此 jar 文件复制到 android 项目的“libs”文件夹中,以便在运行时使用希望这能帮助那些和我有类似情况的人。
【讨论】:
【参考方案5】:这在我身上经常发生。
我记得上一次发生的事情是由于将 Eclipse ADT(Google 特别版)切换到 Android Studio 并切换回来造成的。我基本上尝试了所有可以在 *** 上找到但对我不起作用的方法。
最终,通过将我的 IDE 切换到带有 ADT 的原始 Eclipse (Kepler),我让应用程序再次运行(不再有 NoCalssDeffoundError)。
【讨论】:
【参考方案6】:据我了解,您的项目没有显示错误,因为您包含了 Jar。但是,当您的项目“导出”到设备时,不会使用 Jar。 试试这个
项目 -> 属性
Java 构建路径/顺序和导出
[✔] 你的罐子
【讨论】:
【参考方案7】:试试这个:-
第一步
在 Eclipse 中添加所有构建 pat 的库(意味着使所有库都引用库)
第 2 步
删除 R.java 文件并重新构建项目。不用担心,R.java 会自动重新创建。
冷静:)
【讨论】:
【参考方案8】:如果您在项目构建路径中更改顺序并导出,则不会出现此错误。 实现它的另一种方法是通过项目文件夹中的 .classpath 。
【讨论】:
【参考方案9】:我有这个用于 MapActivity。在 Eclipse 中构建在调试器中获得 NoClassDefFound。
忘记将库添加到清单中,在 <Application>...</Application>
元素内
<uses-library android:name="com.google.android.maps" />
【讨论】:
【参考方案10】:我在使用 ADT22 时遇到了同样的错误。解决了在属性 -> Java 构建路径 -> 订购和导出中检查“Android 私有库”的问题。如果您正在使用任何库项目,也应该为它们做同样的事情。
【讨论】:
它也对我有用。我包含了该库,但忘记在“订购和导出”中检查它。谢谢!【参考方案11】:我尝试了这篇文章(以及其他一些文章)中的所有内容,但它对我没有用,这是迄今为止我经历过的最糟糕的 ADT 升级,如果没有有效的 ADT 备份,我将永远不会升级。
我设法通过删除项目来解决它,然后使用我拥有的源备份再次添加它。
【讨论】:
【参考方案12】:解决方案here 对我有用。就是将库导入libs文件夹,然后修改build.gradle文件,然后用gradlew清理。
【讨论】:
【参考方案13】:如果您想知道解决方法与哪些文件相关,这就是我发现的。简单地将 .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 进行比较)。
我相信这与上面解释的 componavt-user (Eclipse / Configure Build Path / Order and Export)通过 eclipse 菜单的结果相同。
【讨论】:
【参考方案14】:我在更新 ADT 后花了两天时间试图解决这个问题。最后我很幸运在这里得到了这篇文章:
https://code.google.com/p/android/issues/detail?id=55304
这使我朝着正确的方向前进。当您遵循解决方案时 - 请记住将所有项目的 android 支持库替换为相同版本(将其删除并重新安装到项目中)。我希望这会有所帮助 - 祝你好运
【讨论】:
【参考方案15】:有时您必须将整个外部项目作为库,而不仅仅是 jar:
我的问题通过将整个项目(在我的情况下为 google-play-services_lib)添加为库而不仅仅是 jar 来解决。到它的步骤(来自@style answer):
-
文件->新建->其他
选择 Android 项目
选择“从现有源创建项目”
单击“浏览...”按钮并导航到
想要的项目
完成(现在您的工作区中的操作栏项目)
右键单击您的项目 -> 属性
在 Android->Library 部分点击添加
选择最近添加的项目 -> 好的
【讨论】:
【参考方案16】:我遇到了完全相同的问题...要解决它,我只是在“构建路径”中删除了我的 Android 私有库并单击“确定”...当我再次打开“构建路径”时,Eclipse 通过再次自己,然后它对我有用;)...
【讨论】:
【参考方案17】:请确保您的 jar 文件位于项目的 libs 目录中,因为您在 Eclipse 中使用了较新的 ADT 版本。
【讨论】:
【参考方案18】:约翰·奥康纳在这个问题上是对的。问题在于安装 ADT 17 及更高版本。找到此链接以修复错误:
http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17
【讨论】:
【参考方案19】:我也遇到了同样的问题。原因是我尝试使用的库是使用标准 JDK 7 编译的。
我用-source 1.6 -target 1.6
选项重新编译了它,它运行良好。
【讨论】:
谢谢你UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!!!!!!!!!!!!!!!!!!!我对这个问题感到沮丧,你解决了它!有点讽刺的是,即使是最新的 Jelly Bean 4.3 SDK (API 18) 仍然无法读取 1.7 JAR/classes。最糟糕的是,它根本没有抱怨:( 我遇到了同样的问题。最糟糕的是,我在这个选项中进行了思考,然后我将 -source 1.7 更改为 -source 1.5(可以肯定)并且问题没有解决。但是,在阅读了您的评论后,我再次尝试了 1.6,然后,它就像一个魅力。【参考方案20】:右键单击您的项目文件夹,在 Java 构建路径中查找属性并选择您看到的 jar 文件。它对我有用。
【讨论】:
【参考方案21】:同样的事情对我有用:属性 -> Java 构建路径 -> “订单和导出” 有趣的是 - 为什么这不是自动完成的? 我想某些设置丢失了。在 SDK 升级后,这也发生在我身上。
【讨论】:
【参考方案22】:我不必将 jar-library 放在 assets 或 lib(s) 中,而只需在 Properties -> Java Build Path -> "Order and Export" 中勾选此 jar 的框(之前已列出,但未选中)
【讨论】:
非常感谢!我已经为这个错误苦苦挣扎了很长时间,我需要做的就是在“订购和导出”屏幕中检查 jar 的该死框。有趣的是,我只需要这样做,它就可以在 Nook 平板电脑模拟器上运行。在设备或其他模拟器上没有问题。 有谁知道为什么你必须同时做这两件事,添加库并选中订购和导出中的复选框?我想添加一个外部 JAR 但不将其包含在 Order 和 Export 中是否有原因? 我在更新 ADT 后遇到了这个问题,这为我解决了。 它帮助了我,但只有在我做了 Project -> Clean 谢谢!!救了我。安装 Eclipse Juno 后必须进行清理并重新启动。【参考方案23】:我在更新 ADT 后遇到了这个问题。
我将所有 JAR 文件存储在一个名为“lib”的文件夹中,并以正常的 Eclipse 方式将 jars 添加到构建路径中。在我更新之前,这一切正常。
更新后,我得到了一个类的 NoClassDefFoundError,我可以清楚地看到它包含在 jar 中(查看 ReferencedLibraries 类)。
解决方案是从构建路径中删除我的 jar,并将我的“lib”文件夹重命名为“libs”。这是一个 ant 约定,似乎是新 ADT 在 .apk 文件中查找和包含库的方式。完成此操作后,一切正常。
【讨论】:
非常感谢!在昨天的 ADT 更新之前,我既没有 lib 也没有 libs 文件夹,一切正常。更新后,所有外部jar都有这个问题。由于您的回答,它们已得到修复。我必须把你的和布赖恩的结合起来才能让它发挥作用。 谢谢约翰!我将在将文件夹更改为 libs 后添加,我必须重新启动 eclipse 才能工作。 我在更新 ADT 后遇到了同样的问题,但我将我的 jar 保存在我的项目外部的目录中,并将它们作为用户库包含在我的构建路径中。解决方案是从我的构建路径中删除用户库,而是使用“添加外部罐子”包含罐子,然后通过选中“订购和导出”选项卡上的复选框将它们导出。 我在 C:\android-sdk-windows\extras\android\compatibility\v13 引用 android-support-v13.jar 作为外部库。我将该 JAR 移到项目 libs 文件夹中,并从 Java Build Path -> Libraries 中删除了引用。一个干净的构建,我又去了。 嗨。我通过在 /libs 中添加外部 jar 库来尝试我们的方法,现在我收到此错误:Conversion to Dalvik format failed with error 1【参考方案24】:我尝试了各种方法,我的错误原因是 Java Build Path-> Libraries 中的 maps.jar 和 Google Api 之间的冲突。所以,当我删除 maps.jar 它工作正常。
问候,
瓦希布
【讨论】:
【参考方案25】:我已更改包含项目的顺序(Eclipse / 配置构建路径 / 顺序和导出)。我已将我的两个依赖项目移至“订购和导出”列表的顶部。它解决了“NoClassDefFoundError”的问题。
这对我来说很奇怪。我没有听说过包含的库和项目的顺序的重要性。 Android + Eclipse 很有趣:)
【讨论】:
这也是bugruport中第二个用户评论这里提到的解决方案:code.google.com/p/android/issues/detail?id=55304【参考方案26】:我不确定这是否相关,或者您是否仍在寻找答案,但我在尝试研究相同的错误时遇到了这个线程(但可能出于不同的原因)。
我在网上找不到任何解决方案,但类似线程上的答案让我思考并意识到我可能只需要重建(或清理)项目。
在 Eclipse 中,转到 Project => Clean。选择您的项目,Eclipse 似乎自己修复了它。对我来说,这解决了问题。
希望这会有所帮助。
【讨论】:
是的,Eclipse/ADT/dex/whatever 中似乎有一个错误,基本上错过了构建中的类。它还可能错过Application
类,从而导致不同的错误。【参考方案27】:
通过将外部 jar 添加到您的构建路径中,只需将 jar 添加到您的包中,但在运行时将不可用。
为了使 jar 在运行时可用,您需要:
把jar放到你的assets
文件夹下
在构建路径中包含此 jar 副本
转到同一弹出窗口中的导出选项卡
根据新添加的 jar 勾选复选框
【讨论】:
ScoreNinjaAdapter 是别人的代码,但如果它包含这样的错误,我会感到非常惊讶,因为它是常用的。错误发生在我自己的代码中。 错误就在这里发生:sna = new ScoreNinjaAdapter(this, SN_APP_ID, SN_APP_KEY); 是否需要import
声明外部 jar 文件?我从未使用过它们。
您是否尝试过从assests
文件夹中删除 .jar 文件的方法?
是的。最后,我厌倦了这一切,只是下载了源代码并将源文件复制到我的项目中。不是最好的解决方案,但它现在有效。感谢您的所有帮助。以上是关于NoClassDefFoundError - Eclipse 和 Android的主要内容,如果未能解决你的问题,请参考以下文章
Androidx 迁移:NoClassDefFoundError
毕业:java.lang.NoClassDefFoundError