问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何同时连接ArcGIS与百度地图Android SDK

发布网友 发布时间:2022-04-29 07:41

我来回答

1个回答

热心网友 时间:2022-06-21 06:18

  两个SDK都是将其API库封装成so动态链接库供上层应用(Java)调用,但两者在具体实现上存在差异,也是这个差异导致将两个SDK集成到一个应用中时容易产生强退的bug,这个问题也曾很大的困扰了我一天,特此分享给大家。

  ☆ 先看看百度地图 for Android SDK的动态库调用方法:

  第一步:在工程里新建libs文件夹,将开发包里的mapapi_v2_1_2.jar拷贝到libs根目录下,将libapp_BaiMapApplib_v2_1_2.so和libvi_voslib.so 拷贝到libs\armeabi目录下(官网demo里已有这三个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;

  注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发者可根据实际需求自行添加。


  第二步:在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定mapapi_v2_1_2.jar,确定后返回。

  通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。

  ☆ 再看看ArcGIS for Android SDK的动态库调用方法

  其是通过在Eclipse集成开发环境上安装ArcGIS插件来实现的,具体如何安装就不赘述了。当 ArcGIS开发插件安装完成后,在新建工程的选项中就可以看到【ArcGIS Project for Android】和【ArcGIS Samples for Android】的菜单,ArcGIS Android API的开发环境就顺利配置完成了。

  然后你可以New --> Project -->ArcGIS Project for Android来新建一个带其动态链接库的Android应用程序。例如创建一个test工程,创建成功后如下图所示。本例采用最新的ArcGIS for Android SDK 10.1。

  小结:以上两种方法,从用户便捷性上来说,ArcGIS 更加“智能”一些,将动态链接库添加的工作,直接已经集成到new project里面,对于初学者来说,可以完全忽略这些细节而直接进入关键开发工作;百度地图的SDK相对来说,更加灵活一些,给用户更大的空间。

  但也就是这两种方式的差异导致了当两个SDK结合到一个程序里的时候就容易出错。细心的朋友应该可以发现一个问题,百度地图SDK里的动态链接库只有一个armeabi文件夹,但是ArcGIS SDK却有两个文件夹,armeabi和armeabi-v7a,其中均有一个libruntimecore_java.so库文件。

  这两个文件夹是何用意呢?armeabi和armeabi-v7a是表示cpu的类型,不同的cpu的特性不一样,armeabi就是针对普通的或旧的arm cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu。简单来说,Android为了适应五花八门各式各样的智能终端硬件环境,采用了不同的配置对应不同文件夹的调用模式,好比大家熟悉的不同屏幕dpi会调用不同的图片文件夹,如下图。

  那么关键的来了,当我们严格按照两个SDK添加链接库后,百度地图三个so库文件就存放在armeabi文件夹下,而armeabi-v7a文件夹下并没有百度地图相应的so库,但ArcGIS却在两个文件夹下都有相应的so库,这里不得不说,Esri作为GIS、地图领域的世界领头羊,考虑的还是比较细。

  然后编译程序时,Eclipse会在两个文件夹里搜索相应的库文件,而只会根据Android手机的具体情况拷贝相应文件夹下的库文件。当今绝大多数的手机已经具备了针对有浮点运算或高级扩展功能的arm cpu,所以在手机根目录下/data/data/(program_name)/lib下只会拷贝armeabi-v7a文件夹下的库文件,而此时并不会有百度地图的so库文件。从而会导致百度地图SDK程序直接崩溃,并报出java.lang.ExceptionInInitializerError错误。

  明白了原理,解决办法就十分简单了,将armeabi文件夹下百度地图的so库文件拷贝到armeabi-v7a文件夹下,如下图:

  重新clean一下project,重新编译后程序就可以正常调用百度地图和ArcGIS两个SDK库了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
真三国无双8手柄怎么设置 手柄设置技巧 沈阳机场轻轨的运行间隔是多少 沈抚轻轨概述 沈阳机场轻轨的票价是多少 沈阳轻轨5号线全线站点及时间 沈阳最早和最晚的一班轻轨是几点 内存条是单插一根好,还是双通道好! 碧玉和玛瑙区别 碧玉和玛瑙的区别 碧玉与玛瑙的区别 RA3 MOD SDK使用方法 安卓不使用第三方SDK怎么开发街景地图 j2ee的sdk和j2se的jdk应如何选择?, 如何安装xposed框架 sdk 高人指点一二 发现有java EE 版本和jdk版本,这两者有何区别 vs中的sdk命令提示,这个有什么用,他和dos有何联系 蒸馒头时有一个像死面的有皱巴巴,是不祥之兆吗 蒸馒头有一个死面的有啥迷信说法 为何过年蒸馒头总有一两个甚至整锅都是死面馒头? 蒸馒头总有一个不熟,有科学道理还是迷信? 蒸馒头总是跟死面一样,有什么迷信的说法吗 做饭时 在笼屉上热馒头 有时候会有一个或几个馒头变的又瘪又硬 这种现象民间有迷信的说法 我被家暴了要怎么处理? 家庭暴力该怎么处理? 家庭暴力应该怎么处理? 遇到家暴怎么办 家暴行为怎么处理 家暴怎么处理 家暴一般怎么处理 APP开发中SuperWebView是什么?有何用处以及那些特点? 新手请教ArcGIS Engine Runtime和ArcGIS Engine Developer Kit有何区别 注册商标许可使用有哪些形式 商标被冻结期间,可以授权给别人使用吗,? 梦到牛粪里捡钱好不好 梦见在牛屎里俭很多钱 梦见自己在牛屎底下捡了500块钱 求问华为P40Pro的相机饱和度在哪里设置?相机拍照太艳了。 梦见从粪里捡钱 梦见牛粪上捡红钱 梦见自己和别人在粪堆里捡钱是好,是坏 两种人电力资格证怎么查 车站值班员职业资格证书在哪儿查询 集控值班员证可以代替低压电工证使用吗?以前考集控值班员证前考过低压电工证,现在找不到了。请问可以代 火电厂集控运行专业的职业技能鉴定 集控运行值班员证书有什么作用?电气专业在电厂可以做什么工作? 关于中级集控值班员的 集控运行值班员这个证考下来,用处大吗?我是学电气的,将来在电厂能干点什么啊? 我有集控运行值班员中级证,但没有锅炉中级工证能报考锅炉高级工吗? 学校发的集控值班员四级是国家承认的中级职称吗