安卓,不同SDK,armeabi 与arm86冲突解决

(原创文章,转载请大家注明出处,谢谢)

做Android开发的同学都知道,

不管是Android Studio还是Eclipse ,在libs文件夹下面

根据我们的需要,可以产生armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64

这些文件夹,并在里面存放.so文件。这些神秘的文件实际上都是abi,Android系统上,每一个CPU架构对应一个ABI,大家可以搜下相关的资料,研究下这块的具体原理。我今天分享的是另一个东西。

事情是这样的,最近app成功集成了阿里百川sdk,然后,只要编译,那么百度sdk相关代码就闪退了!

日—— 了—— 狗——了!

集成之前,app没什么问题,集成之后,只要启动app,就直接闪退,因为百度sdk在application里面有

相关的初始化,而现在初始化的代码找不到了!经过分析,本质上是百度放在libs下面的.so文件找不到了。

为什么呢? 因为编译阿里百川之后,它会自动在libs生成

armeabi,armeabi-v7a,x86,arm64-v8a,x86_64五个文件夹,并分别放入libsgmain.so

但是app在集成阿里百川之前,还集成了百度地图、讯飞、友盟、微信、微博等等,然而所有这些sdk的.so文件,都统一放在了armeabi文件里面;也就是说,app里面没有存放其他4个文件夹(armeabi-v7a,x86,arm64-v8a,x86_64)的so文件。

那么问题就来了,一旦编译成功,那么app就会crash,比如微信的libmsc.so只存在armeabi里面, 而阿里百川sdk生成的4个文件夹里面并没有libmsc.so, 那么如果程序调用到这个文件夹,因为找不到这个文件,就会直接崩溃。

表述能力有限,希望大家能理解,只有抱歉了。

那么如何解决这个问题呢? 有2中方法

第一种,手动新建这5个文件夹,并在每个文件夹里面都放入.so文件,就是说百度要去开发者平台,

下载sdk,找到这5种.so文件,然后分别复制到app到libs相对应的文件下面。当然微信也是,微博也是。

这样是能解决问题的,但是感觉挺累。

第二种,通过代码限制阿里百川,只让它生成app之前就有的armeabi文件夹,那么就不会有这种问题

在build.gradle文件里面,具体代码如下,


sourceSets {  

     main {

       jniLibs.srcDirs:['libs'] 

    }}

  android {

      splits {

abi {

 enable true

 reset()

 include 'armeabi'

 universalApk false

   }

  }

  }


最后,问题圆满解决。

你可能感兴趣的:(安卓,不同SDK,armeabi 与arm86冲突解决)