在Android Studio中用百度地图SDK做地图时,可能会遇到这种情况:
做基本地图和标注物时,运行正常,可就是做定位的时候,初始化语句报错:
SDKInitializer.initialize(getApplicationContext());
报的错误如下:
java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()J
at com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create(Native Method)
at com.baidu.platform.comjni.map.commonmemcache.a.a(Unknown Source)
at com.baidu.platform.comapi.util.f.b(Unknown Source)
at com.baidu.platform.comapi.a.c(Unknown Source)
at com.baidu.platform.comapi.c.a(Unknown Source)
at com.baidu.mapapi.SDKInitializer.initialize(Unknown Source)
at com.baidu.mapapi.SDKInitializer.initialize(Unknown Source)
at com.jyq.baidumymaplocation.MainActivity.onCreate(MainActivity.java:29)
at android.app.Activity.performCreate(Activity.java:5146)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2191)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2282)
解决思路:
在开发指南中是这样写的:
在相关下载里下载最新的库文件。将so文件的压缩文件解压出来,把对应架构下的so文件放入开发者自己APP的对应架构下的文件夹中(建议全部放入以提高程序兼容性),将locSDK_6.X.jar文件拷贝到工程的libs目录下,这样您就可以在程序中使用百度定位SDK了。使用eclipse开发的开发者,只需要将SO的文件夹放到libs下即可;使用AndroidStutio的开发者除了上述操作,还需要在build.gradle中配置SO的使用,如下所示:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
我认为,可能是它直接把.so文件放在了libs下,所以要在build.gradle中配置,而如果我们是在src/main下新建了jniLibs文件,将包含.so文件的文件夹都放入了jniLibs中,所以加上开发指南中的那句话是会报错,因此去掉那句话,结果可以运行了!
基本知识:
在百度地图SDK中,baidumapapi_vX_X_X.jar和BaiduLBS_Android,有何不同??
baidumapapi_vX_X_X.jar 只是地图sdk的jar包,BaiduLBS_Android 是地图sdk与定位或导航sdk一起打包的,两个jar是有冲突的,
放不到一个工程里,如果只需要地图sdk下载baidumapapi_vX_X_X.jar即可,如果需要其他sdk,勾选多个sdk组合下载BaiduLBS_Android