android配置so支持armeabi,安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)...

背景

Android 系统本质是一个通过改造的 Linux 系统,so库是Linux系统上使用的共享库(相似windows上的dll)。最先,Android 系统只支持 ARMv5 的 CPU 构架,随着 Android 系统的发展,又加入了 ARMv7 (2010), x86 (2011), MIPS (2012), ARMv8, MIPS64 和 x86_64 (2014)。每一种 CPU 构架,都定义了一种 ABI(Application Binary Interface),ABI 决定了二进制文件如何与系统进行交互。

a30dab373f078c82ab586e6c19573093.pnghtml

安卓工程中配置支持的平台类型

下面样例表示支持armeabi、armeabi-v7a和arm64-v8aweb

defaultConfig {

ndk {

abiFilters 'armeabi','armeabi-v7a','arm64-v8a'

}

}

为何要设置ndk的abiFilters?

其实这个能够不设置,这样编译时,就会将项目里全部依赖资源包里的so库都打到最终的apk里。

988f472d0e872c0575e4c43da9925752.png

可是有些平台,咱们是不须要支持的,若是不删除的话,apk就臃肿了。若是那些so库是咱们本身编译出来的,那能够直接在工程中删除对应so文件,可是若是是第三方提供的,就很差删除了,因此就须要使用abiFilters来过滤了。windows

armeabi、armeabi-v7a、arm64-v8a的兼容性问题

看上上面的描述,觉得新增一个so库文件能够随便根据须要适配的目录放,就错了。若是你有库文件在armeabi里有,可是armeabi-v7a目录下没有,那么运行在V7a的架构时,就会出现找不到so库文件的状况。具体描述参照:Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题。svg

正确的作法

当前市面绝大多数是arm的CPU,并且都是V7架构的了,因此能够保留armeabi或者armeabi-v7a便可。

若是仅保留armeabi-v7a,而有些第三方包未提供v7a的包,则能够将对应armeabi包拷贝到armeabi-v7a。

若是同时保留armeabi和armeabi-v7a,则须要保证两个目录下的so库文件数相同。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值