当前位置: 首页 > news >正文

回退 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

 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 的镜像启不起来。有没有大手子刷到帖子的能救一下

http://www.lryc.cn/news/533029.html

相关文章:

  • 数据资产的管理与价值释放
  • 部署夜景增强模型Learning to See in the Dark以及gradio UI编程方法
  • 【报错解决】MySQL报错:sql_mode=only_full_group_by
  • 【大数据技术】用户行为日志分析(python+hadoop+mapreduce+yarn+hive)
  • [Day 16]螺旋遍历二维数组
  • 大模型的底层逻辑及Transformer架构
  • 数据结构-基础
  • SystemUI中NavigationBar分析
  • MySQL的底层原理与架构
  • 三极管的截止、放大、饱和区
  • 2025-2-7-算法学习(一) 动态规划-习题1 300.最长递增子序列
  • 学习日记-250207
  • 【Block总结】PSA,金字塔挤压注意力,解决传统注意力机制在捕获多尺度特征时的局限性
  • 代码随想录算法训练营第三十一天| 回溯算法04
  • pycharm集成通义灵码应用
  • 赛博算命之 ”梅花易数“ 的 “JAVA“ 实现 ——从玄学到科学的探索
  • 【Leetcode刷题记录】54. 螺旋矩阵--模拟,以及循环条件处理的一些细节
  • c++计算机教程
  • 蓝桥杯Java之输入输出练习题
  • 【R语言】环境空间
  • 【系统架构设计师】分布式数据库透明性
  • openpnp2.2 - 环境搭建 - 编译 + 调试 + 打包
  • OpenCV:图像修复
  • QT全局所有QSS样式实时切换
  • MySQL三大版本的演进
  • 利用 IMU 估计人体关节轴向和位置 —— 论文推导
  • 脚本一键生成管理下游k8s集群的kubeconfig
  • 数据库系统概念第六版记录 三
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-files.py
  • 微信小程序案例1——制作猫眼电影底部标签导航栏