1. 程式人生 > >Android Studio中用百度地圖SDK做地圖時遇到的一個問題

Android Studio中用百度地圖SDK做地圖時遇到的一個問題

在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