Android cpu架构与so兼容分析

1 adb查看不同机型的CPU信息

 adb shell cat  /proc/cpuinfo

以下是OPPO reno对应的cpu信息:
cpu信息.png

其中
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上,要放弃部分老旧设备用户。

3 参考文章

https://blog.csdn.net/whbk101/article/details/101775032

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。