美文网首页
Android ABI 整理

Android ABI 整理

作者: 老柯南 | 来源:发表于2019-01-29 15:20 被阅读13次

    ABI 7种CPU架构:

    armeabi ,armeabi-v7a ,arm64-v8a ,x86,x86_64 , mips , mips64

    google 官网给出了的只有前面5种;

    table 1 (ABI)

    armeabi 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢(只支持armeabi)
    armeabi-v7a 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能(支持 armeabi 和 armeabi-v7a,目前大部分手机都是这个架构)
    arm64-v8a 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit(支持 armeabi-v7a、armeabi 和 arm64-v8a)
    x86 intel 32位,一般用于平板(支持 armeabi(性能有所损耗) 和 x86)
    x86_64 intel 64位,一般用于平板(支持 x86 和 x86_64)

    mips 基本没见过(支持 mips)
    mips64 基本没见过(支持 mips 和 mips_64)

    这里总结两个结论:

    Arm系列:

    1:arm64-v8a 向下兼容 armeabi-v7a;

    2: armeabi-v7a 向下兼容 armeabi;

    1:从表格中可以直接看出,armeabi-v7a 是向下兼容 armeabi的;
    2:上述表格是不能直接得到 arm64-v8a 向下兼容 armeabi-v7a的信息的。
    可以通过查看ARMv8 Technology Preview的资料得到这个结论。

    table 2

    Intel系列:

    1:x86_64 向下兼容 x86;

    1:从表格中可以直接看出,x86_64 是向下兼容 x86的;

    Android 工程加载so库

    Android ABI 配置

    当项目要使用到动态链接库的时候,一般都会在工程下提交jniLibs的文件夹,来单独管理so文件,同时还会根据不同的abi类型创建不同的abi so 库的文件夹。如:


    table 3

    当程序构建成APK ,运行在手机设备上时,设备会根据当前手机的CPU 架构(ABI 指令极类型),去指定的文件目录下查找对应的so库,如果如果没找到对应设备的so库,还会在向下兼容的文件夹查找(具体细节 得参考下 下面的
    Android 适配so库),如果最终还是找不到就会报错。

    我们可以在gradle 文件中添加如下配置abi类型。

    android {
        defaultConfig {
           ndk {
                //设置支持的SO库架构
                abiFilters 'armeabi-v7a'//, 'x86'
            }
        }
    }
    

    Android 适配so库

    1:项目如果要添加某一个ABI 指令集的so库,比如armeabi-v7a,那armeabi-v7a文件下,必须包含所有该ABI指令集的所有so库,不能一部分在armeabi-v7a下,一部分在armeabi下。

    2:如果so提供的文件有缺失,兼容ABI的so可以拷贝到高指令集的ABI目录下。

    相关文章

      网友评论

          本文标题:Android ABI 整理

          本文链接:https://www.haomeiwen.com/subject/pyjxsqtx.html