此帖将记录集成百度地图中碰到的问题以及一些解决的方案
首先按照官网进行集成
https://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/androidstudio
编译完美运行闪退 哦吼
报错如下:
found lib armeabi/gnustl_shared.so error
found lib armeabi/BaiduMapSDK_base_v7_3_0.so error
No implementation found for int com.baidu.mapsdkplatform.comjni.tools.JNITools.initClass(java.lang.Object, int) (tried Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_initClass and Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_initClass__Ljava_lang_Object_2I)
然后闪退 报错位置定位在:
SDKInitializer.initialize(this);
但是这是我复制的旧的项目,整个项目我基本上都直接复制的啊,lib和so我也都是复制过来的,build.gradle(app)也是复制过来的,运行旧的APP->完美运行,运行新的APP->报错闪退。。
我吐了。。
我集成方式是:
1.将BaiduLBS_Android.jarcopy到app目录下的libs文件夹中
2.在src目录下的main文件夹下新建一个jniLibs目录
3.将原先包含so文件的armeabi文件夹copy到jinLibs目录下
然后尝试试过的方法有如下(可能我的情况和你的情况不一定完全一样,建议大家都试试):
前提提要:请先检查so 文件 没有放到 jniLibs 下,并且 arm64-v8a armeabi armeabi-v7a x86 x86_64(具体看你需要兼容哪些) 里面的so文件都要放一份(数目要一样)
1.
defaultConfig {
ndk {
abiFilters 'x86', 'armeabi-v7a','x86_64','arm64-v8a','armeabi'
}
packagingOptions {
exclude "jniLibs/armeabi/gnustl_shared.so"
exclude "jniLibs/armeabi/BaiduMapSDK_base_v7_3_0.so"
}
}
2.直接去官网下载最新的开发包以防止so包和jar包的版本不对
3.在src-main里已经存在jniLibs文件,并且已经把armeabi资源文件放进去了。那么就需要在app的build.gradle里把sourceSets { main {jniLibs.srcDirs = ['libs'] }}给删掉。同时也要确保你的dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')//有这个
}
以上方法对我而言都无效
晒 晒 晒。。我真是个与众不同的*呢
最后我走投无路 灵光乍起
我将我的jniLibs文件删掉,然后将百度开发包里面so的文件夹(arm64-v8a,armeabi,armeabi-v7a,x86,x86_64)和BaiduLBS_Android.jar同时放在了app下libs文件夹中,并在build.gradle(app)中添加配置如下
android{
...
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
}
再次运行
结果成功了!!!
坑爹呢吧,明明说好的两种集成方式呢?!明明我旧项目都可以用jniLibs文件这种方式集成,新的怎么就不可以呢? 太坑了,如果上天再给我一次机会 我会去用高德地图。。真的