Android设备支持的CPU架构

1、目前Android支持的CPU架构有以下几种:

类型简介
armeabi第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢
armeabi-v7a第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能(从2010年起)
arm64-v8a第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit
x86intel 32位,一般用于平板(从2011年起)
x86_64intel 64位,一般用于平板(从2014年起)
mips少接触(从2012年起)
mips64少接触(从2014年起)

2、我们的代码是在哪里设置apk对它们适配的?
  在主工程module的build.gradle添加下面的代码:

defaultConfig {
    ndk {
        abiFilters "armeabi-v7a", "x86", "armeabi"
    }
}

  当我们的应用安装到设备上时,上述设置的abi所对应的lib/armeabi-v7a,lib/x86,lib/armeabi这三个目录中的.so文件会被打包到APK中;

  这里解释一下abiFilters这个标签属性的意义,abiFilters就是abi过滤器,abi又是什么呢?
  ABI,(application binary interface,缩写为ABI),应用二进制接口,是指应用基于哪种指令集来进行编译。在计算机中,ABI描述了应用程序(或者其他类型)和操作系统之间或其他应用程序之间的低级接口;

3、介绍通过adb命令行查看手机设备支持的CPU架构类型:
 连接手机到电脑上之后,打开Terminal输入以下代码:

adb shell
cat /proc/cpuinfo

在这里插入图片描述
图上显示我的测试机是AArch64,对应的应该是arm64-v8a;

4、使用Realm的时候,解决64位库找不到的方法?

  如果,我们的工程还包含其它的Native库,并且它们没有提供arm64平台的支持,而Realm带有全平台的so文件,当我们运行程序时,由于手机是arm64-v8a,导致arm64的安卓设备在加载Realm的librealm-jni.so时可能会失败。这是因为安卓无法同时加载32位和64位的Native库。最佳的解决方案是为所有的Native库提供arm64版本。但使用第三方闭源库时这个方案不太好实现。

  另一个解决方案是在编译期通过gradle配置将Realm的arm64库排除在外,工程中统一加载非arm64的so包;如下代码所示:

defaultConfig {
    ndk {
        abiFilters "armeabi-v7a", "x86", "armeabi"
    }
    // 过滤掉不支持的平台
    packagingOptions {
        exclude "lib/arm64-v8a/librealm-jni.so"
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值