Android 的7种CPU架构

简介:

目前android支持如下7中CPU架构:

  • 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)

Android是如何加载So库的

  • 程序对当前手机cpu架构(比如 armeabi-v7a)做了适配,那手机跑程序时候就直接在这个目录下找对应的so库,如果找不到就直接报错

  • 如果只对armeabi的手机cpu做适配,那么支持armeabi的手机都会去armeabi目录下找对应的so库

项目中如何适配

  • 如果适配不止一个cpu架构,比如armeabi、 armeabi-v7a 、arm64-v8a这三个,那么一定要确保三个目录中的so库数目一样;第三方库如果支持者提供这三个cpu架构的so库,那非常理想,对应放到目录就可以;

  • 如果适配的上面三个cpu架构,第三方库只提供了两个cpu(比如armeabi、 armeabi-v7a)的库,那也要提供的armeabi的so库,复制一份(armeabi或者armeabi-v7a的so库,因为arm64-v8a兼容armeabi 和 armeabi-v7a)到没有提供的arm64-v8a这个架构目录下;如果不这么做,当应用跑到arm64-v8a架构的手机上时,找不到对应的so库就会报错

  • 具体自己项目适配几种cpu架构,得看app性质,比如微信,主要考虑到兼容,让几乎所有手机都可以适配,另外也相对减少了apk的大小;而另外一个app,比如游戏或者一些对手机性能有要求的app,这种app就挑用户了,只适配到armeabi-v7a,因为目前主流手机都支持armeabi-v7a,就算app支持到只支持armeabi这种架构的手机,app也未必能运行的起来,体验也未必好,算是app放弃也这些用户吧,再说使用只支持armeabi这种架构的手机估计年纪也大了,也不会使用到这个app;

  • 如果只适配一种cpu架构,armeabi(都兼容,但性能有所损耗,如微信和qq)或者armeabi-v7a(目前大部分手机都支持这种cpu架构(王者荣耀));目前手头的app目前只支持armeabi,armeabi-v7a,但是现在apk包越来越大,后面也会考虑只支持一个cpu架构的方案(可以减少10M);

  • 如果app适配了armeabi、 armeabi-v7a 、arm64-v8a三种cpu架构,以我的手机mate9为例, mate9支持 armeabi、 armeabi-v7a 、arm64-v8a,那么app在找so文件时会从最新的一代的cpu 架构(arm64-v8a)找so文件,如果找不到会直接报错,不会再去armeabi-v7a 和armeabi里面找,一定要确保三个目录中的so库数目一样;如果适配armeabi、 armeabi-v7a,mate9手机上app在找so文件时会从armeabi-v7a找对应so,没有就报错;如果只适配一种,那么手机只要支持这种cpu架构,就会去这个文件夹下找对应的so,找不到就报错,如果手机不支持这种cpu架构就报错

具体适配的cpu架构,以gradle 里设置的支持的 ndk 为准:

 

ndk { abiFilters ‘armeabi,armeabi-v7a// , ‘arm64-v8a’, ‘x86’, ‘x86_64’ }

如何查看手机支持的cpu架构和app适配的cpu架构

下载App:Native Libs Monitor(豌豆荚上可以下载)

5f176df39438fe6d7576196ea9216c9c82ce4546

大公司如何适配的

微信(只适配armeabi)、qq(只适配armeabi)、王者荣耀(只适配armeabi-v7a)、百度地图(只适配armeabi)、大众点评(只适配armeabi)等,详细见下面Native Libs Monitor的截图 

b63b4359e2ad60c98a6efd7bae1d707181979411

如果本文对你有帮助的话,麻烦在左侧点个赞,谢谢支持!


原文发布时间为:2018-09-19

本文来自云栖社区合作伙伴“Android开发中文站”,了解相关信息可以关注“Android开发中文站”。


相关文章
|
1月前
|
数据库 Android开发 开发者
构建高性能微服务架构:从理论到实践构建高效Android应用:探究Kotlin协程的优势
【2月更文挑战第16天】 在当今快速迭代和竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性和独立部署能力而受到企业的青睐。本文将深入探讨如何构建一个高性能的微服务系统,涵盖从理论基础到具体实现的各个方面。我们将重点讨论服务拆分策略、通信机制、数据一致性以及性能优化等关键主题,为读者提供一个清晰、实用的指南,以便在复杂多变的业务环境中构建和维护健壮的微服务体系结构。 【2月更文挑战第16天】 在移动开发领域,性能优化和流畅的用户体验是至关重要的。随着技术的不断进步,Kotlin作为一种现代编程语言,在Android开发中被广泛采用,尤其是其协程特性为异步编程带来了革命性的改进。本文旨在深入
241 5
|
2天前
|
传感器 Java Android开发
Android HAL深入探索(1): 架构概述
Android HAL深入探索(1): 架构概述
18 1
|
13天前
|
存储 数据库 Android开发
构建高效安卓应用:采用Jetpack架构组件优化用户体验
【4月更文挑战第12天】 在当今快速发展的数字时代,Android 应用程序的流畅性与响应速度对用户满意度至关重要。为提高应用性能并降低维护成本,开发者需寻求先进的技术解决方案。本文将探讨如何利用 Android Jetpack 中的架构组件 — 如 LiveData、ViewModel 和 Room — 来构建高质量的安卓应用。通过具体实施案例分析,我们将展示这些组件如何协同工作以实现数据持久化、界面与逻辑分离,以及确保数据的即时更新,从而优化用户体验并提升应用的可维护性和可测试性。
|
24天前
|
移动开发 前端开发 数据管理
构建高效Android应用:采用MVVM架构与LiveData的全面指南
在移动开发领域,构建一个既快速又可靠的应用对于开发者来说至关重要。随着Android Jetpack组件的推出,MVVM(Model-View-ViewModel)架构和LiveData已成为实现响应式、可测试且易于维护应用的首选解决方案。本文将深入探讨如何在Android应用中实施MVVM模式,以及如何利用LiveData来优化UI组件的数据更新流程,确保用户界面与业务逻辑之间的高度解耦和流畅交互。
18 4
|
1月前
|
存储 人工智能 并行计算
计算机架构:漫游CPU的奥秘世界(二)
计算机架构:漫游CPU的奥秘世界
52 0
|
1月前
|
存储 人工智能 缓存
计算机架构:漫游CPU的奥秘世界(一)
计算机架构:漫游CPU的奥秘世界
62 0
|
2月前
|
存储 缓存 Linux
CPU高速缓存架构
CPU高速缓存架构
|
3月前
|
存储 前端开发 测试技术
Android 官方架构中的 UseCase 该怎么写?
Android 官方架构中的 UseCase 该怎么写?
66 0
|
3月前
|
缓存 机器人 芯片
CPU_X86架构和ARM架构入门篇
CPU_X86架构和ARM架构入门篇
85 0
|
4月前
|
XML Java API
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
40 0