x86 架构的处理器可以运行 armeabi-v7a 指令吗?

2022-07-12 11:54:10 +08:00
 Kasumi20

发现微信安卓客户端只发布 arm32 和 64 位的,用一个 x86 的模拟器居然可以运行,why?

1825 次点击
所在节点    程序员
11 条回复
Kasumi20
2022-07-12 11:58:42 +08:00
我去,居然是这样的
Kasumi20
2022-07-12 11:58:46 +08:00
Android CPU 架构在当前市场的占有率
Android 目前支持 7 种 ABIs:mips, mips64, X86, X86–64, arm64-v8a, armeabi, armeabi-v7a



arm64-v8a: 第 8 代、64 位 ARM 处理器,目前主流版本。

armeabi-v7a: 第 7 代及以上的 ARM 处理器,2011 年 15 月以后的生产的大部分 Android 设备,现在以 arm64-v8a 为多。

armeabi: 第 5 代、第 6 代的 ARM 处理器,早期的手机用的比较多,可以兼容所有 ARM 设备,速度比较慢。

x86 / x86_64: 平板、模拟器用得比较多,x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现对 arm .so 的兼容,而且目前 x86 市场占有率很低,可能只有 1%,所以 x86 相关的两个 so 文件是可以忽略的。

mips / mips64: NDK 以前支持 ARMv5 (armeabi) 以及 32 位和 64 位 MIPS ,但 NDK r17 已不再支持,极少用于手机,可以忽略。



目前手机市场上,x86 / x86_64/armeabi/mips / mips6 的架构,基本可以不不考虑了,它们的占有量应很少很少了,arm64-v8a 作为最新一代架构,应该是目前的主流,armeabi-v7a 只存在少部分老旧手机。
yolee599
2022-07-12 12:28:11 +08:00
你确定你的模拟器是原生 x86 镜像的?而不是在运行在 x86 平台上的 arm 镜像?
Kasumi20
2022-07-12 12:39:01 +08:00
@yolee599 那肯定啊,cpuinfo 查过,可执行文件拉下来也是 Intel 80386 可执行文件
ysc3839
2022-07-12 13:06:41 +08:00
在系统中模拟执行的,不需要整个系统都模拟
kuro1
2022-07-12 13:37:57 +08:00
Android 11 ( API 30 ) x86 系统镜像文件(中)支持 ArmABI
kuro1
2022-07-12 13:40:15 +08:00
过去,开发者需要通过模拟器镜系统映像搭建一个完整的 ARM 环境,才能绕过这个限制并在 x86 机器上执行 ARM 应用。但是,把整个系统的 ARM 指令都转换成 x86 指令会造成过高的性能负荷,因此与基于 x86 的系统映像相比,完整的 ARM 系统映像在 x86 宿主机上的运行速度会慢很多,而且它还无法使用 x86 处理器提供的硬件加速和 CPU 虚拟化技术。

全新的 Android 11 系统映像与 ARM 兼容,它不仅允许整个系统在本机运行 x86 指令,而且还可以照常使用虚拟化技术。当应用的某个进程需要使用 ARM 二进制代码时,代码仅会在该进程内被转换成 x86 指令,其余进程将继续在 x86 环境内执行,包括 Android 运行时 (ART) 以及其它性能关键库,例如 libGLES 和 libvulkan 。除此以外,指令转换器也不会执行低层的硬件特定库,从而避免高成本的内存访问检测和相应的性能影响。在 ARM 公司的协作下,新的模拟器系统映像在本地和持续集成框架内均可运行。
0o0O0o0O0o
2022-07-12 13:44:11 +08:00
libhoudini
David1119
2022-07-12 18:18:28 +08:00
flyqie
2022-07-13 06:22:47 +08:00
是的,目前见到的多数模拟器都是直接用的 libhoudini 这种成熟的方案。

没记错的话类似方案 google 好像也搞了一套扔在开发者工具,不过没有多少人会拿来用在正式产品上。

#3 说的 x86 跑 arm 镜像,基本不可能。首先性能堪忧,其次目前大部分模拟器都是用的 virtualbox(virtualbox 貌似不支持 x86 模拟 arm)。

#6 说的 android11 模拟器镜像感觉很可能就是加了上文说的方案(时间线搞不太清,不是专职 android)

#9 说的 unicorn ,这个太底层了,通过它来直接开发,成本较高(有些 lib 还是得调 x86 的,全 qemu 模拟那性能没法看了)。
rev1si0n
2022-07-15 13:09:49 +08:00
用的 Intel 的 houdin 转译的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/865629

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX