前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Android之64位和32位区分

Android之64位和32位区分

作者头像
李小白是一只喵
发布于 2021-12-06 09:51:06
发布于 2021-12-06 09:51:06
8.8K0
举报
文章被收录于专栏:算法微时光算法微时光

ABI 是什么

Android编码时候 ,我们经常会看到ABI 。ABI的意思是 Application Binary Interface 的缩写。

不同 Android 手机使用不同的 CPU,因此支持不同的指令集。CPU 与指令集的每种组合都有其自己的应用二进制界面(或 ABI)。 ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互。 您必须为应用要使用的每个 CPU 架构指定 ABI。

常用的abi有:

  1. armeabi 对应着 ARMV5和ARMV6架构
  2. armeabi-v7a - 对应着 ARMV7a架构,是32位的寻址长度,里面放置32位系统上运行的so库
  3. armeabi-v8a - 对应着 ARMV8架构,64位寻址长度,里面放置64位的so
  4. x86 对应 x86架构(PC机的架构),里面放置x86上运行的so
  5. x86_64 对应着x86_64架构,里面放置x86_64上运行的so

可以通过Build.SUPPORTED_ABIS得到根据偏好排序的设备支持的ABI列表。

因为Android包管理器安装APK时,会自动选择APK包中为对应系统ABI预编译好的.so文件,不同的ABI,针对不同的cpu架构有不同的优先权例如: x86设备上,libs/x86目录中如果存在.so文件的话,会被安装,如果不存在,则会选择armeabi-v7a中的.so文件,如果也不存在,则选择armeabi目录中的.so文件。x86设备能够很好的运行ARM类型函数库,但并不保证100%不发生crash,特别是对旧设备。

image.png

64位设备(arm64-v8a, x86_64, mips64)能够运行32位的函数库,但是以32位模式运行,在64位平台上运行32位版本的ART和Android组件,将丢失专为64位优化过的性能(ART,webview,media等等)

如何区分64位app 和32位app

当下载安装一个App之后,从Launcher启动该应用,系统会由Zygote分叉出一个子进程来提供App运行的虚拟机和Runtime环境。

与32位系统不同的是,在64系统中会同时存在两个Zygote进程——zygote和zygote64,分别对应32位和64位应用。

