一、安卓CPU架构梳理

Android 目前共支持7种CPU架构:

mips, mips64, X86, X86–64, arm64-v8a, armeabi, armeabi-v7a

  • armeabi:第5代ARM处理器,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢。它能运行在除了mips和mips64的设备上,但在非 armeabi设备上运行性能还是有所损耗;
  • armeabi-v7a:第7代32位ARM处理器,支持硬件浮点运算(支持 armeabi 和 armeabi-v7a,目前大部分手机都是这个架构)
  • arm64-v8a:第8代、64位ARM处理器(支持 armeabi-v7a、armeabi 和 arm64-v8a)
  • X86:电脑、平板CPU架构,因此手机模拟器也通常为X86,设备兼容X86、armeabi
  • x86_64:电脑、平板CPU架构,设备兼容X86_64、X86、armeabi
  • mips、mips64:基本没见过

他们关系用表格表示如下:

Platform 32-bit libraries 64-bit libraries 所属公司
ARM armeabi-v7a arm64-v8a 英国ARM
x86 x86 x86_64 美国Intel
mips mips mips64 美国MIPS

二、单ABI适配方案

ABI:英文Application Binary Interface的缩写,也就是应用二进制接口。不同的CPU 与指令集的每种组合都有 定义的 ABI (应用程序二进制接口),一段程序只有遵循这个接口规范才能在该 CPU 上运行。

目前手机市场上,x86 / x86_64/armeabi/mips / mips6 的架构,基本可以不不考虑了,它们的占有量应很少很少了,arm64-v8a作为最新一代架构,应该是目前的主流,armeabi-v7a只存在少部分老旧手机。

因此我们主要针对armeabi适配,如果你没有模拟器的适配需求的话。

2.1、只适配armeabi

优点:基本上适配了全部CPU架构(除了淘汰的mips和mips_64)
缺点:性能低,相当于在绝大多数手机上都是需要辅助ABI或动态转码来兼容

2.2、只适配 armeabi-v7a

优点:兼容性强,支持armeabi-v7a和arm64-v8a,包体积小、性能也相对较强(支持硬件浮点),属于前几年主流适配方案

缺点:无法发挥现在64位机器的性能,64位机器需要向下兼容到32位

2.3、只适配 arm64-v8

优点:性能最佳,包体积小
缺点:兼容性差,只能运行在arm64-v8的64位机器上

三、应用商店64位APP上架适配

目前64位适配方案:armeabi-v7a、arm64-v8。用一张图表示整个查找过程

方案一:同时适配armeabi-v7a、arm64-v8

这是目前使用比较多的适配方案,我们在app -> Gradle的ndk abiFilters中配置即可

优点:兼容性强、性能高,支持64位,省事(只打一个包)

缺点:打包时需要把"armeabi-v7a", "arm64-v8a"下两份so库合到一个包,包体积较大

评价:目前适配64位懒人做法

android {defaultConfig {...ndk {abiFilters "armeabi-v7a", "arm64-v8a"}}...
}

方案二:armeabi-v7a、arm64-v8分开打包

这种也是目前比较主流的适配方案,我们在app -> Gradle的split分包中配置即可

优点:兼容性强、性能高,支持64位,包体积小(目前各大应用市场已经提供32位;64位的包分开上传)

缺点:应用分发时稍微麻烦,需要同时上传32位、64位。

评价:这种是未来的趋势

