Android cpu架构兼容so库问题

1. Android 目前支持的7中cpu类型

设备类型 支持so库 说明
ARMv5 设备 只支持armeabi 早期
ARMv7 设备 支持 armeabi 和 armeabi-v7a 从2010年起
ARMv8 设备 支持 armeabi-v7a、armeabi 和 arm64-v8a 2014年起
X86 设备 支持 armeabi(性能有所损耗) 和 x86 主要是运用在平板上
x86_64 设备 支持 x86 和 x86_64、armeabi 主要是运用在平板上
mips 设备 支持 mips 较少
mips_64 设备 支持 mips 和 mips_64 较少

2. CPU架构简介

CPU架构 简介 说明
armeabi ARM架构的默认选项,支持软浮点运算,但不支持硬件辅助浮点运算,支持所有的 ARM* 设备,目前只支持该armeabi的机型极少。 缺点:不支持硬件浮点,性能较差。优点:兼容所有机型(建议接入第三方sdk,支持该so文件)
armeabi-v7a armeabi-v7a 向下兼容,在兼容 armeabi 的基础上,支持基于 ARM* v7 的设备,支持硬件 FPU 指令,支持硬件浮点运算,目前大部分机器都属于armeabi-v7a 目前市面机型较多,且兼容和性能综合性最好(建议接入第三方sdk,必须支持该so文件)
arm64-v8a 向下兼容支持 armeabi-v7a、armeabi 和 arm64-v8a 向下兼容armeabi-v7a、armeabi 和 arm64-v8a。(接入第三方sdk,支持该so文件最好)
X86 向下兼容支持 armeabi(性能有所损耗) 和 x86 PC,平板领域,兼容armeabi,无x86的so文件,兼容armeabi性能有所损耗
x86_64 向下兼容支持 x86 和 x86_64、armeabi Pc,平板领域
mips 支持 mips 高性能的嵌入式CPU构架,其出发点是高性能,主要用于路由器、猫等
mips_64 支持 mips 和 mips_64 高性能的嵌入式CPU构架,其出发点是高性能,主要用于路由器、猫等

3. Android中设备加载so策略

  1. 不同CPU架构的android手机加载时会在libs下找自己对应的目录,从对应的目录下寻找需要的.so文件;

  2. 如果没有对应的目录,就会去armeabi下去寻找,如果已经有对应的目录,却没有找到对应的.so文件,也不会去armeabi下去寻找了(这种情况会抛异常);

以armeabi-v7a设备为例,该Android设备当然优先寻找libs目录下的armeabi-v7a文件夹,同样,如果只有armeabi-v7a文件夹而没有 so也是会报错的;如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so,但是不能兼容运行x86的so。所以项目中如果只含有x86的so,在armeabi和armeabi-v7a也是无法运行的。以上就是不同CPU架构运行时加载so的策略。

4. Android设备So兼容方案

方案编号 方案 gradle配置 优缺点 App举例
N01 只适配 armeabi-v7a ndk { abiFilters 'armeabi-v7a' } 因为目前主流机型是 ARMv7,并且 ARMv8 设备也向下兼容了armeabi-v7a Facebook、WhatsApp、王者荣耀等
N02 只适配 armeabi ndk { abiFilters 'armeabi' } 因为 ARMv7 、ARMv8 还是 x86 都兼容 armeabi,但是性能都会有些损耗 微信
N03 同时适配 armeabi-v7a 和 armeabi ndk { abiFilters 'armeabi-v7a' , ‘armabi'} 既能够支持所有 ARM 架构,同时又能具有 ARMv7 支持硬件浮点运算等特性 Line
N04 同时适配 x86 和 armeabi ndk { abiFilters 'armeabi' , ‘x86’} 既能支持所有 ARM 架构,又能支持x86架构,唯一的缺点就是没有了ARMv7 支持硬件浮点运算等一系列特性 QQ
N05 同时适配 armeabi, armeabi-v7a 和 x86 ndk { abiFilters 'armeabi' , ‘x86’, 'armeabi-v7a' } 在性能方面来说是较为完美的方案,只是APK的大小也会随之的变大 ...

5.gradle配置ndk配置

image.png

文章内容来源:
1.Android CPU架构及so库兼容问题总结
2. Android SO文件的兼容和适配
感谢原作者额分享。。。

其他分享:kotlin入门实例

你可能感兴趣的:(Android cpu架构兼容so库问题)