Android的外部库项目没有classdeffoundererror



我使用eclipse进行Google Android开发。

我已经创建了一个库项目(android设置中的[x] Is Library),其中包括一个外部jar文件(参考库)。这个库项目在另一个项目中被引用(实际的项目将使用库项目)。这是通过在Android-settings下添加项目来完成的。

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

Edit:添加到导出条目的jar文件列表([x] my.jar在库项目的Order and Export -选项卡上)

是否有一种干净的方法来让它工作?

这在官方API中已经明确说明了:

库项目可以包含JAR库

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

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

从SDK r17更新:

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

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

对于那些遵循步骤(甚至检查"Order and Export"中的项目)并且在API 17中仍然有Java .lang. classnotfoundexception的人来说,最后一步是检查您的编译器是否不能在Java 1.7中运行。如果是1.7,那么你应该在所有项目中将其改为1.6。之后,它会要求重建所有项目,并成功运行在我的手机上:)

要更改eclipse中的java编译版本,这位于:项目属性> java编译器>编译器遵从级别:1.6

转到project properties -> build path-> libraies

如果你看到你的jar文件是这样的

snmp4j.jar - e:softwarejars

可能是你的问题

在项目中添加libs文件夹并复制该文件夹中的jar文件。右键单击jar file并选择build path -> add to build path。然后你可以看到你的jar为

snmp4j.jar  - project_name/libs 

这对我有用。

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

# Project target.
target=android-17
android.library.reference.1=../my-library-project

我手动添加行,它开始工作!(是的,我确实尝试了(项目)属性—java构建路径—项目(项目)属性—java构建路径—命令和导出—没有任何帮助。)

PS顺便说一下,"项目属性"也有"项目参考"选项卡。不知道会不会成功。

当我升级到ADT17时,我遇到了一个小问题,我的库没有被正确导入。事实证明,这是因为我的库被链接为依赖从我的lib文件夹而不是lib !

似乎库必须在libs文件夹从现在

我有一个类似的问题和非解决方案在这里修复它。

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

我们构建了一个内部JAR,通过Maven在后端和移动客户端之间共享。最终的问题是JAR是用Java 1.7编译的。android dalvik只支持Java 1.5和1.6。这就是为什么在Eclipse中一切都很好,因为它还没有被编译成dalvik。

我们甚至在Maven编译器插件中指定了目标和源版本,以便用Java 1.6进行编译。这不起作用,因为在构建机器上只安装了JDK 1.7。Maven页面底部的一个小提示给了我们提示:Note: Merely setting the target option does not guarantee that your code actually runs on a JRE with the specified version.

看看您是否也有这个问题,将您的*.jar文件重命名为*.zip,解包它,并在MANIFEST.MF文件中查找Build-Jdk:参数,查看实际编译JAR的Java版本。

另一件要注意的事情是库包的名称。

如果你正在使用ADT21,你碰巧有相同的包名库,在编译过程中会出现错误,但它仍然会在Eclipse中编译和运行,给你一个缺少一些资源类的APK。因此,当你运行应用程序时崩溃。

如果你用ANT编译它,那么你会看到编译错误,说两个或多个库使用相同的包名。

要解决这个问题,使用Android Tools -> rename Application Package重命名库项目。然后一切都会恢复正常。

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

相关内容

  • 没有找到相关文章

最新更新