MuMuPlayer 为什么性能这么好?

2024-12-30

先看一下它的技术组成。


VirtualBox VM 6.1.36_OSE r152435 win.amd64
C:\Program Files\MuMuVMMVbox\Hypervisor\MuMuVMMHeadless.exe

00:00:00.107800 SUP: Loaded MuMuVMMVMMR0.r0 (C:\Program Files\MuMuVMMVbox\Hypervisor\MuMuVMMVMMR0.r0) at 0xXXXXXXXXXXXXXXXX - ModuleInit at XXXXXXXXXXXXXXXX and ModuleTerm at XXXXXXXXXXXXXXXX using the native ring-0 loader
00:00:00.107808 SUP: VMMR0EntryEx located at XXXXXXXXXXXXXXXX and VMMR0EntryFast at XXXXXXXXXXXXXXXX
00:00:00.107810 SUP: windbg> .reload /f C:\Program Files\MuMuVMMVbox\Hypervisor\MuMuVMMVMMR0.r0=0xXXXXXXXXXXXXXXXX
00:00:00.109415 Guest OS type: 'Linux26_64'
00:00:00.113900 File system of 'C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-0\Snapshots' (snapshots) is unknown
00:00:00.113909 File system of 'C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-base\system.vdi' is ntfs
00:00:00.114853 File system of 'C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-0\ota.vdi' is ntfs
00:00:00.115851 File system of 'C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-0\data.vdi' is ntfs

Attempting fall back to NEM: AMD-V is not available
VboxPlayer

C:/Program Files/NetEase/MuMu Player 12/shell

技术组成结论

从日志里看出拥有很明显的虚拟机特征,虚拟磁盘vdi,virtio-net,明确的使用版本VirtualBox VM 6.1.36。

Android 版本是 Android 12。

目前猜测,通过控制 vboxmanager 命令启动一个 VBox 进行虚拟化,虚拟化启动以后,通过shell给虚拟机操作系统发送消息进行控制。

提示 AMD-V is not available 的原因

https://superuser.com/questions/1374694/amd-v-is-not-available-verr-svm-no-svm 以及 https://mumu.163.com/help/20210510/35043_946541.html?fqbanner 可得, AMD-V 启用的前提是 Hypervisor 也需要禁用。 部分Win10及以上系统的电脑在开启VT-x功能后,检测工具界面会有部分未通过检测的提示(如下图内红字提示),这是因电脑没有关闭掉Hyper-V或内核隔离导致。

尝试用模拟机去打开金融应用

模拟机直接闪退。

如何查看真机的日志

https://developer.android.com/studio/debug/logcat https://chenghu.online/posts/caf38928/

log:


2024-12-30 16:31:21.789  3048-3048  cmb.pb                  pid-3048                             W  Unexpected CPU variant for X86 using defaults: x86_64
2024-12-30 16:31:21.790  3048-3048  libnb                   pid-3048                             V  enter native_bridge2_initialize /data/user/0/cmb.pb/code_cache arm
2024-12-30 16:31:21.796  3048-3048  HP                      pid-3048                             D  initialize private_dir:/data/user/0/cmb.pb/code_cache instruction_set:arm
2024-12-30 16:31:21.798  3048-3048  cmb.pb                  pid-3048                             E  Not starting debugger since process cannot load the jdwp agent.
2024-12-30 16:31:22.199  3048-3048  libc                    pid-3048                             A  Fatal signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0 in tid 3048 (cmb.pb), pid 3048 (cmb.pb)
2024-12-30 16:31:22.285  3079-3079  DEBUG                   pid-3079                             A  Cmdline: cmb.pb
2024-12-30 16:31:22.285  3079-3079  DEBUG                   pid-3079                             A  pid: 3048, tid: 3048, name: cmb.pb  >>> cmb.pb <<<

real log:

2024-12-30 16:41:27.680  1258-1299  ActivityTaskManager     system_server                        I  Displayed cmb.pb/.app.mainframe.container.PBMainActivity: +1s291ms

显然, 对于真机应用的日志明显少了很多。

copyright ©2019-2024 shenzhen
粤ICP备20041170号-1