Java Android外部库项目上的NoClassDefFoundError

Java Android外部库项目上的NoClassDefFoundError,java,android,eclipse,android-library,Java,Android,Eclipse,Android Library,我使用eclipse进行Google Android开发 我创建了一个库项目([x]在Android设置中是library),其中包括一个外部jar文件(引用的库)。此库项目在另一个项目(将使用库项目的实际项目)中引用。这是通过在Android设置下添加项目来完成的 源代码可以编译,但是如果我想在设备上执行它,我会得到一个类的NoClassDefFoundError,该类位于库项目中包含的jar文件中 编辑:jar文件添加到导出的条目中([x]my.jar在库项目的订单和导出-选项卡上) 有没有

我使用eclipse进行Google Android开发

我创建了一个库项目(
[x]在Android设置中是library
),其中包括一个外部jar文件(引用的库)。此库项目在另一个项目(将使用库项目的实际项目)中引用。这是通过在Android设置下添加项目来完成的

源代码可以编译,但是如果我想在设备上执行它,我会得到一个类的NoClassDefFoundError,该类位于库项目中包含的jar文件中

编辑:jar文件添加到导出的条目中(
[x]my.jar
在库项目的
订单和导出
-选项卡上)


有没有一种干净的方法可以让它正常工作?

官方API中已经明确说明:

库项目可以包括一个JAR库

您可以开发本身包含JAR库的库项目,但是您需要手动编辑依赖应用程序项目的构建路径并向JAR文件添加路径

jar库必须手动添加到依赖于的应用程序项目的构建路径中,而不仅仅是库项目构建路径本身

从SDK r17更新:

这由ADT自动处理,请查看ADT 17.0.0版本的新功能:

添加了自动设置JAR依赖项的功能。/libs文件夹中的任何.jar文件都会添加到构建配置中(类似于Ant构建系统的工作方式)。此外,库项目所需的.jar文件也会自动添加到依赖于这些库项目的项目中。()


我升级到ADT17时遇到了一个小问题,我的LIB没有正确导入。原来这是因为我的库是作为依赖项从我的库文件夹而不是库链接的


似乎从现在起,库必须位于libs文件夹中

转到
项目属性->构建路径->库

如果您看到这样的jar文件

snmp4j.jar - e:\software\jars
这可能是你的问题

在项目中添加libs文件夹,并在该文件夹中复制jar文件。右键单击jar文件并转到
构建路径->添加到构建路径
。然后你就可以看到你的罐子

snmp4j.jar  - project_name/libs 

这对我很有用。

对于那些遵循这些步骤(甚至在“Order and Export”中检查项目)并且在API 17中仍然存在java.lang.ClassNotFoundException的人,最后一步是检查编译器是否使用java 1.7运行。如果是1.7,那么所有项目都应该将其更改为1.6。之后,它将要求重建所有项目,并在我的手机上成功运行:)


要在eclipse中更改java编译版本,请访问:Project properties>java Compiler>Compiler Compliance level:1.6

另一个需要注意的事项是库包名称

如果您使用的是ADT21,并且碰巧有具有相同包名的库,那么在编译过程中会出现错误,但它仍将在Eclipse中编译和运行,从而提供缺少某些资源类的APK。因此,运行应用程序时会发生崩溃

如果您使用ANT编译它,那么您可以看到编译错误,即两个或多个库使用相同的包名

要解决此问题,请使用Android工具->重命名应用程序包重命名库项目。然后一切都会恢复正常


我花了几乎一整天的时间才弄明白这一点。

我有两个项目使用同一个库:一个在工作,另一个在java.lang.NoClassDefFoundError中崩溃。 在没有其他帮助后,我查看了项目根目录中的文件
project.properties
。 工作项目有
android.library.reference
行(下面的最后一行),崩溃项目没有:

# Project target.
target=android-17
android.library.reference.1=../my-library-project
我手动添加了该行,它开始工作! (是的,我试过(项目)属性——java构建路径——项目和(项目)属性——java构建路径——顺序和导出——都没有用。)


PS顺便说一下,“项目属性”还有“项目参考”选项卡。不知道它是否能工作。

我有一个类似的问题,这里没有解决方案

短版本:JAR是用Java
1.7
编译的,Dalvik找不到

我们构建了一个内部JAR,与Maven共享后端和移动客户端。问题是JAR是用Java1.7编译的。Androids dalvik仅支持Java1.5和1.6。这就是为什么在Eclipse中一切都可以正常工作的原因,因为目前还没有编译成dalvik

我们甚至需要使用Java1.6进行编译。这不起作用,因为构建机器上只安装了JDK1.7。Maven页面底部的一个小提示给了我们提示:
note:仅仅设置target选项并不能保证您的代码在具有指定版本的JRE上实际运行。


若要查看是否也存在此问题,请将
*.jar
文件重命名为
*.zip
解压,并在
MANIFEST.MF
文件中查找
Build Jdk:
参数,以查看编译jar的实际Java版本。

是否确定未找到的类位于引用的jar中?jar在java SE中引用的常规java类有很多问题,但不像某些javax和所有lava.beans类那样在Dalvik中。如果jar在jar中,您是否已将jar添加到导出的项目中?@kostja:是的,我已修改了我的问题。我也有同样的问题。更多细节:这意味着使用jar文件的库项目的主项目也必须在Java构建路径中包含jar文件,并在Order和Export选项卡中打勾。。。我花了相当长的时间来添加项目和jar文件,但都无济于事。。build OK但运行时NoClassDefFoundException我们为什么要