使用Mapsforge 0.4.0和Eclipse的NoClassDefFoundError

时间:2014-05-11 01:15:22

标签: android eclipse mapsforge

我正在尝试使用Mapsforge向我的应用程序添加地图视图。我做了以下事情:

  • 下载jar文件并将其放在libs/文件夹中
    • mapsforge核-0.4.0.jar
    • mapsforge-MAP-0.4.0.jar
    • mapsforge-MAP-机器人-0.4.0.jar
    • mapsforge-MAP-读取器 - 0.4.0.jar
  • 右键单击文件并选择构建路径>添加到构建路径
  • 项目属性中,将四个jar标记为已导出。

但是,当我运行我的应用程序时,它会在第一次调用库中的类时崩溃:

E/AndroidRuntime(21265): java.lang.NoClassDefFoundError: org.mapsforge.map.android.graphics.AndroidGraphicFactory

Android SDK工具都高于17版。没有Maven参与。

我一直在寻找答案,但无济于事。我已经尝试在列表中移动罐子,清理项目 - 这和我已经做过的事情是在网上建议的内容的本质。什么都没有帮助。

当我检查bin / dexedLibs的内容时,我注意到创建了mapsforge的jar,但实际上是空的,除了清单文件和(在map jar的情况下)osmarender资源。值得注意的是, classes.dex文件不存在。该文件夹中的Android支持库包含classes.dex文件。

任何线索?

编辑:我检查了原始的jar文件。在查看.class文件时,我注意到每个文件都以CA FE BA BE 00 00 00 33开头,即采用Java 7格式。

根据我在网上发现的一些信息,Android SDK不支持Java 7。那还是这样吗?这可以解释为什么没有任何作用但会让我想知道为什么Mapsforge开发人员会使用Java 7编译一个与Android一起使用的jar ...

2 个答案:

答案 0 :(得分:2)

NoClassDefFound确实是一个难以解决的异常,你可以尝试一种解决方法。

workaroud:Java构建路径 - > Oeder and Export - > make sur 3rd.jar高于yourPath / src

我知道android support java7,只有在您使用19以上的版本时才会知道。

答案 1 :(得分:1)

@Ninja指出了我正确的方向,但我会在这里发布详细的步骤。

简短回答:您需要Android工具链的19或更高版本,因为该版本引入了针对预构建的Mapsforge 0.4.0库构建所需的Java 7支持。

如何更新:

  • 启动ADT。更新所有已安装的软件包,并另外选择至少一个版本为19或更高版本的 Android SDK Build-tools 。 (您可以将多个版本的Android SDK Build-tools安装在一起。)
  • 现在打开Eclipse并选择帮助>从菜单中检查更新
    • 如果您收到错误消息,指出没有可用的软件来源,请转到帮助>安装新软件。在对话框中,单击添加并添加名为 ADT Plugin 的新存储库,URL https://dl-ssl.google.com/android/eclipse/。然后重试。
  • 提示时重启Eclipse。
  • 在我的情况下,设置编译器合规性级别并不是必需的(我将其保留为1.6)。

通过这些步骤,我的Mapsforge项目可以正常运行 - 我可以显示地图并且NoClassDefFoundError已经消失。