【问题标题】:Android Skobbler Maps 2.4 SDK - Offline/Prebundled Maps CrashingAndroid Skobbler Maps 2.4 SDK - 离线/预绑定地图崩溃
【发布时间】:2015-03-10 01:42:35
【问题描述】:

我使用旧版本的 Skobbler 地图已经有一段时间了,并且发现它非常成功。我最近开始升级到 2.4 版,以获得该版本中提供的一些额外功能(“通过点”是我感兴趣的主要功能)。

我可以运行 AndroidSDKDemo 项目。我可以让我自己的项目运行起来。但是,一旦我添加了离线包,应用程序每次启动时都会崩溃,并显示“致命信号 11 0x00000004”。

在我将离线地图包添加到 SKMaps.zip 文件后,无论我将连接模式设置为在线还是离线,应用程序仍然崩溃,只是基于预装地图中文件的存在文件夹。

我通过 AndroidSDKDemo 项目下载了离线地图包。然后我使用 android “adb backup -noapk” 命令创建应用程序文件的压缩版本,并解压缩 SKMaps 文件夹。然后,我将“v1”文件夹从“Maps”移动到“PreinstalledMaps”,并压缩文件,然后将此文件添加到资产文件夹中的测试应用程序(崩溃的应用程序)中。

似乎崩溃可能与 SKMaps.zip 有特殊关系...如果我从演示项目中获取 SKMaps.zip 文件(未更改,只是直接从网上下载),并将其放入我的测试应用程序 - 该应用程序运行良好。如果我使用备份中创建的 SKMaps 文件夹(因此包含“地图”文件夹中的信息,并且没有在此文件中移动任何内容(甚至没有将任何内容移动到“/PreinstalledMaps”),并将此文件夹放入我的测试中项目,应用程序崩溃。

有人对我如何解决这个问题有任何想法吗?这对我来说非常令人沮丧,因为我无法真正弄清楚为什么事情不起作用。我可能做错了什么,但我不知道这可能是什么。

提前感谢您的帮助

【问题讨论】:

  • 我们正在调查。
  • 如果有帮助:我使用的是 Mac、Eclipse(不是 Android Studio),并且正在使用此工具:sourceforge.net/projects/adbextractor 将 Android 备份提取到 .tar 中,然后我可以浏览。如果您愿意,我可以为您提供崩溃应用程序的完整源代码。请告诉我,我很乐意做任何可以帮助你们解决这个问题的事情。
  • 请将 SKMaps.zip 发送到 dev@skobbler.com 以便我们自己测试
  • 感谢您的详细问题,它帮助我学习了如何从示例中提取离线地图,因为这部分的文档是错误的,因为您无法按照他们所说的那样获取文件

标签: android skmaps


【解决方案1】:

我在 sdk 2.3 中加载地图时遇到了类似的问题。 我在初始化地图之前通过执行这个线程解决了这个问题。

final SKPrepareMapTextureThread prepThread = new SKPrepareMapTextureThread(this, mapResourcesDirPath, zip, this);

prepThread.start();

当方法:

@Override
    public void onMapTexturesPrepared(boolean arg0) {

}

"onMapTexturesPrepared" 被调用,你可以用预装的地图初始化地图:

initMapSettings.setPreinstalledMapsPath(mapResourcesDirPath+"/PreinstalledMaps");
(....)
SKMaps.getInstance().initializeSKMaps(getApplicationContext(), initMapSettings, API_KEY);

希望对我有帮助,对我有用。

【讨论】:

    【解决方案2】:

    原来我有点愚蠢。我正在压缩 SKMaps 文件夹,而不是 SKMaps 文件夹中的文件。这意味着我的 zip 看起来像这样:

    SKMaps.zip/SKMaps/PreinstalledMaps/...

    它需要看起来像这样: SKMaps.zip/PreinstalledMaps/...

    简单的解决方案,但对我来说并不是很明显。

    为浪费时间道歉。

    【讨论】:

    • 在这次崩溃中浪费了 1 天,并看到了您的共享体验 - 至少为我节省了 1 天。谢谢!好像onMapTexturesPrepared 并没有检查复制资源的结构,而只是检查复制操作,这样不好,因为开发者非常依赖这个回调。
    【解决方案3】:

    SKMaps.zip 中的结构必须与演示中的相同,修改或删除任何文件可能会在更糟糕的情况下导致应用程序崩溃时出现一些意外行为。

    要使用离线地图,您首先必须设置 preinstalledMapsPath(在我们的 AndroidSDKDemo DemoUtils 方法 initializeLibrary 中取消注释 initMapSettings.setPreinstalledMapsPath(app.getMapResourcesDirPath() + "/预装地图"); ) 然后有2种方式

    1. 按以下方式更改资产:解压 SKMaps zip 并在 PreinstalledMaps/v1/20141230/package/ 文件夹中添加 2.4 的 .skm 地图重新制作资产中的存档
    2. 另一种选择是手动添加包。默认情况下,在我们的 AndroidSDKDemo 中,如果有空间,则将地图资源放置在内存中,但这可以在 SplashActivity 中的方法 chooseStoragePath 中进行更改,以便该方法仅返回 context.getExternalFilesDir(null).toString()。使用文件管理器应用程序(例如Astro File Manager)将文件复制到[外部存储]/Android/data/com.skobbler.sdkdemo/files/SKMaps/PreinstalledMaps/v1/20141230/package/

    【讨论】:

    • 选项 2 不是一个选项。这是一个内部应用程序,将通过第三方技术安装在已锁定的手机上,用户将无法访问文件系统。值得注意的是,我使用的测试设备并非如此。我已经完成了选项一。这是行不通的。第一个选项每次都会让我的应用崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多