APP端android相关

Android 中arm64-v8a、armeabi-v7a、a

2019-08-12  本文已影响1人  我们都很努力着

前几天在做ndk这块 会编译so到指定目录下 但是不太清楚 so库对应的文件夹是兼容哪些CPU的 今天来简单整理一下
Android 设备的CPU类型(通常称为”ABIs”)

区别

这三者都表示的是CPU类型,早期的Android系统几乎只支持ARMv5的CPU架构,但是现在已经有7种了。ARMv5ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8MIPS64x86_64 (从2014年起),每一种都关联着一个相应的ABI(应用程序二进制接口(ApplicationBinary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库)。Android现在的主流CPU是armeabi-v7aarmeabi-v7a是针对有浮点运算或高级扩展功能的ARMv7 CPU

在 Android 系统中 ndk 默认会生成如下 7 种 .so

Android 系统中 ndk 默认生成的库

在 apk 文件中带这么多版本的 .so 是一种很实用的做法,一般也基本没人这么干,会造成包体积很大:

适配不同的平台

目前主流的Android设备是armeabi-v7a架构的,然后就是x86armeabi了。如果同时包含了 armeabiarmeabi-v7ax86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是同时也会导致包变大。
   armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是armeabi-v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi下了。x86也是可以兼容armeabi平台运行的,另外需要指出的是,打出包的x86so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86
放置 .so 文件的正确姿势其实就两句话:

.so 文件的正确姿势

上一篇 下一篇

猜你喜欢

热点阅读