Linux系统下x86_64架构Android AVD启动无响应问题求助
x86_64 AVD启动日志的最后一行就是明确的故障点:
qemu-system-x86_64: -chardev socket,port=43549,host=::1,nowait,nodelay,ipv6,id=modem: address resolution failed for ::1:43549: Name or service not known
模拟器启动x86_64镜像时,会尝试绑定IPv6环回地址::1的端口用来实现调制解调器模拟功能,当前系统无法解析该地址,直接导致QEMU进程卡死无响应。x86架构AVD启动时不会触发这段逻辑,所以可以正常运行。
该问题在Arch Linux环境下高发,常见诱因有两个:
- 本地hosts配置缺失IPv6环回映射,或者lo接口的IPv6功能被禁用
- 当前使用的31.2.10版本Android模拟器存在兼容bug,x86_64镜像启动时强制依赖IPv6环回,没有做IPv4降级适配
按优先级从高到低尝试即可:
1. 修复本地IPv6环回配置
首先检查/etc/hosts文件,确认存在以下配置行,缺失就直接补上:
::1 localhost ip6-localhost ip6-loopback
之后执行命令临时启用lo接口的IPv6支持:
sudo sysctl net.ipv6.conf.lo.disable_ipv6=0
要永久生效的话,编辑/etc/sysctl.conf,把net.ipv6.conf.lo.disable_ipv6的值改成0,保存后执行sudo sysctl -p加载配置,再重启AVD验证。
2. 启动时跳过调制解调器模拟
如果不需要用模拟器的蜂窝网络相关功能,直接在启动命令里加参数跳过该逻辑即可:
./emulator -avd Nexus_5_API_31 -no-modem
如果是从Android Studio界面启动,找到对应AVD的编辑页面,在"Additional command line options"输入框里填-no-modem,保存后再启动。
3. 更换模拟器版本
31.2.10版本的模拟器对x86_64镜像的兼容问题较多,可以通过SDK Manager把Android Emulator组件升级到最新稳定版,或者降级到31.1.x版本绕开这个bug。
注:日志里的Vulkan库加载失败、Haswell核显Vulkan支持不全、Wayland提示、Fontconfig警告都不会影响模拟器基础启动流程,不是这次故障的原因。另外Linux环境下HAXM只支持x86架构AVD加速,x86_64 AVD默认用KVM加速,记得确认当前用户有
/dev/kvm的访问权限,避免启动后出现严重卡顿。
内容的提问来源于stack exchange,提问作者geecko

