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

Android之64位和32位区分

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

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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ABI 是什么
  • 如何区分64位app 和32位app
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档