所以,要进行App的32/64位检测,只需要看它的父进程是哪个Zygote即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/9/6 下午,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android中架构X64与X32的不同
众所周知,安卓支持3类处理器(CPU):ARM, Intel和MIPS。其中ARM无疑被使用得最为广泛。Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小。MIPS在32位和64位嵌入式领域中历史悠久,获得了不少的成功,可目前Android的采用率在三者中最低。 处理器(CPU)
胖虎哥
2023/05/10
1.2K0
怎样新建jniLibs, RTLD_LAZY) failed: dlopen failed: "/data/app/com.itep.mt.dispatch-is too small to be an
报错:E/art: dlopen("/data/app/com.itep.mt.dispatch-1/lib/arm/libCommunication.so", RTLD_LAZY) failed: dlopen failed: "/data/app/com.itep.mt.dispatch-1/lib/arm/libCommunication.so" is too small to be an ELF executable: only found 0 bytes
zhangjiqun
2024/12/16
870
怎样新建jniLibs, RTLD_LAZY) failed: dlopen failed: "/data/app/com.itep.mt.dispatch-is too small to be an
Android arm64-v8a、armeabi-v7a、armeabi详解「建议收藏」
早期的Android系统几乎只支持ARMv5的CPU架构,后面发展到支持七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。 应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。 在Android 系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。 但是最新的谷歌官方文档已经把mips和armv5移除了,如图所示:
全栈程序员站长
2022/07/30
24K0
Android arm64-v8a、armeabi-v7a、armeabi详解「建议收藏」
android64位机子兼容32位.so库文件
64位的操作系统可以兼容32位的库文件。于是多方查找资料。终于在一家英文网站上找到了答案。
用户1696846
2023/08/25
9180
Android系统目前支持CPU架构都有哪些
arm64-v8a是可以向下兼容的,其下有armeabi-v7a,armeabi armeabi-v7a向下兼容armeabi
乱码三千
2021/08/24
3.2K0
成功逆袭:越来越胖怎么能忍,我的APK瘦身之路!
随着版本迭代,功能增加安装包体积也会慢慢增大。本文主要是介绍APK瘦身中用到的一些方法。
Android技术干货分享
2019/08/21
8820
成功逆袭:越来越胖怎么能忍,我的APK瘦身之路!
安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 背景 Android 系统本质是一个经过改造的 Linux 系统,so库是Linux系统上使用的共享库(类似windows上的dll)。最早,Android 系统只支持 ARMv5 的 CPU 构架,随着 Android 系统的发展,又加入了 ARMv7 (2010), x86 (2011), MIPS (2012), ARMv8, MIPS64 和 x86_64 (2014)。每一种 CPU 构架,都定义了一种 ABI(Application Binary
全栈程序员站长
2022/08/26
3.9K0
Android性能优化之APK瘦身详解(瘦身73%)
首先上传一张瘦身前通过Analyze app分析出来的图片(打开方式:Android Studio下 ——> Build——> Analyze app):
Android技术干货分享
2019/06/03
1K0
APK安装流程详解4——安装中关于so库的那些事
不同的Android手机使用不同的CPU,因此支持不同的指令集。CPU与指令集的每种组合都有其自己的应用二进制接口(或ABI)。"ABI"精确定义了"运行时,应用的机器码和系统的交互方式"。你必须为应用要使用每个CPU架构指定ABI。
隔壁老李头
2018/08/30
4.3K0
APK安装流程详解4——安装中关于so库的那些事
关于so文件你需要知道的知识「建议收藏」
Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。
全栈程序员站长
2022/10/02
3K0
说说Android项目中的armeabi,armeabi-v7a和x86
   这三者都表示的是CPU类型,早期的Android系统几乎只支持ARMv5的CPU架构,但是现在已经有7种了。ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI(应用程序二进制接口(ApplicationBinary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库)。Android现在的主流CPU是armeabi-v7a。armeabi-v7a是针对有浮点运算或高级扩展功能的ARMv7 CPU。
Zachary46
2018/09/12
2.1K0
说说Android项目中的armeabi,armeabi-v7a和x86
FFmpeg4.0.2编译32位和64位动态库,并且引入到Android项目中
近期刚好用到FFmpeg来处理视频编码,由于网上各种版本的so库大部分都32位的,所以打算自己来编译32位和64位的库,我之前有写编译32位的库https://cloud.tencent.com/developer/article/1661468里面有关于ndk和32位的相关配置。今天主要是总结一下FFmpeg的64位的动态库编译。
包子388321
2020/07/14
2.9K0
Android 中arm64-v8a、armeabi-v7a、armeabi、x86简介~
LZ是一名96年Android小生,从14年9月培训出来到现在,差不多俩年多的时间,由于一些原因,没能好好把技术提升一下,实乃不该啊。
贺biubiu
2019/06/10
9.2K0
LiteAVSDK集成,动态加载so库
安卓开发中使用Android studio集成三方SDK(比如腾讯视频云移动直播、播放器、短视频、实时音视频),通常有两种集成方式:aar集成、jar+so集成。安卓集成已经很成熟了,详见SDK集成指引。
腾讯云-chaoli
2019/05/06
8.7K0
LiteAVSDK集成,动态加载so库
Android 调用so库全过程
Android中有时候为了效率以及平台开发库的支持,难免会用到NDK开发,那么都会产生一个so文件,通过native方法进行调用,开发和调用步骤很简单,这里就不多说了,本文主要来介绍,我们在使用so的时候总是会出现一些常见的问题,而现在插件化开发也很普遍了,有时候插件中也会包含一些so文件,需要加载,这时候也会出现一些问题。本文就来详细总结一下这些问题出现的原因,以及解决方法,主要还是通过源码来分析。
全栈程序员站长
2022/07/02
6.9K0
Android 调用so库全过程
Android 引用第三方so文件
应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。在Android 系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。
码客说
2019/10/22
2.7K0
Android的.so文件你需要知道那些知识
.so文件的前世今生 早期的Android系统几乎只支持ARMv5的CPU架构,而现在它可以支持7种,几乎涵盖了市面上大部分的CPU架构。 Android系统目前支持的CPU架构主要包含以下7种:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。 二进制接口(ABI) 应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤
xiangzhihong
2018/02/06
1.7K0
Android的.so文件你需要知道那些知识
Android开发笔记(一百七十三)给安装包APK文件瘦身
App不但要求功能完善,其他方面也得综合考虑,比如APK安装包的文件大小就是很重要的因素。具备同样功能的两个安装包,一个很大很占用空间,另一个较小不怎么占空间,用户的选择结果自然不言而喻。如何减少打包后的APK文件大小,也就是所谓的APK瘦身,这涉及到很多技术手段,最常用的主要有四块:去除冗余功能、精简无用资源、减少图片大小、过滤无用的so文件,分别介绍如下:
aqi00
2020/09/08
8240
64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本
当你想下载Linux、JDK、Tomcat、eclipse时,你是下载32位版本还是64位版本?64位版本有两种,应该选哪一个?
我是李超人
2020/08/21
1.2K0
android开发 加载so库的解析和出现的各种错误分析
早期的Android系统几乎只支持ARMv5的CPU架构,你知道现在它支持多少种吗?7种!
再见孙悟空_
2023/02/10
2.4K0
android开发 加载so库的解析和出现的各种错误分析
推荐阅读
相关推荐
Android中架构X64与X32的不同
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档