背景
前端时间用起pc应用宝这个软件,所以研究这个技术,我通过研究PC应用配置和AI 进行验证。
技术方案
- 编译 aosp 成x86
- 集成lib houdini库,市面大多数模拟器默认集成,貌似有授权问题,不知道国内模拟器有授权没有
- 开发自己模块,集成aosp中,主要功能读取界面数据(frame buffer)和 行为模拟等等
- 开发客户端,显界面和操作
- 维护各种APP兼容性,提供中间层做兼容
- virutalbox 编译或者直接使用virtualbox ,进行创建虚拟机和启动等等,用于跑x86 android 系统
PC应用宝验证
- 你可以在PC应用看到 AndrowsBox 文件夹,里面文件基本对应vritualbox ,它改了名字,大概把virtualbox 开源代码用来修改了
- Tencent\Androws\Image 中 androws.abox 文件就是配置virualbox 配置,他只是改了后缀而已,同时全局配置也只是改了路径
- ABoxHeadless.exe --comment TVM_3000 --startvm xxx 命令启动虚拟机,这个可以任务管理器查看命令行(默认不显示,要自己设置),这些命令都是virtualbox 一样
- uname -m ,可以得到这个系统android x86系统
- 在/system/bin 目录中你可以找到 houdini 这些文件,用来翻译跑arm 指令
mumu 模拟器验证
- Hypervisor\MuMuVMMHeadless.exe --comment MuMuPlayer-12.0-0 --startvm 1f4338ef-xxxxxx --vrde config 查看 这个MuMuVMMHeadless.exe是Copyright (C)2009-2025 Oracle Corporation,那么基本确定用virtualbox。
- adb 命令进行连接查看 命令 uname -m,查看得到x86_64
- 查看cd /system/bin,然后ls | grep houdini 得到 houdini 和 houdini64 文件,验证用来翻译arm 命令
- 中间层这种不用验证了,基本都是通过网络通信,起码捕获界面数据和模拟点击这个最基本行为,更不用机型修改和一些权限限制了。
为什么要android x86
性能,不用翻译指令,结合 intel 硬件虚拟化,性能跑起来非常高了,比起纯软件跑模拟指令快很多
虚拟机奇怪的知识点
因为研究android 模拟器,我就顺便研究虚拟机一些技术(感叹AI真的方便我这种喜欢研究技术,又无法跟身边交流的人,可以不停跟AI交流,优化思考同时还可以验证思考)
虚拟机本质是什么?
虚拟机本质是就是指令模拟+硬件行为模拟 ,这个我自己nes 模拟器身有体会,模拟指令行为,因为x86不能跑 nes cpu的指令,那显示更加不可能,所以我模拟指令,拿到对应的界面数据,然后不停渲染出来,只是nes 设备比较简单,指令也特别少,但它本质就是虚拟机技术。对于intel cpu模拟更加复杂,最头疼就是特权指令模拟,目前硬件虚拟机解决这个问题,所以为什么现在虚拟机跑起来速度快很多了。
虚拟机为什么要知道安装镜像系统和cpu架构?
虚拟机只有知道cpu架构,才能够虚拟对应设别,比喻显卡、比喻网卡、比喻声卡等等,我们对这些设备操作都是通过cpu 地址映射到对应设备地址中去,这些我们才能操作对应硬件,这个跟nes模拟器写0x2000 ~0x2007 等地址进行读写,其实对硬件ppu 的读写
根据系统主要对应行为模拟不一样,比喻该分配多少内存和一些模拟设备不一样,很简单到DOS 和 windows 显然很多行为不一样,那么模拟时候行为也不一样,所以知道一些系统是什么是来方便模拟器来模拟,理论上系统没有那么重要,因为虚拟机只是跑指令而已,我们知道系统,我们起码知道哪些基本设备需要模拟
心得
- 研究技术不一样自己实现,不然成本太高,我们可以通过现成产品进行研究大概得出一个结论
- 现在可以结合AI快速验证自己的想法,虽然很多时候是错误,但没有关系,自己可以通过前后逻辑进行验证
- android 技术研究过一段落,因为自己并不是想做一个android模拟器,只是好奇它技术实现而已,现在基本大概流程了,直接windwos pc应用宝基本就足够了,后续有时间说一下pc应用宝升级和一些不必要的文件可以进行删除,减少磁盘占用。