Android CPU架构学习笔记

Intel使用CISC(复杂指令集计算机)
ARM使用RISC(精简指令集计算机)

1. Android目前有以下七种cpu架构,其区别是指令集不同

ARMv5    第5/6代的ARM处理器,缺少对浮点数计算的硬件支持,使用软件浮点运算,在需要大量计算时有性能瓶颈。只支持armeabi。虽然速度慢,但通用性强,仍需要兼容。
ARMv7    第7代及以上的ARM处理器,目前主流版本。使用硬件浮点运算,具有高级扩展功能。支持 armeabi-v7a 和 armeabi。
ARMv8    第8代、64位ARM处理器,支持 arm64-v8a、armeabi-v7a和armeabi(可用32位模式运行armeabi-v7a和armeabi)。很少设备,三星 Galaxy S6是其中之一。

x86          32位 intel处理器,一般用于平板,支持 armeabi(性能有所损耗) 和 x86。市场占有率很低
x86_64    64位 intel处理器,一般用于平板,支持 x86 和 x86_64。市场占有率很低

MIPS/MIPS64:极少用于手机,可忽略。

CPU架构支持ABIs最优ABI
ARMv5armeabi(1)armeabi
ARMv7armeabi(2)|armeabi-v7a(1)armeabi-v7a
ARMv8armeabi(3)|armeabi-v7a(2)|arm64-v8a(1)arm64-v8a
x86armeabi(3)|armeabi-v7a(2)|x86(1)x86
x86_64armeabi(4)|armeabi-v7a(3)|x86(2)|x86_64(1)x86_64
MIPSmips(1)mips
MIPS64mips(2)|mips64(1)mips64

表中的数字表示最终选择安装的ABI的优先级,1为最高。

2. 查看手机CPU支持的最优的AIBs方式

1). 如何查看手机支持的cpu架构和app适配的cpu架构
下载App:Native Libs Monitor - Device Details可以看到Support ABIs
armeabi-v7a, armeabi 

2). 使用指令 adb shell getprop ro.product.cpu.abi ,也可以查看支持的最优的AIBs

3). 通过Build.SUPPORTED_ABIS也可以查看支持的最优的AIBs

3. CPU是向下兼容的,支持arm64-v8a,就会支持armeabi-v7a和armeabi。
若arm64-v8a文件夹中没有a.so库,armeabi-v7a文件夹有a.so库,且app-build.gradle-defaultConfig-ndk-abiFilters里没有指定ndk需要的ABI,会默认找它支持且优先级最高的ABIs
(可通过easydeviceinfo查看当前cup支持的ABIs),若最高支持arm64-v8a,就会报错
解决方法:
1). 在build.gradle中指定ndk需要兼容的架构为armeabi-v7a
2). 在build.gradle中指定ndk需要兼容的架构为arm64-v8a,且arm64-v8a文件夹中有a.so库

4. 为了减小apk体积,只保留armeabi和armeabi-v7a两个目录,并保证这两个目录中so库数量一致。对只提供armeabi版本的第三方so库,原样复制一份到armeabi-v7a目录中。

具体适配的cpu架构,以在app>build.gradle文件中android->defaultConfig 里设置的支持的 ndk 为准:

ndk {
    abiFilters "armeabi-v7a" // 指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,armeabi,arm-v8之类的so会被过滤掉)
}

5. 参考

Android中的ABI

Android CPU 架构详解

Android 的7种CPU架构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值