【理解】Android CPU架构及so文件的兼容和适配

关于Android arm64-v8a、armeabi-v7a、armeabi、x86等CPU下的so文件兼容问题 先介绍几个专业词:web ARM : 是嵌入式中的一种架构,全称为Advanced RISC Machine,能够理解为ARM处理器。微信 ABI(Application Binary Interface): 应用程序二进制接口 描述了应用程序和操做系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。架构 ABI和CPU关系: 大部分cpu都支持多于一种的ABI。 当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。app ABI目录(横向)和cpu(纵向) 阅读详情

著作权归作者所有 链接:https://www.jianshu.com/p/2d23764746e4

CPU架构分类

  1. armeabi
  2. armeabi-v7a(目前大部分机器)
  3. arm64-v8a (高端机型)
  4. x86
  5. x86_64
  6. mips
  7. mips64

Android手机大部分采用的是ARM架构的CPU.

CPU之间的架构兼容

ARMv5 设备:只支持armeabi

ARMv7 设备:支持 armeabi 和 armeabi-v7a

ARMv8 设备:支持 armeabi-v7a、armeabi 和 arm64-v8a

X86 设备:支持 armeabi(性能有所损耗) 和 x86

x86_64 设备:支持 x86 和 x86_64

mips 设备: 支持 mips

mips_64 设备:支持 mips 和 mips_64

Android中设备加载so策略

  1. 不同CPU架构的android手机加载时会在libs下找自己对应的目录,从对应的目录下寻找需要的.so文件;
  2. 如果没有对应的目录,就会去armeabi下去寻找,如果已经有对应的目录,却没有找到对应的.so文件,也不会去armeabi下去寻找了;

以x86设备为例,x86设备会在项目中的 libs文件夹寻找是否含有x86文件夹,如果含有x86文件夹,则默认为该项目有x86对应的so可运行文件,只有x86文件夹而文件夹下没有so,程序运行也是会出现 find library returned null 的错误的;如果工程本身不含有x86文件夹,则会寻找armeabi或者armeabi-v7a文件夹,兼容运行。

以armeabi-v7a设备为例,该Android设备当然优先寻找libs目录下的armeabi-v7a文件夹,同样,如果只有armeabi-v7a文件夹而没有 so也是会报错的;如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so,但是不能兼容运行x86的so。所以项目中如果只含有x86的so,在armeabi和armeabi-v7a也是无法运行的。以上就是不同CPU架构运行时加载so的策略。

针对不同平台,如何去适配

目前主流的Android设备主要是 armeabi-v7a 架构的,然后是 x86 和 armeabi 了。如果同时包含了 armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是有时候为了减少apk的大小,不会同时设置 armeabi, armeabi-v7a 和 x86。根据不同的情况,可以进行不同的适配,

1.只适配 armeabi-v7a,因为目前主流机型是 ARMv7,并且 ARMv8 设备也向下兼容了armeabi-v7a,
Facebook、WhatsApp、王者荣耀等就是只适配了armeabi-v7a。(Google play store下载 Native libs Monitor 进行查看)。

2.只适配 armeabi,因为 ARMv7 、ARMv8 还是 x86 都兼容 armeabi,但是性能都会有些损耗,例如ARMv7 支持硬件浮点运算等没法体现,x86 支持 armeabi 同样具有相应的损耗。微信使用了此策略。

3.同时适配 armeabi-v7a 和 armeabi,既能够支持所有 ARM 架构,同时又能具有 ARMv7 支持硬件浮点运算等特性,例如Line等应用。

4.同时适配 x86 和 armeabi,既能支持所有 ARM 架构,又能支持x86架构,唯一的缺点就是没有了ARMv7 支持硬件浮点运算等一系列特性,例如QQ.

5.同时适配 armeabi, armeabi-v7a 和 x86,在性能方面来说是较为完美的方案,只是APK的大小也会随之的变大。

附:各CPU架构简介

ARM架构属于RISC指令集,指令集精简、指令等长,虽然这样的设计可以提高处理效率,但在遇到复杂的指令后,就需要更多的简单指令来堆砌复杂任务;ARM从来只是设计低功耗处理器。其宗旨是设计低功耗处理器,这是他们的强项。

armeabi:ARM架构的默认选项,支持基于 ARM* v5TE 的设备,支持软浮点运算,但不支持硬件辅助浮点运算,支持所有的 ARM* 设备。

armeabi-v7a:armeabi-v7a 向下兼容,在兼容 armeabi 的基础上,支持基于 ARM* v7 的设备,支持硬件 FPU 指令,支持硬件浮点运算,目前大部分机器都属于armeabi-v7a。

