1 adb查看不同机型的CPU信息
adb shell cat /proc/cpuinfo
以下是OPPO reno对应的cpu信息:其中
processor: 表示第几个核。
Features:表示当前CPU所支持的特性,比如neon,vfp等。
CPU architecture:7表示arm-v7,8表示arm-v8
2 cpu架构与so兼容
对于一个cpu是arm64-v8a架构的手机,它运行app时,进入jnilibs去读取库文件时,先看有没有arm64-v8a文件夹,如果没有该文件夹,去找armeabi-v7a文件夹,如果没有,再去找armeabi文件夹,如果连这个文件夹也没有,就抛出异常。
注意:这里说的是文件夹,即如果有arm64-v8a文件夹,那么就去找特定名称的.so文件,如果没有找到想要的.so文件,不会再往下(armeabi-v7a文件夹)找了,而是直接抛出异常。
现在大部分Android机型CPU都是armeabi-v7a和arm64-v8架构,而他们又是向下兼容,因此,仅适配一种CPU架构就能满足绝大部分要求,这样就能最大限度减少APK的大小。
方案一:只适配armeabi
ndk {
abiFilters 'armeabi'
}
优点:基本上适配了全部CPU架构(除了淘汰的mips和mips_64)。
缺点:性能低,相当于在绝大多数手机上都是需要辅助ABI或动态转码来兼容。
方案二:只适配 armeabi-v7a
ndk {
abiFilters 'armeabi-v7a'
}
同方案一,只是又筛掉了一部分老旧设备,在性能和兼容二者中比较平衡。
方案三:只适配 arm64-v8a
ndk {
abiFilters 'arm64-v8a'
}
优点:性能最佳
缺点:只能运行在arm64-v8上,要放弃部分老旧设备用户。