2

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

  • 下载jar文件并放在libs/文件夹 中
    • mapsforge-core-0.4.0.jar
    • mapsforge-map-0.4.0.jar
    • mapsforge-map-android-0.4.0.jar
    • mapsforge-map-reader-0.4.0.jar
  • 右键单击文件并选择Build Path > Add to Build Path
  • Project Properties中,将四个 jar 标记为已导出。

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

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

Android SDK 工具都在 17 以上版本。不涉及 Maven。

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

当我检查 bin/dexedLibs 的内容时,我注意到 mapsforge 的 jars 已创建但实际上是空的,除了清单文件和(在 maps 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...

4

2 回答 2

2

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

解决方法:Java 构建路径 -> Oeder 和导出 -> 在 yourPath/src 上方制作 sur 3rd.jar

我知道android 支持 java7,只有当你使用 19 以上的版本时。

于 2014-05-11T04:16:43.157 回答
1

@Ninja 为我指明了正确的方向,但我将在此处发布详细步骤。

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

如何更新:

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

通过这些步骤,我的 Mapsforge 项目可以工作了——我可以显示一张地图,然后地图NoClassDefFoundError就消失了。

于 2014-05-11T13:53:10.107 回答