arm64-v8a:arm64-v8a向下兼容 armeabi 和 armeabi-v7a,最主要的区别在于 arm64-v8a 支持64位,在 MIPS64 架构上增加了 ARMv7 架构中已经拥有的的TrustZone技术、虚拟化技术及NEON advanced SIMD技术等特性(ARM收购MIPS)。架构中包含两个执行状态:AArch32(也就是我们常说的ARMv7)和AArch64(ARMv8),也就是说64位的ARM处理器中同时包含着32位的ARMv7和64位的ARMv8两种架构,直接导致每种架构所拥有的晶体管减半。

X86构架是英特尔推出的一种复杂指令集,用于控制芯片的运行的程序,目前该构架的处理器已经广泛运用在PC领域,由于X86构架的处理器芯片在性能上比较强劲,善于执行复杂工作,所以当英特尔进军移动市场领域后(例如联想K800),就出现了X86的架构。X86构架属于典型的CISC,指令集丰富,指令不等长,善于执行复杂工作,更强调串行性能,它的整体运算能力要比只为移动而生的ARM架构强大,并且在PC领域已经广泛应用,拥有深厚的技术背景。英特尔设计超高性能的台式机和服务器处理器,并且的确做的不错。

x86:英特尔推出的32位CPU架构,生成的二进制代码可支持包含基于硬件的浮点运算的 IA-32 指令集,同时,x86机器基本上可以使用 intel 的 libhounini 项目直接在x86机器上运行仅含armeabi的动态库代码,也就会说x86机器对armeabi也能够兼容,不过性能上会有些损耗。

x86_64:英特尔推出的64位CPU架构,向下兼容x86。

mips和mips_64:MIPS是一种高性能的嵌入式CPU构架,其出发点是高性能,主要用于路由器、猫等

总体来说,Android手机大部分采用的是ARM架构的CPU.

相关文章阅读:Android App 瘦身总结 —— jni动态库及cpu兼容

关于Android的.so文件 关于Android的.so文件 CPU架构与ABI的关系 Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。 应用程序二进制接口(Application Binary Interface)定义了二进制文件... 阅读详情

相关推荐

快速解决适配 64 位 App 的痛点

快速解决适配 64 位 App 的一个痛点!

技术引领业务创新 7619

一分钟搞明白Android的.so文件、ABI和CPU的关系

文章目录一、前言二、Android的CPU架构三、CPU与API的对应关系四、典型的 ABI 包含的信息五、.so文件的命名规范六、.so文件存放位置 一、前言 不同的Android手机使用不同的CPU,而不同的 CPU支持不同的指令集,CPU与指令集的每种组合都有专属的应用二进制接口,即 ABI。 二、Android的CPU架构 Android系统目前支持以下七种不同的CPU架构 CPU架构 描述 时间 ARMv5 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,

linxinfa的专栏 3895

安卓CPU架构全解析:arm64-v8a、armeabi-v7a、x86及x86_64的兼容性与实战选型指南

本文全面解析安卓CPU架构arm64-v8a、armeabi-v7a、x86及x86_64的区别与兼容性,提供实战选型指南。针对arm64-v8a这一主流架构,详细分析其性能优势及兼容策略,帮助开发者优化应用性能并避免常见崩溃问题,涵盖架构检测工具与APK体积优化方法。

tomato的博客 1218

Android 中arm64-v8a、armeabi-v7a、armeabi、x86简介~

LZ是一名96年Android小生,从14年9月培训出来到现在,差不多俩年多的时间,由于一些原因,没能好好把技术提升一下,实乃不该啊。 了解起因昨天师傅问,你知道这俩个是什么么?有什么作用么?(如下图所示) 现在还记得我那一脸蒙比的样子,诺诺的回答不晓得。师傅说这个是为了兼容一些手机,(此处省略滔滔不绝若干。。。)。听的我更加蒙比了,之前只是知道要把.so库扔进去,但是为什么扔,就不懂了,何谈我怎

静心 Study 16万+

Android ABI与CPU架构:从ARM、x86到MIPS的兼容性实战解析

本文深入解析Android开发中ABI与CPU架构的兼容性实践,重点探讨ARM、x86和MIPS等主流架构的特性差异与适配策略。通过实战案例详细介绍了多架构配置、性能优化技巧及常见兼容性问题的解决方案,帮助开发者高效管理原生库并优化应用性能。

tea88的博客 1035

Android动态注入SO文件技术详解

Android平台支持通过JNI(Java Native Interface)调用C/C++编写的原生代码,以提升性能、复用已有代码或实现底层功能。开发者通过JNI 可以在 Java 与 C/C++之间进行数据交互与函数调用,实现跨语言通信。为了适配不同的CPU架构,Android引入了ABI(Application Binary Interface)概念,常见的ABI包括armeabi-v7a、arm64-v8a、x86_64等。每种架构需要对应版本的.so(共享库)文件。