android {...splits {abi {reset()enable trueuniversalApk false  // If true, also generate a universal APKinclude "armeabi-v7a", "arm64-v8a"}}...
}

四、android studio配置梳理

4.1、ndk abiFilters

用于配置一个包打多个CPU架构的

ndk {abiFilters "armeabi-v7a", "arm64-v8a"
}

4.2、Android split分包

用于配置分包

  • enable: 是否启用ABI拆分机制

  • reset():重置ABI列表为只空字符串,一半和include、exclude一起使用,如果要用必须在- - include和exclude前面

  • include:指明要包含哪些ABI,目前使用最多的伪64位处理器的arm64-v8a,其次才是- armeabi-v7a

  • exclude:默认包含下所有ABI,可以移除一些ABI

  • universalApk:是否打包一个通用版本,包含所有的ABI,默认值为 false

splits {abi {reset()enable trueuniversalApk false  // If true, also generate a universal APKinclude "armeabi-v7a", "arm64-v8a"}
}

可以根据配置不同打出多个包

4.3、ndk abiFilters && Android split分包区别

根据需求配置,一般不能同时配置(或者enable置为false),会编译报错

安卓CPU架构梳理 应用商店64位APP上架适配相关推荐

  1. 升级版本-汇编码转机器码万能转换工具(支持32种CPU架构指令16/32/64位的转码)

    众所周知,计算机核心处理器就是CPU是计算机的重要组成部分.所有的程序都会化为机器代码由CPU去逐个执行. 而CPU架构类型众多,也导致了多种指令类别的不统一.如果有涉猎不同的CPU指令集时转换工具会 ...

  2. 爱奇艺App架构升级之路——64位适配探索与实践

    背  景 随着手机硬件的不断发展,近两年的新式手机已经全部采用了64位CPU,64位真的比32位快吗?实际上32位和64位的差异主要体现在内存寻址上,32位最高只支撑4GB内存,而64位则能够最高支撑 ...

  3. CPU、操作系统的32位与64位

    我们经常听说操作32位和64位,今天就和大家分享一下32位和64位的知识! 一.Windows操作系统32位与6位的区别 32位.64位操作系统又叫Windows X86和Windows X64. 1 ...

  4. Android手机64位APP兼容

    为什么 2022 armv9芯片新机出货,不兼容32位,出现卡顿闪退等问题 64位性能更好 手机硬件升级,存储更大,应用包体积不敏感 应用市场的政策 Google Play声明 自 2019 年 8 ...

  5. 32位机4G虚拟内存 64位机128G虚拟内存计算误区

    1. 32位 我以为32bit(这里我没搞清地址总线的概念,总结来说:32位CPU每次可以处理32个bit 4个字节(B),每一个字节都有一个地址,32位操作系统又有32个地址总线,两个地址总线00 ...

  6. android应用商店升级标准,五大应用商店宣布:共同推进安卓APP升级64位架构

    [CNMO新闻]据媒体报道,近日,小米应用商店.OPPO应用商店.vivo应用商店.腾讯应用宝和百度手机助手等五大应用商店宣布,将共同推进国内安卓生态对64位架构的升级支持,目的是更好提升APP性能体 ...

  7. 安卓APP升级64位架构

    What 最近收到了小米官方发送的安卓APP升级64位架构的通知,具体邮件如下: 尊敬的开发者: 您好! 为更好地提升APP性能体验,降低APP功耗影响,小米应用商店与OPPO应用商店.vivo应用商 ...

  8. 2023 年淘汰 32 位 ARM 将全面转向 64 位 CPU 架构

    前不久 ARM 发布了 ARMv9 指令集,并基于此推出了 Cortex-X2/A710/A510 架构,这是 10 年前推出 ARMv8 之后的一次更大更新,全面迈向 64 位指令集.ARM 日前更 ...

  9. Chrome现在也能编辑pdf文件了!64位安卓版上线,网页加载快10%,还有良心标签管理功能...

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 全世界最多人在用的Chrome浏览器,今天更新了. 版本号:Chrome 85. 增加一系列标签管理功能,还自带PDF编辑器,并且提升10 ...

最新文章

  1. 对象的引用和clone
  2. LVS负载均衡之持久性连接介绍(session篇)
  3. Semi-sync master failed on net_flush() before wait
  4. 单核工作法13:永不拖延(上)
  5. 使用Objects判断对象是否为空,并返回对应信息
  6. C#读取资源文件的两种方法及保存资源文件到本地
  7. JavaScript 几种排序算法实现(冒泡、选择、插入、归并、快速排序)
  8. 将EntityManager.refresh添加到所有Spring数据存储库
  9. 技术管理规划-从哪入手?
  10. vmos安卓虚拟手机系统x86_VMOSPro下载-VMOSPro下载v 1.1.26 安卓版-西西软件下载
  11. Lync Server在父子域环境中使用图形界面扩展AD架构失败
  12. 软件概要设计与详细设计
  13. 软件测试常见面试题汇总大纲
  14. 票务公司加价将儿童机票售成年人赚取差价
  15. 亲测苹果CMS简洁精美影视模板整站源码+带视频教程
  16. 典型的DOS攻击技术
  17. 用Python选取神股(简单、粗暴)
  18. PHP 阿里云视频点播HLS加密(简单流程)
  19. 2021年安全员-A证考试报名及安全员-A证最新解析
  20. 零散知识点20180403

热门文章

  1. JSON-Java(org.json) 简介
  2. 在OpenCV里实现自适应阈值分割
  3. Docker搭建php本地开发环境 - 保姆教程
  4. Docker php安装扩展步骤详解
  5. 【实战】轻轻松松使用StyleGAN(七):用StyleGAN Encoder为女朋友制作美丽头像
  6. 8张图理解Java---importnew---programcreek
  7. 打算以“航空航天青少年科普”为主题举办夏令营,写一份策划案。
  8. freemarker html转义字符,freemarker防止json转义
  9. matlab中怎么样算距离,MATLAB 距离计算
  10. ScratchDet:随机初始化训练SSD目标检测器(论文笔记)