Repository navigation
ModAVDManager v0.7.0
ModAVD.exe:76b27aa31e7b6baac0d45ab8df916c7a91a1d8ed13107e2c70e5b270032a197dtools/modavd.exe:556ca3a553bc2be1cab081fe22e53dd17c2042390ba19c9bb02318fa8cdbd77f
随 ModAVD 0.39.1 进包。下面是相对 v0.6.0 的改动。这一版主要是修新建、开机时管理器看不到私有 adb server、等满 300 秒才报超时的问题(ModAVD/ModAVD#172);另外「设置」里的「更新」能用了,Windows 上小块同步写盘也快了。
新增
-
「设置」里的「更新」能用了:
- 点「检查更新」找到新版以后,「更新」才能点。点了先弹框,写明会关掉几台在运行的实例。
- 确认以后,管理器下载、按清单核对、暂存好新版,这时实例照常运行(更新任务和别的任务互斥,这期间在管理器里开关不了实例);然后正常关掉所有在运行的实例,中间不再问。交给
tools\modavd.exe换上新版后,管理器自己退出;换好后自动重新打开管理器,提示「已更新到 X」,或者没换上的原因和建议。 - 有别的程序在用这个根目录的 modavd(比如
modavd mcp),或者有实例正在新建,就一台实例都不关,先提示你处理。 - 换不上(比如有程序占着文件)也照样重新打开管理器,下载好的新版留着,下次不用重下。换包的过程记在
logs\modavd-update.log。 - 新版要求更高版本的 AUTO-MAS 时,设置和确认框里会写出来,用 AUTO-MAS 的请先更新 AUTO-MAS;管理器换包时不查 AUTO-MAS 的版本,和用命令行装一样。
- 只在 Windows 上能用。这个功能从这一版才有,所以更新到这一版还是照原来的办法:在 AUTO-MAS 里更新,或者关掉所有实例和管理器,把新版整包覆盖解压到根目录。用 AUTO-MAS 的,以后也照旧可以在 AUTO-MAS 里更新,它用自己设置里的更新源和 CDK。
(ModAVDManager#115)
-
问题包(「收集问题信息」、
collect-info)多收几样东西,开机超时这类问题不用再另外找你要:- 管理器自己的日志:
logs\modavd-ui.log、modavd-bootwatch.log、adb-server.log,以及各自的.1,每份取最后 5 MB。 - 所有 adb.exe 进程(pid、启动时间、路径、命令行),以及 adb server 自己的日志(
%TEMP%\adb.log,设了ANDROID_ADB_LOG_PATH就取它)的最后 2 MB。 - Windows 保留的 TCP 端口(
netsh interface ipv4 show excludedportrange protocol=tcp的输出),并指出本目录的两个 adb server 端口、各实例的端口有没有落在保留范围里。
(ModAVD/ModAVD#172,ModAVDManager#112、ModAVDManager#113)
- 管理器自己的日志:
变更
-
Windows 上小块同步写盘快约 1.5 倍:
- 游戏下载资源时常常每写一小块就要求落盘一次(明日方舟每 7 KB 一次),每次都要等模拟器和电脑之间往返一趟,下载只有约 8 MB/s。开机时多给模拟器两个参数,缩短每一趟要等的时间:实测明日方舟下资源从约 7.5 MiB/s 提到约 11.5 MiB/s,模拟器占的 CPU 也从约 6 个核降到约 4 个。大块写盘和开机时间没有变慢。
- 「写完」的含义不变:数据进了电脑上的文件才算写完,模拟器被强行结束时能保住的东西和以前一样。
- 以前为了下载快,开机后会在客体里起一个守护(
mas-idlepoll.sh),密集小块写盘时让 vCPU 忙等(不超过电脑余下的核数);现在客体自己只在等读写时短暂忙等,就不再起它,下载时不再把那些核占满。 - 由 modavd(管理器、命令行、MCP)开机时生效,已经开着的实例要关机再开一次。想退回原来的做法,设环境变量
MODAVD_SYNC_IO=off再开机。
(ModAVD/ModAVD#35,ModAVDManager#116)
-
开机前不再查电脑内存:
- 以前空闲物理内存不到「实例内存 + 1.5 GB」就不让开机。可页面文件(虚拟内存)能补上物理内存的不足,这时其实开得了机,只是慢一些。现在「电脑检查」里没有「内存」这一项,也不再因为它挡开机。
- 模拟器真分不到实例的内存时,会自己退出并在日志里写明。管理器认出这种情况,就报「电脑内存不足,模拟器分不到实例的内存」,建议关闭部分程序、调小实例内存,或调大虚拟内存(页面文件);别的原因退出照旧报启动失败。实例卡片上的「调小内存」按钮改为在这种失败时出现。
(ModAVDManager#118)
-
为了少被杀毒软件误报(0.38.2 的
tools\modavd.exe被 Microsoft Defender 的机器学习规则误报过):- 两个 exe 带上版本信息,文件属性里能看到产品名 ModAVD、说明和版本号;不再去掉符号表。
- 复制配置信息、收集问题信息要查系统信息(WMI)时,隐藏启动的 PowerShell 不再从编码过的命令行(
-EncodedCommand)拿脚本,改为从标准输入读;收集到的内容和以前一样。 - 按应用走代理用的客体守护进程原样放进 exe,不再压缩。
- 两个 exe 因此各大了约 6 MB。会不会再被误报,要等这一版发出去才知道。
(ModAVDManager#107、ModAVDManager#108)
-
名字统一叫 ModAVD,不再叫「魔改 AVD」:日志、报错、命令行帮助、问题包和配置信息的标题都换了,问题包文件名从
魔改AVD问题信息-<时间>.zip改成ModAVD-问题信息-<时间>.zip。几处默认你在用 AUTO-MAS 的文字改成照实写:补全组件做完提示「可以新建实例了」;没找到 AUTO-MAS 时注明不用 AUTO-MAS 的不用管;复制配置信息里要你补的一行改成「怎么用的(自己玩 / AUTO-MAS 及版本 / MAA、M9A 等脚本)」。只改文字,行为不变。(ModAVDManager#111) -
NOTICE 和 README 里图标的说明改成:图标是 ModAVD 自己的,不在代码许可范围内。只改说明。(ModAVDManager#106)
-
macOS(Apple Silicon):
- 实例的新建、开机、关机、查看、修改设置和删除放开了,用官方的 ARM64 模拟器 37.2.13 和 Android 15 ARM64 镜像;执行桥、运行中显示 / 隐藏窗口、给实例装卸商店还不能用。
- 更新设置和组件下载源存在
~/Library/Application Support/ModAVD/,Mirror 酱 CDK 加密保存,密钥放在当前用户的钥匙串里;钥匙串锁着或没授权时保存失败,不弹授权框,也不改存明文。 - 复制配置信息(
report-config)和收集问题信息(collect-info)能用了:只收所选根目录的配置白名单和文本日志(每份最多 2 MiB,最多 8 份、共 20 MiB),过滤常见的凭据、路径和设备标识,不收截图和系统转储;分享前请自己再看一遍。 - 这一版还只出 Windows 包,Mac 版没有发布,完整打包和上机验收在后面的阶段。Windows 上不受影响。
(ModAVDManager#94、ModAVDManager#95、ModAVDManager#96)
修复
-
Windows 10.0.26300 上新建、开机要等满 300 秒才报失败:
- 这个版本的 Windows 上,系统 TCP 监听表里私有 adb server 那一行的状态常常不是「监听」。管理器以前只信这张表,就一直认定 adb server 没起来,每 20 秒重起一次,一条 adb 命令也不发;安卓明明开好了,也要等满 300 秒。
- 现在判断私有、脚本 adb server 在不在,先直接连它的端口问一句版本(adb 客户端本来第一句就问这个,对 server 没有影响),有应答就用;能连上、答的却不是 adb 时,才查监听表看端口被谁占着。
- 26300 上的情况我们这里复现不了,是按用户的日志和问题包修的。
(ModAVD/ModAVD#172,ModAVDManager#117)
-
私有 adb server 起不来、或者起来以后又没了,现在能看出原因:
- 私有、脚本两个 adb server 的日志写到
logs\adb-server.log,不再混进%TEMP%\adb.log;模拟器开机结束时自己调 adb、顺手起的 server 也写这里。超过 2 MB 时换成.1。 - server 起了却没在时限内监听上,或者起来过又不见了(已经退出,还是还在但不再监听),管理器会报出来,附上这份日志的最后几行;同样的内容只报一次。
(ModAVD/ModAVD#172,ModAVDManager#113)
- 私有、脚本两个 adb server 的日志写到
-
安卓开好了、私有 adb 却连不上时,不再干等到 300 秒:
- 模拟器报告开机完成以后,每 10 秒替实例向私有 adb server 补登记一次。模拟器只在开机结束时登记那一次,server 要是之后才起来或者重启过,以前就再也看不到这台实例。
- 报告开机完成 60 秒后还连不上,就报「安卓已经开好了,但之后 N 秒里私有 adb 一直用不了」,带上 adb 日志的最后一行。等满总时限时也这么报,不再说「安卓没有启动完成」。
(ModAVD/ModAVD#172,ModAVDManager#113)
-
补全组件时,把解好的目录挪进
sdk遇到拒绝访问、文件被占用(多半是安全软件在扫刚写出的文件),先重试 30 秒,还不行就复制过去,不再直接失败。(ModAVD/ModAVD#172,ModAVDManager#113) -
打开诊断模式时,偶尔会在日志采集还没切换过去时就报告已经打开;现在等切换完成才返回。(ModAVDManager#109)
给调用方(AUTO-MAS)
protocol还是 2:没有删命令、参数和--json字段,已有错误码、退出码的含义不变;加了错误码insufficient_memory和退出码 10,check少了内存一项(见下)。调用方不用改,不认识退出码 10 的按一般失败处理就行。- 新错误码
insufficient_memory(退出码 10):- 要开机的命令都可能报:
start、create(含--resume)的初始化开机、gles32 <i> on|off和playstore <i> install|uninstall里的冷启动;MCP 的start_instance、create_instance也一样。管理器接口回 502,和launch_failed一样。 - 什么时候报:emulator.exe 退出、qemu 也不在了,而且这次开机的模拟器日志(每次开机一个新文件)里有分不到内存的那几句:
Insufficient RAM free for launching emulator、cannot set up guest memory、Failed to allocate memory、PANIC: not enough memory。别的提前退出照旧是launch_failed(退出码 7)。带不带--json都一样。 error.message是「ModAVD 实例 N 启动失败:电脑内存不足,模拟器分不到实例的内存(emulator.exe 退出码 X):」加模拟器日志的最后几行;error.advice是「请关闭部分程序、调小实例内存,或调大虚拟内存(页面文件)」,不附「下次开机补做设置」那句(模拟器已经不在了)。error.details和launch_failed时一样,没有reason:start带instance_status(一般是offline,看不准时是unknown)和qemu_running(一般是false),模拟器已经退出,所以没有boot_diag_dir;新建的初始化开机另带instance_exists,instance_status是create_failed。
- 要开机的命令都可能报:
- 开机前不再查内存:
- 以前:空闲物理内存不到「实例内存 + 1.5 GB」时,要开机的命令在拉起模拟器之前就报
precheck_failed(退出码 4,没有error.details.reason),消息是「电脑可用内存不足:实例内存 … GB,启动约需 … GB,当前可用 … GB」,建议「请关闭部分程序,或调小实例内存」;check(MCPcheck_host)的items里有一项id为memory的阻塞检查,不够时ready为false。 - 现在不会再因为内存报
precheck_failed;check的items里没有memory这一项,ready也不再因为内存为false。check --memory和 MCPcheck_host的memory_mb照收、不报错,但不再起作用。 - 以前靠
precheck_failed加消息里的「内存」认内存不足的,改认insufficient_memory。
- 以前:空闲物理内存不到「实例内存 + 1.5 GB」时,要开机的命令在拉起模拟器之前就报
- 等开机:模拟器已经报告安卓开机完成、私有 adb 却连不上时,60 秒后就报
timeout(退出码 6),不再等满总时限;错误码不变,消息改成「ModAVD 实例 N 的安卓已经开好了(模拟器报告开机完成),但之后 N 秒里私有 adb(端口 P)一直用不了」,可能带上 adb 日志的最后一行。 update install新加--after-pid、--reopen、--reopen-arg,给管理器的「更新」用,只能和install一起用;不给时和以前一样。交接结果写在.update\manager-result.json。AUTO-MAS 的更新器照旧用它自己的,两个更新器之间仍然没有共用的磁盘锁,和直接用modavd update时一样;管理器下载时自己开着,交给命令行以后命令行在跑,AUTO-MAS 5.8.0 起看到这些进程占着根目录就不换包。- 文字:日志、报错消息和命令行帮助里的「魔改 AVD」都换成 ModAVD,错误码、退出码不变;问题包文件名改成
ModAVD-问题信息-<时间>.zip。 - 私有、脚本 adb server 的日志改写到
logs\adb-server.log(modavd 起 server 时设ANDROID_ADB_LOG_PATH),不再写进%TEMP%\adb.log。 - 开机参数(只在 Windows 上):modavd 开机时在
-qemu后面多带-global virtio-blk-pci.ioeventfd=off和-acpitable file=…(实例目录里按核数生成的modavd-cst.aml;表写不了或读不出核数时只带前一个);设了MODAVD_SYNC_IO=off就都不带。只有 modavd 开机时才带,别的程序自己拉起模拟器时不会有。
下载与核对
用 Go 1.26.5、GOTOOLCHAIN=local 运行仓库里的 build.ps1,能编出相同的字节。单独下载的包里还有 Go 的许可原文和文件清单。请用附件 SHA256SUMS.txt 核对 zip 和解压出的两个 exe,例如在 PowerShell 里运行 Get-FileHash .\ModAVDManager-0.7.0-win-x64.zip -Algorithm SHA256。
单独下载的管理器不会自己更新,新版本要手动替换;ModAVD 包里的那份随 ModAVD 整包一起更新。单独使用时请给 --root 或设置 MODAVD_ROOT,否则会提示找不到 ModAVD 根目录。不要把单独下载的 zip 解压到 ModAVD 根目录,覆盖整包里的文件。
English
Shipped in ModAVD 0.39.1. Changes since v0.6.0. This release mostly fixes creating and starting instances failing only after a full 300-second wait because the manager could not see its private adb server (ModAVD/ModAVD#172); in addition, "更新" (update) in "设置" (settings) now works, and small synchronous disk writes are faster on Windows.
New
-
"更新" (update) in "设置" (settings) now works:
- It becomes available once "检查更新" (check for updates) has found a new version. Clicking it first shows a dialog saying how many running instances will be stopped.
- Once you confirm, the manager downloads the new version, checks it against the manifest and stages it while instances keep running (the update task excludes other tasks, so instances cannot be started or stopped in the manager meanwhile); then it stops every running instance normally, without asking again. It hands over to
tools\modavd.exeto swap in the new version and exits; after the swap the manager is opened again and shows "已更新到 X" (updated to X), or why the new version was not swapped in and what to do. - If another program is using modavd in this root (such as
modavd mcp), or an instance is being created, no instance is stopped and you are asked to deal with that first. - If the swap fails (for example a program holds a file), the manager is still opened again and the downloaded version is kept, so it need not be downloaded again. The swap is logged in
logs\modavd-update.log. - When the new version needs a newer AUTO-MAS, the settings and the confirmation dialog say so; if you use AUTO-MAS, update it first. Like installing from the command line, the manager does not check the AUTO-MAS version when it swaps.
- Windows only. The feature is new in this release, so updating to this release still works the old way: update in AUTO-MAS, or stop all instances and the manager and extract the new full package over the root. If you use AUTO-MAS, you can keep updating in AUTO-MAS; it uses the update source and CDK in its own settings.
(ModAVDManager#115)
-
The problem package ("收集问题信息" (collect problem info),
collect-info) collects more, so problems such as start-up timeouts no longer need a second round of asking:- The manager's own logs:
logs\modavd-ui.log,modavd-bootwatch.log,adb-server.logand their.1files, the last 5 MB of each. - All adb.exe processes (pid, start time, path, command line), and the last 2 MB of the adb server's own log (
%TEMP%\adb.log, orANDROID_ADB_LOG_PATHwhen set). - The TCP ports Windows has reserved (the output of
netsh interface ipv4 show excludedportrange protocol=tcp), and whether the root's two adb server ports or any instance's ports fall in a reserved range.
(ModAVD/ModAVD#172, ModAVDManager#112, ModAVDManager#113)
- The manager's own logs:
Changes
-
Small synchronous disk writes are about 1.5 times as fast on Windows:
- While downloading resources, games often ask for each small write to reach the disk (Arknights every 7 KB). Each such request waits for a round trip between the emulator and the computer, so downloads ran at about 8 MB/s. Two more emulator arguments at boot shorten what each round trip waits for: in our tests Arknights resource downloads went from about 7.5 MiB/s to about 11.5 MiB/s, and the emulator used about 4 host cores instead of about 6. Large writes and boot time did not get slower.
- What "written" means is unchanged: a write is done once the data is in the file on the computer, and a forcibly killed emulator keeps exactly what it kept before.
- To make downloads faster, a daemon in the guest (
mas-idlepoll.sh) used to be started after boot and, during dense small writes, keep vCPUs busy-waiting (no more than the computer's spare cores). The guest now busy-waits briefly by itself only while it waits for disk I/O, so the daemon is no longer started and downloads no longer max out those cores. - It applies to boots by modavd (the manager, the command line, MCP); an instance that is already running needs to be stopped and started again. To go back to the old way, set the environment variable
MODAVD_SYNC_IO=offbefore booting.
(ModAVD/ModAVD#35, ModAVDManager#116)
-
Host memory is no longer checked before a boot:
- A boot used to be refused when free physical memory was below the instance's memory plus 1.5 GB. But the page file (virtual memory) makes up for missing physical memory, so such a boot actually works, only more slowly. "电脑检查" (computer check) no longer has a "内存" (memory) item, and memory no longer blocks a boot.
- When the emulator really cannot get the instance's memory, it quits and says so in its log. The manager recognises this and reports that the computer does not have enough memory for the instance, advising you to close some programs, lower the instance's memory, or enlarge virtual memory (the page file); an exit for any other reason is still reported as a failed start. The "调小内存" (lower memory) button on the instance card now appears with this failure.
(ModAVDManager#118)
-
To be flagged less by antivirus software (Microsoft Defender's machine-learning rules flagged the
tools\modavd.exeof 0.38.2):- Both exes carry version information (the file properties show the product name ModAVD, a description and the version number), and their symbol tables are no longer stripped.
- When copying the configuration or collecting problem info queries system information (WMI), the hidden PowerShell no longer gets its script from an encoded command line (
-EncodedCommand); it reads it from standard input instead. What is collected is the same as before. - The guest daemon for the per-app proxy is embedded as is, no longer compressed.
- Each exe is about 6 MB larger as a result. Whether they get flagged again can only be known once this release is out.
(ModAVDManager#107, ModAVDManager#108)
-
One name, ModAVD, instead of "魔改 AVD": logs, error messages, command help and the titles of the problem package and the configuration info all changed, and the problem package is now named
ModAVD-问题信息-<time>.zipinstead of魔改AVD问题信息-<time>.zip. A few texts that assumed you use AUTO-MAS now say what is true: after fetching components it says "可以新建实例了" (you can create instances now); when AUTO-MAS is not found it notes that people who do not use AUTO-MAS can ignore that; and the line you fill in for the configuration info now asks how you use it (playing yourself / AUTO-MAS and its version / scripts such as MAA or M9A). Only text changed; behaviour did not. (ModAVDManager#111) -
The icon notes in NOTICE and the README now say the icons are ModAVD's own and not covered by the code licence. Only the notes changed. (ModAVDManager#106)
-
macOS (Apple Silicon):
- Creating, starting, stopping, querying, changing and deleting instances is now open, with the official ARM64 emulator 37.2.13 and the Android 15 ARM64 image. The execution bridge, showing or hiding a running instance's window, and installing or removing the store in an instance are still not available.
- Update settings and the component download source are kept in
~/Library/Application Support/ModAVD/; the Mirror 酱 CDK is stored encrypted, with the key in the current user's Keychain. When the Keychain is locked or access is not granted, saving fails without an authorization prompt, and nothing falls back to plain text. - Copying the configuration (
report-config) and collecting problem info (collect-info) now work: they take only an allow-list of the selected root's configuration and its text logs (up to 2 MiB each, at most 8 files and 20 MiB in all), filter common credentials, paths and device identifiers, and leave out screenshots and system dumps. Check the package before you share it. - This release still ships only the Windows package; there is no Mac release, and full packaging and testing on a Mac come in later stages. Windows is not affected.
(ModAVDManager#94, ModAVDManager#95, ModAVDManager#96)
Fixes
-
On Windows 10.0.26300, creating or starting an instance failed only after waiting the full 300 seconds:
- On this Windows build, the private adb server's row in the system's TCP listener table often does not have the "listening" state. The manager trusted only that table, so it kept concluding that the adb server was not up, started a new one every 20 seconds and never sent a single adb command; even with Android booted, it waited the full 300 seconds.
- To tell whether the private or the script adb server is there, the manager now first connects to its port and asks for its version (an adb client asks that first anyway; it does not affect the server), and uses the server when it answers. Only when something on the port answers but is not adb does it read the listener table to find out who holds the port.
- We could not reproduce the 26300 behaviour here; the fix is based on users' logs and problem packages.
(ModAVD/ModAVD#172, ModAVDManager#117)
-
When the private adb server does not come up, or comes up and then goes away, the reason can now be seen:
- The private and script adb servers log to
logs\adb-server.loginstead of mixing into%TEMP%\adb.log, including the server started when the emulator calls adb at the end of a boot. Past 2 MB the log becomes.1. - When a server is started but does not listen in time, or was up and has gone (exited, or still running but no longer listening), the manager says so with the last lines of that log; the same content is reported only once.
(ModAVD/ModAVD#172, ModAVDManager#113)
- The private and script adb servers log to
-
When Android has booted but the private adb cannot reach it, the manager no longer just waits out the 300 seconds:
- Once the emulator reports the boot complete, the manager registers the instance with the private adb server every 10 seconds. The emulator registers only once, at the end of the boot; a server that came up or restarted after that used to never see the instance.
- If adb still cannot reach it 60 seconds after the boot was reported complete, the manager reports that Android has booted but the private adb has been unusable for N seconds, with the last line of adb's log. The same is reported when the overall time limit runs out, instead of saying that Android did not finish booting.
(ModAVD/ModAVD#172, ModAVDManager#113)
-
When fetching components, moving an unpacked folder into
sdkthat hits access denied or a file in use (most likely security software scanning newly written files) is retried for 30 seconds and then done by copying, instead of failing at once. (ModAVD/ModAVD#172, ModAVDManager#113) -
Turning diagnostic mode on could occasionally report it on before log capture had switched over; it now waits until the switch is complete. (ModAVDManager#109)
For callers (AUTO-MAS)
protocolis still 2: no command, argument or--jsonfield was removed, and existing error codes and exit codes keep their meaning; the error codeinsufficient_memorywith exit code 10 was added, andchecklost its memory item (see below). Callers need no changes; a caller that does not know exit code 10 can treat it as a general failure.- New error code
insufficient_memory(exit code 10):- Any command that boots an instance can return it:
start, the initial boot ofcreate(including--resume), and the cold boot ingles32 <i> on|offandplaystore <i> install|uninstall; likewise MCP'sstart_instanceandcreate_instance. The manager API returns 502 for it, as forlaunch_failed. - When: emulator.exe has exited and qemu is not there either, and this boot's emulator log (a new file per boot) contains one of the lines for lack of memory:
Insufficient RAM free for launching emulator,cannot set up guest memory,Failed to allocate memory,PANIC: not enough memory. Any other early exit is stilllaunch_failed(exit code 7). The same with or without--json. error.messageis "ModAVD 实例 N 启动失败:电脑内存不足,模拟器分不到实例的内存(emulator.exe 退出码 X):" followed by the last lines of the emulator log;error.adviceis "请关闭部分程序、调小实例内存,或调大虚拟内存(页面文件)" (close some programs, lower the instance's memory, or enlarge virtual memory (the page file)), without the line about finishing the setup at the next boot (the emulator is gone).error.detailsare those oflaunch_failed, with noreason: forstart,instance_status(normallyoffline,unknownwhen that cannot be told) andqemu_running(normallyfalse); the emulator has exited, so there is noboot_diag_dir. The initial boot ofcreateaddsinstance_exists, and itsinstance_statusiscreate_failed.
- Any command that boots an instance can return it:
- Memory is no longer checked before a boot:
- Before: when free physical memory was below the instance's memory plus 1.5 GB, commands that boot failed with
precheck_failed(exit code 4, noerror.details.reason) before the emulator was launched, with the message "电脑可用内存不足:实例内存 … GB,启动约需 … GB,当前可用 … GB" (not enough free memory: instance memory, memory needed to boot, memory available) and the advice "请关闭部分程序,或调小实例内存" (close some programs, or lower the instance's memory); theitemsofcheck(MCPcheck_host) had a blocking item withidmemory, andreadywasfalsewhen memory was short. - Now memory never causes
precheck_failed; theitemsofcheckhave nomemoryitem, and memory no longer makesreadyfalse.check --memoryand MCPcheck_host'smemory_mbare still accepted without error but do nothing. - A caller that recognised low memory by
precheck_failedplus "内存" in the message should look forinsufficient_memoryinstead.
- Before: when free physical memory was below the instance's memory plus 1.5 GB, commands that boot failed with
- Boot wait: when the emulator has reported Android booted but the private adb cannot reach it,
timeout(exit code 6) now comes after 60 seconds instead of at the end of the full time limit; the code is unchanged, and the message says that Android has booted (the emulator reported boot completion) but the private adb (port P) has been unusable for N seconds, possibly with the last line of adb's log. update installhas new options--after-pid,--reopenand--reopen-argfor the manager's "更新", allowed only withinstall; without them nothing changes. The hand-over result goes to.update\manager-result.json. AUTO-MAS keeps its own updater, and there is still no shared lock on disk between the two updaters, as with plainmodavd update; the manager is running while it downloads and the command line is running after the hand-over, and AUTO-MAS 5.8.0 and later does not swap the package while such processes hold the root.- Text: "魔改 AVD" in logs, error messages and command help is now ModAVD; error codes and exit codes are unchanged. The problem package is named
ModAVD-问题信息-<time>.zip. - The private and script adb servers log to
logs\adb-server.log(modavd setsANDROID_ADB_LOG_PATHwhen it starts them), no longer to%TEMP%\adb.log. - Boot arguments (Windows only): modavd adds
-global virtio-blk-pci.ioeventfd=offand-acpitable file=…(themodavd-cst.amlmade for the core count in the instance folder; only the first when the table cannot be written or the core count cannot be read) after-qemu; withMODAVD_SYNC_IO=offit adds neither. Only boots by modavd get them; a program that launches the emulator itself does not.
Download and verification
Building with Go 1.26.5 and GOTOOLCHAIN=local through the repository's build.ps1 gives the same bytes. The standalone package also holds the Go license text and a file list. Check the zip and the two exes with the attached SHA256SUMS.txt, for example Get-FileHash .\ModAVDManager-0.7.0-win-x64.zip -Algorithm SHA256 in PowerShell.
The standalone manager does not update itself; replace it by hand. The copy in the ModAVD package is updated with the whole package. When you use it standalone, pass --root or set MODAVD_ROOT, or it reports that it cannot find the ModAVD root. Do not extract the standalone zip over the files of a ModAVD root.