近期接触的应用开发中有用到百度Android SDK的开发内容,具体内容为根据具体的经纬度进行详细地址的反向查询,其中有用到Android SDK的API包,我下载的版本为Android SDK v2.4.0 。在AVD上调试没出现问题,但是到真机调试时出现了java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapSDK_v2_4_0: findLibrary returned null。
首先想到的是自信查看了百度的API开发文档,在此引用:
第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;
注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发者可根据实际需求自行添加。
第二步:在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。
通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。
注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:
1. 在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;
2. Project -> clean-> clean all .
在确定了按照上述配置图配置SDK路径后,重新编译打包好APK后进行了手动安装,一切正常。然后重新打包整个系统(注:此应用为系统预装的应用,因此需要打包到系统),然后重新刷系统,开机,运行。。弹错。。错误依旧。
网上查了相关的解决办法,大概如下:
1。SDK放置路径有误,准确路径为libs/baidumapapi_vX_X_X.jar,同时在libs/armeabi/路径下放置对应的so文件。
2. SDK的so文件需要重新在libs/下建armeabi-v7a目录,并将so文件拷贝到该目录下。
3. 重新建工程然后拷贝对应的so文件和jar包到文档中的指定目录。
经过以上的方法,对于我的问题依然没有解决,最后经过排查,发现在系统目录下,跟APK同时打包的系统目录中有
xxx\system\app,xxx\system\lib,xxx\system\data三个目录中APP放置了我编译打包好的APK,lib中放入的则是APK所引用的so文件,因此果断放入libBaiduMapSDK_v2_4_0.so文件,然后重新编系统,刷系统后问题解决。
总结了下,我出问题的关键地方应该是忽略了,手动安装和系统预装的区别,手动安装时应该会拷贝依赖的库文件到系统,而系统预装则需要将依赖库文件提前拷贝到系统APK同级目录用打包的方式安装到系统吧。所以很多人出问题不妨考虑下是否是作为预装的应用来打包到系统,如果是就不要忘了把需要用的库文件都打包到系统。