【问题标题】:Adding an Skobbler Map to my empty App将 Skobbler 地图添加到我的空应用程序
【发布时间】:2014-07-15 15:55:52
【问题描述】:

我正在尝试使用 Skobbler 建立一个新项目。 我已经集成了 SKMaps.jar 并将其放入构建路径中。我正在使用带有 gradl 的 AndroidStudio。

现在的问题是:我打电话的那一刻

SKMaps.getInstance().initializeSKMaps(this, initMapSettings, getString(R.string.skobbler_api_key));

抛出异常

android.view.InflateException:二进制 XML 文件第 44 行:错误 膨胀类 com.skobbler.ngx.map.SKMapViewHolder

无法从加载程序加载 ngnative dalvik.system.PathClassLoader[DexPathList[[zip 文件 "/data/app/de.aeins.theswap.swap-1.apk"],nativeLibraryDirectories=[/data/app-lib/de.aeins.theswap.swap-1, /vendor/lib, /system/lib]]]: findLibrary 返回 null

我的项目根目录和 SKMaps.jar 中有 lib 文件夹,另外的文件夹中有 3 个 libngnative.so 文件。

知道出了什么问题吗?

【问题讨论】:

  • 你是在模拟器还是在设备上得到这个?如果它在设备上,您使用的是什么设备?
  • 它在设备上(带有 Android 4.4.2 的 Nexus 5
  • 在同一台设备上运行 Android 演示项目是否有任何问题?
  • 不,这行得通。我已经根据我的项目检查了很多次。我没有找到错误。
  • 此外,它在 AndroidStudio 的预览窗口中显示(我在 Activity 中添加了 SKMapViewHolder):java.lang.UnsatisfiedLinkError: no ngnative in java.library.path at java.lang.ClassLoader .loadLibrary(ClassLoader.java:1886) 在 java.lang.Runtime.loadLibrary0(Runtime.java:849) 在 java.lang.System.loadLibrary(System.java:1088) 在 com.skobbler.ngx.map.MapRenderer。 (SourceFile:47) at com.skobbler.ngx.map.SKMapSurfaceView.a(SourceFile:333) at com.skobbler.ngx.map.SKMapSurfaceView.(SourceFile:245) ....跨度>

标签: android buildpath skmaps


【解决方案1】:

我也遇到了同样的问题。

一些想法(这就是我的工作方式)

1) 确保在 properties->Java Build Path->Libraries 添加 SKMaps.jar 文件,并在 Order and Export 中选择它

2) 我在演示应用程序中意识到 SplashActivity 中正在完成大量工作 - 特别是初始化库。我假设这必须在布局在活动中膨胀之前完成。我最终在我的应用程序中放置了一个 SplashActivity,在转到显示地图的 Activity 之前在那里初始化了库,现在它可以工作了。

【讨论】:

  • 嘿。谢谢你! 1)我使用的是 AndroidStudio,所以它必须在项目依赖项中,还是我错过了这里的“Java 构建路径”部分? 2)我已经试过了。我的 MapActivity 不是第一个,所以我尝试在第一个 Activity 中初始化 Library。这导致应用程序甚至没有启动而是直接崩溃。
  • 我又试了一次,在另一个活动中分离了初始化,但总是得到错误“java.lang.UnsatisfiedLinkError: Couldn't load ngnative from loader dalvik.system.PathClassLoader[DexPathList[[压缩文件“/data/app/de.aeins.theswap.swap-1.apk”],nativeLibraryDirectories=[/data/app-lib/de.aeins.theswap.swap-1, /system/lib]]]: findLibrary 返回 null"
  • 啊,是的 - 我正在使用 Eclipse。但听起来您对 SKMaps.jar 文件或本机库 - libngnative.so 有问题。我不熟悉 Android Studio,但您可以搜索在 Android Studio 中添加外部 jar 和/或本机库。
【解决方案2】:

我遇到了同样的问题。通过以下方式修复它:

  1. 将 lib/armeabi/libngnative.so、lib/armeabi-v7a/libngnative.so 和 lib/x86/libngnative.so 放入 zip 文件中。
  2. 将 zipfile 重命名为 libngnative.jar
  3. 将 jarfile 移动到 app/libs
  4. 添加 jarfile 作为文件依赖项

【讨论】:

  • 非常感谢!这修复了未将 .so 文件放置到位的问题。但 ActivityInflator 仍然显示“java.lang.RuntimeException:无法启动活动 ComponentInfo{de.aeins.theswap.swap/de.aeins.theswap.swap.map}:android.view.InflateException:二进制 XML 文件行 #52:膨胀类 com.skobbler.ngx.map.SKMapViewHolder 时出错。我的 Activity 的 PreviewWindow 还显示错误“无法实例化以下类:- com.skobbler.ngx.map.SKMapViewHolder (Open Class, Show Exception)”
【解决方案3】:

在 Android Studio 项目中,原生 .so 库应放在 /app/src/main/ 文件夹中以便被识别:

这可能是您崩溃的原因。 stackoverflow.com 上报告了一些类似的问题:

JNI folder in Android Studio

Adding a .so file in Android Studio

【讨论】:

    【解决方案4】:

    将地图初始化部分放入自己的活动中是很重要的,该活动最初启动,如Skobbler AndroidOpenSourceDemo应用程序的SplashActivity。 IE。初始化必须在它自己的启动活动中完成,并从那里启动一个新的(主)活动,即显示地图(SKMapViewHolder xml 元素)。

    (此外,如有疑问,请在设备上手动卸载应用程序,然后再次运行。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多