Android模拟器切换GUI与CLI启动方式触发启动失败问题咨询
问题分析与解决方案
首先,你的CLI启动命令确实存在错误——你把adb start-server和emulator命令混在一起执行了,这是触发问题的第一个关键点。adb start-server是用来启动ADB后台服务的独立命令,而启动模拟器应该直接使用emulator命令,两者不能合并成一条命令。
接下来,切换启动方式后出现的异常,核心原因是GUI和CLI启动时的配置/参数不匹配,尤其是你在CLI中添加了-writable-system参数,这个参数会让模拟器以可写系统分区的模式启动,和GUI默认的只读系统分区模式冲突,再加上快照机制的影响,就会出现你遇到的两种报错:
- 先CLI启动(带
-writable-system)再GUI启动:因为CLI启动修改了系统分区状态,GUI默认尝试加载之前的快照时,无法兼容这种状态,所以抛出“Cold boot: snapshot failed to load”。 - 先GUI启动再CLI启动:GUI启动的快照是只读系统分区状态,CLI用
-writable-system启动时,virtio块设备的加载逻辑无法适配这个快照,导致“qemu-system-i386.exe: Failed to load virtio-blk:virtio”。
具体修复步骤
修正CLI启动命令
把你原来的错误命令拆分或修改为:# 先启动ADB服务(如果需要的话,通常模拟器启动会自动触发) adb start-server # 单独启动模拟器 emulator -avd Pixel_2_API_24 -writable-system或者直接执行
emulator -avd Pixel_2_API_24 -writable-system即可,因为启动模拟器时会自动启动ADB服务,无需单独执行adb start-server。统一启动参数/快照策略
你有两个选择:- 选项一:禁用快照(简单直接)
在GUI的AVD管理器中,编辑你的Pixel_2_API_24模拟器,找到“快速启动”选项,勾选“冷启动”(彻底禁用快照);同时CLI启动时添加-no-snapshot-load参数,命令变为:
这样两种启动方式都以冷启动模式运行,不会有快照冲突。emulator -avd Pixel_2_API_24 -writable-system -no-snapshot-load - 选项二:保持参数一致
如果你需要使用快照,确保GUI和CLI启动时使用相同的系统分区状态:- 要么在GUI启动时也启用
-writable-system:编辑AVD的config.ini文件(路径一般是C:\Users\<你的用户名>\.android\avd\Pixel_2_API_24.avd\config.ini),添加一行hw.writableSystem=yes; - 要么CLI启动时去掉
-writable-system参数,和GUI默认状态保持一致。
- 要么在GUI启动时也启用
- 选项一:禁用快照(简单直接)
清理损坏的快照文件
已经存在的冲突快照可能会持续引发问题,建议删除现有快照:
找到模拟器的快照目录(Windows下是C:\Users\<你的用户名>\.android\avd\Pixel_2_API_24.avd\snapshots\),删除其中所有文件,然后重新启动模拟器,让它生成新的干净快照。
内容的提问来源于stack exchange,提问作者Zombo
相关产品推荐
相关产品推荐