weixin_35705784的博客 1652

Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86

转载请注明出处: 简介 在Android日常的开发过程中有的项目需要引入第三方的库,有时候大家可能会在libs文件夹下看到mips、armeabi、armeabi-v7a和x86这四个文件夹。那么这三个文件夹下面的包是干什么用的?这三个包下面存放的用C编译的本地库文件(各类『.so』文件)。 mips、armeabi、armeabi-v7a和x86都表示CPU的类型。一般的手机或

Elven_Shi的专栏 1万+

android x86_64平台64位libc.so

解决undefined reference to `__system_property_get'问题,这是android x86_64平台64位libc.so

Linux 文件系统学习小结

Linux 系统根目录下面的目录名 /bin,重要的二进制应用程序,包含二进制文件,系统的所有用户使用的命令都在这里 /boot,启动包含引导加载程序的相关文件 /dev,包含设备文件,终端文件,USB 或者连接到系统的任何设备 /etc,系统配置文件,启动脚本等,包含所有程序所需要的配置文件,也包含了启动/停止单个应用程序的启动和关闭 shell 脚本。注意 /etc/passwd和/etc/group跟用户强相关。 /home,本地主要路径,所有用户用 h.

roufoo的博客 658

Android不同CPU架构下so文件兼容问题总结

一、Android 设备的CPU类型通常分以下几种 armeabiv-v7a: 第7代及以上的 ARM 处理器,目前主流版本,大部分Android设备都使用它。 arm64-v8a: 第8代、64位ARM处理器。 armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈。 x86 / x86_64: x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具, 实现对arm .so 的兼容。 mips/mips64:极少用于手机可忽略。 介绍几个专业词: ARM : 是嵌入式中的一种架构,全称为

SAP子公司财务账套配置实战:从公司代码到记账期间变式的关键步骤

本文详细介绍了为SAP子公司快速配置财务账套的实战步骤。通过复用母公司成熟配置,重点阐述了从创建公司代码、关联控制范围到分配记账期间变式的核心流程,帮助顾问在一两个小时内完成核心骨架搭建,实现高效集团财务管控。

cake8的博客 166

安装APK时SO库的选择策略

此文已由作者尹彬彬授权网易云社区发布。欢迎访问网易云社区,了解更多网易技术产品运营经验。0X0 前言在Android系统中,当我们安装apk文件的时候,lib目录下的so文件会被解压到app的原生库目录,一般来说是放到/data/data/<package-name>/lib目录下,而根据系统和CPU架构的不同,其拷贝策略也是不一样的,在我们测试过程中发现不正确地配置了so文件,比如某...

weixin_34315189的博客 326

SGM5860x高精度ADC驱动开发与SPI接口实战指南

本文详细介绍了SGM5860x高精度ADC芯片的驱动开发与SPI接口配置实战。内容涵盖芯片特性、SPI通信设置、寄存器映射、驱动初始化、数据采集处理、校准优化及调试技巧,帮助开发者快速掌握国产24位ADC的应用,提升工业测量项目的精度与稳定性。

vvv99的博客 718

Android so文件理解

一、so文件的概念 通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static libaray),通常文件名为“libxxx.a”的形式。 其实,我们也可以把对一些库函数的链接载入推迟到程序运行的时期(runtime)。这就是如雷贯耳的动态链接库(

分享Android开发知识 5296

矿卡CMP 170HX的AI推理性能优化实战

GPU计算在现代AI推理中扮演着核心角色,其并行计算架构特别适合处理神经网络的大规模矩阵运算。通过CUDA指令集优化和计算管线重构,可以显著提升硬件利用率,这在边缘计算和带宽敏感型任务中尤为重要。以NVIDIA CMP 170HX矿卡为例,通过禁用FMA指令和框架适配优化,其FP32性能可提升15.9倍,在Qwen2.5-1.5B模型的4-bit量化推理中达到A100同架构78%的解码速度。这种优化技术不仅让淘汰矿卡重获新生,更为边缘AI部署提供了高性价比解决方案,特别适合7B以下量化模型部署和多路视频分析

weixin_30432579的博客 633

SAP FI 会计科目表(COA)可直接套用配置模板

摘要:本文提供了SAP S/4HANA环境下可直接套用的会计科目表(COA)配置模板,包含科目编码规则、号段规划、科目组设置等核心内容。模板采用10位数字编码,按资产(1000)、负债(2000)、权益(3000)、成本(4000)、收入(5000)、费用(6000)六大类划分号段,并预设科目组控制字段状态。适用于集团/单一公司、国内/跨国企业场景,支持多表架构映射,配置完成后可通过事务码SAKO验证科目清单。模板遵循"前4位固定一级科目"原则,企业可根据行业特性调整明细科目。

金牌架构师 267

深入解析Android SO库与CPU架构适配实战指南

本文深入解析Android SO库与CPU架构适配的实战指南,涵盖ABI(应用二进制接口)的核心概念、设备架构检测与兼容性处理、SO库的生成与配置实战、高级优化与疑难排查等内容。通过详细的配置示例和实战案例,帮助开发者解决多架构适配中的常见问题,提升应用性能和兼容性。

weixin_29269441的博客 347

ThingsBoard教程(一):ThingBoard介绍及安装

ThingsBoard介绍 最近看了很多开源的物联网的项目,其中有一个让我印象很深,那就是Thingsboard 下面我就给大家介绍一下这个项目,并指导大家如何在本地安装一个Thingsboard来体验它。 首先引用官网的项目介绍就是 一个开源的用于数据收集,处理,可视化和设备管理的开源物联网平台。 它通过行业标准的物联网协议(MQTT,CoAP和HTTP)实现设备连接,并支持云和本地部署。ThingsBoard结合了可伸缩性,容错性和性能,因此您永远不会丢失数据。 用它开源收集链接设备,收集设备的数据,

知无涯 2万+

2024年安卓最全Android 关于CPU类型的so文件兼容问题(ABI)(2),Android高级工程师面试实战

网上高级工程师面试相关文章鱼龙混杂,要么一堆内容,要么内容质量太浅, 鉴于此我整理了上述安卓开发高级工程师面试题以及答案。希望帮助大家顺利进阶为高级工程师。目前我就职于某大厂安卓高级工程师职位,在当下大环境下也想为安卓工程师出一份力,通过我的技术经验整理了面试经常问的题,答案部分是一篇文章或者几篇文章,都是我认真看过并且觉得不错才整理出来。大家知道高级工程师不会像刚入门那样被问的问题一句话两句话就能表述清楚,所以我通过过滤好文章来帮助大家理解。

2401_84562962的博客 1033

QT+OSG/osgEarth编译之七十六:gltf+Qt编译(一套代码、一套框架,跨平台编译,版本:osgEarth-3.3插件库osgdb_gltf)

通过一套gltf代码和框架,实现osgdb_gltf跨平台编译。 在Qt环境下,集成头文件、库文件,构建跨平台编译的pro文件。 通过构建的一套配置工程,基于Qt Creator IDE,完成跨平台的编译实践。 在Windows、Linux、MacOS等操作系统上进行测试,成功编译,形成的成果(头文件、库文件等)可在不同系统下调用或使用,从而更好地构建跨平台解决方案。 采用的是osgEarth3.3版本。 读者可参考博客中的集成原理,构建不同版本的osgdb_gltf跨平台包。

LuckyHanMo的博客 1802

8、使用 TPCx - HCI 基准测试表征 HCI 集群的性能和弹性

本文详细介绍了 TPCx - HCI 基准测试,用于衡量超融合基础设施(HCI)集群的性能、稳定性和扩展性。TPCx - HCI 扩展了 TPCx - V 的理念,通过 Tile 架构和弹性特性,全面评估硬件、虚拟化、存储和网络组件的表现。文章还通过多个实验场景分析了负载均衡、数据布局和重新同步策略对性能的影响,并提出了部署和优化 HCI 集群的建议。

sun99的博客 179

java so apk_在安卓项目里部署so文件你需要知道的知识

1. 什么是CPU架构及ABIAndroid系统目前支持以下七种不同的CPU架构:ARMv***RMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运...

weixin_29775951的博客 503

​​光流结合深度学习实现物体运动方向判断

光流计算:提取每一帧视频中像素的运动信息,生成光流图。光流特征提取:通过特定的预处理,将光流图转换为深度学习模型可用的输入格式。深度学习模型设计:构建一个卷积神经网络(CNN)或其他适合的深度学习架构,利用光流特征进行运动方向分类。模型训练与推理:对网络进行训练并使用训练好的模型判断运动方向。光流与深度学习结合的运动方向判断技术在多个领域具有广泛的应用前景。通过光流提取像素级动态信息,并利用深度学习模型学习高层次特征,可以实现高精度的运动检测与方向判断。

matlab_python22的博客 321
上一篇: 【开发笔记】Android 正则表达式 密码验证
下一篇: Flutter运行app失败 running gradle task assembleDebug
LXB-89
博客等级 码龄11年 34粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值