Androd NDK 开发abi abiFilter

在项目的app module中的build.gradle文件中,我们经常看到下面的配置:
 

    defaultConfig {
        ndk {
            abiFilters "armeabi", "armeabi-v7a"
        }
    }
  • 问题:为什么要在build.gradle文件中配置abiFilters?
    答案:.so文件有多种类型,如果所有类型都引入,项目就太大了。所以需要过滤。
  • 问题:.so是干啥的?
    答案:.so的全程是Shared Object,所以有翻译为共享库,so文件相当于windows上的dll文件(Dynamic Link Library,动态链接库),只可以在Linux系统运行。so文件是二进制文件,与exe相似,但是不能执行。二进制文件在cpu上运行需要一套规范,这个规范就是abi(Application Binary Interface),abi包含了指令集、内存对齐、可用的系统函数库等。不同的cpu就有不同的CPU架构,也就有了不同的abi类型。
  • so文件有哪些类型?abiFilter关so文件什么事?
    android系统支持7中cpu架构,就有7种abi类型。适配7种类型,就需要引入7份so文件,项目过大,也没有必要。所以需要设置abiFilter。
  • 问题:android项目什么时候需要用到so文件?
    答案:开发Android应用时,有时候Java层的编码不能满足实现需求,常见的场景如:加解密算法,音视频编解码等。这就需要用C/C++实现后生成SO文件,再用System.loadLibrary()加载进行调用,这就是JNI层的实现。
    例如集成百度地图sdk,需要从百度地图开放平台下载必要的jar文件和so文件。
  • 问题:abiFilters的功能是什么?
    答案:设置需要支持的CPU架构,上面的代码就表示,必须支持armeabi和armeabi-v7a这两种CPU架构。
  • 问题:abiFilters外层包裹着ndk,这个和ndk有什么关系?
    答案:android开发中,生成so文件的方式之一就是通过ndk生成,所以要事先配置ndk,那么abiFilters被包裹在ndk内部就不奇怪了。ndk开发本来就需要定义生成的so文件的类型。

参考1:关于abi
参考2:abiFilter配置
参考:jar文件与so文件的区别
参考:android so文件详细介绍
参考:so文件与abi的关系
参考:ARM架构与X86架构的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值