当前位置:   article > 正文

armeabi v5 v7a v8a x86对应的so库详解_eabi5

eabi5

ABI:应用程序二进制接口,Application Binary Interface。

armeabi-v7a: 针对有浮点运算或高级扩展功能的arm v7 cpu,32位ARM设备。第7代及以上的 ARM 处理器。2011年以后生产的大部分Android设备都使用它.
arm64-v8a: 第8代、64位ARM处理器。目前主流版本(Google Play上架要求app必须适配arm64-v8a)
armeabi: 针对普通的或旧的第五代、第六代ARM处理器。NDK 以前支持 ARMv5 (armeabi) 以及 32 位和 64 位 MIPS,但 NDK r17 已不再支持,极少用于手机可以忽略
x86: 平板、模拟器用得比较多,打包出的x86的so,总会比armeabi平台的体积更小
x86_64: 64位的平板。

兼容性适配:

如果项目只包含了 armeabi,那么在所有Android设备都可以运行
如果项目只包含了 armeabi-v7a,除armeabi架构的设备外都可以运行
如果项目只包含了 x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的
如果同时包含了 armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大

 

注意: 当v8的手机运行只适配v7的app时,首先会去v8的文件夹下找相应的so文件,存在就直接使用,不存在就会去v7文件夹下找,再者去armeabi文件夹;如果v8的文件夹存在,但是这个文件夹下没有对应的so文件就会报错,所以如果添加一些第三方sdk,注意so文件的类型,不要产生不全的文件夹

建议:

为了减小 apk 体积,只保留 armeabi 和 armeabi-v7a 两个文件夹,并保证这两个文件夹中 .so 数量一致
对只提供 armeabi 版本的第三方 .so,原样复制一份到 armeabi-v7a 文件夹

 

最后,如果我们只想支持armeabi-v7a,那么需要在gradle中配置,因为默认情况下,打包后会自动生成armeabi 到 x86的所有文件夹。这就有可能导致一些x86的设备因为在x86文件夹下找不到so文件而崩溃

  1. defaultConfig {
  2. ndk {
  3. abiFilters "armeabi-v7a"
  4. }
  5. }

 

查看android设备的cpu型号:

adb shell cat /proc/cpuinfo

D:\>adb shell cat /proc/cpuinfo
Processor       : AArch64 Processor rev 3 (aarch64)
processor       : 0
model name      : AArch64 Processor rev 3 (aarch64)
BogoMIPS        : 26.00
BogoMIPS        : 26.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 3

Hardware        : MT6737T

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/73561
推荐阅读
相关标签
  

闽ICP备14008679号