回退 android studio emulator 的版本

前情提要

最近用 frida 需要一个完全跑 arm64 的手机 os,因为雷电实时转义 arm 到 x64 的方案本质上还是 x64,会导致 frida 有 bug。查了一下有帖子说 android studio 自带的模拟器支持直接跑 arm64 的镜像 (Other Images)

直接跑跑不通,调试一波三折。首先是报错

复制代码
PANIC: Avd's CPU Architecture 'arm64' is not supported by the QEMU2 emulator on x86_64 host.

直接谷歌搜索有结果,不能用 api_version>= 28 的镜像,尝试用 27 的镜像,又报错

复制代码
PANIC: QEMU2 emulator does not support arm64 CPU architecture

发现在 2024 年 8 月的 35.3 版 emulator 移除了对 non-native architecture 的支持。源码在 main-emulator.cpp,patch 是 diff

c 复制代码
 static const struct {
         const char* arch;
         const char* qemuArch;
-        const char* qemuArchForce64;
     } kQemuArchs[] = {
-            {"arm64", "aarch64", "aarch64"},
-            {"x86", "x86_64", "x86_64"},
-            {"x86_64", "x86_64", "x86_64"},
+#ifdef __aarch64__
+            {"arm64", "aarch64"},
+#endif
+#ifdef __x86_64__
+            {"x86", "x86_64"},
+            {"x86_64", "x86_64"},
+#endif
     };
     size_t n;
     for (n = 0; n < ARRAY_SIZE(kQemuArchs); ++n) {
         if (!strcmp(avdArch, kQemuArchs[n].arch)) {
-            if (force64bitTarget) {
-                return kQemuArchs[n].qemuArchForce64;
-            } else {
-                return kQemuArchs[n].qemuArch;
-            }
+            return kQemuArchs[n].qemuArch;
         }
     }
     return NULL;

该 patch 导致该函数返回 NULL,触发报错。

原本是在 x64 机器上也能匹配到 arm64 的,现在只能在 native 原生 arm 的机器上才能匹配。

回退 emulator 的版本

在官网搜到了回退版本的教程 link,并附带了 zip 压缩包。

其实就是把原来的 emulator 文件夹删了(备份),把新的解压,再把原来文件夹里面的 xml 复制过来,改一下最下面的模拟器版本就好。

添加 -qemu -machine virt 参数

换版本之后大体没问题了,但直接跑会报错 PCI bus not available for hda

复制代码
Sdk\emulator\qemu\windows-x86_64\qemu-system-aarch64.exe: PCI bus not available for hda

google 了一下,添加 -qemu -machine virt 参数能用了。启动耗时 69s。

参考版本 emulator 34.2, image API27(arm)

md 但是只能装 arm64 的镜像,armeabi v7a 的镜像启不起来。有没有大手子刷到帖子的能救一下

相关推荐
molihuan6 分钟前
最新 将 MuPDF 编译到 Android 动态库 PDF解析渲染引擎
android·pdf
Rick199311 分钟前
mysql 慢查询怎么快速定位
android·数据库·mysql
2301_7717172110 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
dvjr cloi10 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
随遇丿而安13 小时前
第2周:`EditText` 不只是输入框,它是 Android 输入体验的第一道门
android
我命由我1234513 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
一起搞IT吧13 小时前
Android性能系列专题理论之十:systrace/perfetto相关指标知识点细节含义总结
android·嵌入式硬件·智能手机·性能优化
独隅16 小时前
Visual Studio 2026 详细安装教程和配置指南
ide·visual studio
小书房18 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
jinanwuhuaguo18 小时前
(第二十八篇)OpenClaw成本与感知的奇点——从“Token封建制”到“全民养虾”的本体论地基
android·人工智能·kotlin·拓扑学·openclaw