Android设备支持的CPU架构

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

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

Android设备支持的CPU架构_第1张图片
图上显示我的测试机是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"
    }
}

你可能感兴趣的:(Android,Android)