Android Studio 虚拟机启动失败/没反应,排查原因。提供一种排查方式。

我自己用的Android Studio 启动虚拟机去调试,启动了之后没反应,整的我手足无措,因为Android Studio本身没有报任何错误提示。本篇文章给出一种调试的方法。

一、Android Studio 虚拟机的组成

1、emulator 程序

emulator是工具,负责运行镜像文件,类似于汽车的发动机。

程序目录:C:\Users\用户名\AppData\Local\Android\Sdk\emulator

2、system-images

system-images 是内容,提供 Android 系统,类似汽车的车身。

镜像目录:C:\Users\用户名\AppData\Local\Android\Sdk\system-images

3、AVD 配置

AVD是一个虚拟机的状态记录,记录了当前虚拟机的实时状况,类似汽车的行车记录仪。

AVD默认目录:C:\Users\用户名\.android\avd。为了节省C盘本身的空间,AVD的所在目录是可以修改的,增加一个Windows的用户属性 ANDROID_AVD_HOME 即可:重启生效。

总结:当你创建并打开一个虚拟机时,Studio 会选择对应的 system-image。在 ~/.android/avd/ 下创建 userdata、cache、sdcard。调用 emulator 程序加载系统镜像启动虚拟机。 下载了虚拟机之后,单单在Android Studio中删除也是删不干净的,必须把上述的三个部分都删除掉。

二、排查问题

找到emulator的目录,按如下操作打开命令行:

1、emulator -list-avds 列出虚拟机

2、emulator -avd Television_1080p_API_34 -verbose 启动特定虚拟机

-verbose用来打印具体的启动信息,这里就可以知道虚拟机为什么启动失败了,我的报错如下:

java 复制代码
C:\Users\htc-003\AppData\Local\Android\Sdk\emulator>emulator -avd Television_1080p_API_34 -verbose
INFO    | Storing crashdata in: C:\Users\htc-003\AppData\Local\Temp\\AndroidEmulator\emu-crash-34.2.14.db, detection is enabled for process: 12620
INFO    | Android emulator version 34.2.14.0 (build_id 11834374) (CL:N/A)
DEBUG   | Current emulator version 34.2.14 is the same as the required version 34.2.14.
INFO    | Found AVD name 'Television_1080p_API_34'
INFO    | Found AVD target architecture: x86
INFO    | argv[0]: 'emulator'; program directory: 'C:\Users\htc-003\AppData\Local\Android\Sdk\emulator'
INFO    | Found systemPath C:\Users\htc-003\AppData\Local\Android\Sdk\system-images\android-34\google-tv\x86\
INFO    | emuDirName: 'C:\Users\htc-003\AppData\Local\Android\Sdk\emulator'
INFO    | Found systemPath C:\Users\htc-003\AppData\Local\Android\Sdk\system-images\android-34\google-tv\x86\
INFO    | Probing for C:\Users\htc-003\AppData\Local\Android\Sdk\system-images\android-34\google-tv\x86\\kernel-ranchu-64: file exists
INFO    | try dir C:\Users\htc-003\AppData\Local\Android\Sdk\emulator
INFO    | Trying emulator path 'C:\Users\htc-003\AppData\Local\Android\Sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64.exe'
INFO    | Found target-specific 64-bit emulator binary: C:\Users\htc-003\AppData\Local\Android\Sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64.exe
INFO    | Adding library search path: 'C:\Users\htc-003\AppData\Local\Android\Sdk\emulator\lib64'
INFO    | Adding library search path: 'C:\Users\htc-003\AppData\Local\Android\Sdk\emulator\lib64\gles_swiftshader'
INFO    | Quoted param: [C:\Users\htc-003\AppData\Local\Android\Sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64.exe]
INFO    | Quoted param: [-avd]
INFO    | Quoted param: [Television_1080p_API_34]
INFO    | Quoted param: [-verbose]
DEBUG   | emulator: Running :C:\Users\htc-003\AppData\Local\Android\Sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64.exe
DEBUG   | qemu backend: argv[00] = "C:\Users\htc-003\AppData\Local\Android\Sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64.exe"
DEBUG   | qemu backend: argv[01] = "-avd"
DEBUG   | qemu backend: argv[02] = "Television_1080p_API_34"
DEBUG   | qemu backend: argv[03] = "-verbose"
DEBUG   | Concatenated backend parameters:  C:\Users\htc-003\AppData\Local\Android\Sdk\emulator\qemu\windows-x86_64\qemu-system-x86_64.exe -avd Television_1080p_API_34 -verbose
INFO    | Storing crashdata in: C:\Users\htc-003\AppData\Local\Temp\\AndroidEmulator\emu-crash-34.2.14.db, detection is enabled for process: 4820
INFO    | Duplicate loglines will be removed, if you wish to see each individual line launch with the -log-nofilter flag.
DEBUG   | autoconfig: -skin tv_1080p
DEBUG   | autoconfig: -skindir C:\Users\htc-003\AppData\Local\Android\Sdk\skins\
DEBUG   | querying file version info API...
DEBUG   | found kernelbase.dll
DEBUG   | GetFileVersionInfoSizeW found. On Windows 10?
DEBUG   | GetFileVersionInfoW found. On Windows 10?
DEBUG   | VerQueryValueW found. Can query file versions
DEBUG   | queryFileVersionInfo: path not found: amdvlk64.dll
DEBUG   | querying file version info API...
DEBUG   | queryFileVersionInfo: path not found: amdvlk32.dll
DEBUG   | querying file version info API...
DEBUG   | autoconfig: -kernel C:\Users\htc-003\AppData\Local\Android\Sdk\system-images\android-34\google-tv\x86\\kernel-ranchu-64
DEBUG   | Target arch = 'x86'
DEBUG   | Auto-config: -qemu -cpu qemu32
DEBUG   | Auto-detect: Kernel image requires new device naming scheme.
DEBUG   | Auto-detect: Kernel does not support YAFFS2 partitions.
DEBUG   | autoconfig: -ramdisk C:\Users\htc-003\AppData\Local\Android\Sdk\system-images\android-34\google-tv\x86\\ramdisk.img
DEBUG   | Using initial system image: C:\Users\htc-003\AppData\Local\Android\Sdk\system-images\android-34\google-tv\x86\\system.img
DEBUG   | Using initial vendor image: C:\Users\htc-003\AppData\Local\Android\Sdk\system-images\android-34\google-tv\x86\\vendor.img
DEBUG   | autoconfig: -data D:\.android\avd\Television_1080p_API_34.avd\userdata-qemu.img
DEBUG   | autoconfig: -initdata D:\.android\avd\Television_1080p_API_34.avd\userdata.img
DEBUG   | autoconfig: -cache D:\.android\avd\Television_1080p_API_34.avd\cache.img
DEBUG   | autoconfig: -sdcard D:\.android\avd\Television_1080p_API_34.avd\sdcard.img
DEBUG   | Physical RAM size: 2048MB
DEBUG   | VM heap size 48MB is below hardware specified minimum of 512MB,setting it to that value
DEBUG   | System image is read only
INFO    | IPv4 server found: 114.114.114.114
INFO    | Ignore IPv6 address: e879:378b:4902:0:b06c:378b:4902:0
INFO    | Ignore IPv6 address: e879:378b:4902:0:b06c:378b:4902:0 (2x)
INFO    | Ignore IPv6 address: d87f:378b:4902:0:b06c:378b:4902:0
INFO    | Ignore IPv6 address: d87f:378b:4902:0:b06c:378b:4902:0 (2x)
INFO    | Ignore IPv6 address: d085:378b:4902:0:b06c:378b:4902:0
INFO    | Ignore IPv6 address: d085:378b:4902:0:b06c:378b:4902:0 (2x)
INFO    | Ignore IPv6 address: c88b:378b:4902:0:b06c:378b:4902:0
INFO    | Ignore IPv6 address: c88b:378b:4902:0:b06c:378b:4902:0 (2x)
DEBUG   | Found 1 DNS servers:
DEBUG   |       114.114.114.114
DEBUG   | Starting hostapd main loop.
DEBUG   | trying to load skin file 'C:\Users\htc-003\AppData\Local\Android\Sdk\skins\\tv_1080p\layout'
WARNING | Failed to process .ini file D:\.android\avd\Television_1080p_API_34.avd\quickbootChoice.ini for reading.
HAXM is deprecated and not supported by Intel any more. Please download and install Android Emulator Hypervisor Driver for AMD Processors, which also supports Intel Processors. Installing from SDK Manager is comming soon.
DEBUG   | CPU Acceleration: working
DEBUG   | CPU Acceleration status: HAXM version 7.6.5 (4) is installed and usable.
DEBUG   | handleCpuAcceleration: feature check for hvf
DEBUG   | Bluetooth requested by guest
DEBUG   | started modem simulator host server at port: 60617
INFO    | Critical:
INFO    | Warning:
INFO    | Warning:  (6x)
INFO    | Crash reports will be automatically uploaded to: https://clients2.google.com/cr/report
library_mode host gpu mode host
DEBUG   | GPU emulation enabled using 'host' mode
INFO    | Initializing hardware OpenGLES emulation support
android_startOpenglesRenderer: gpu infoGPU #1
  Make: 8086
  Model: Intel(R) UHD Graphics 730
  Device ID: 4682
I1009 13:56:04.129026    6580 HealthMonitor.cpp:279] HealthMonitor disabled.
DEBUG   | create display 0
DEBUG   | setDisplayPose 0 x 0 y 0 w 1920 h 1080 dpi 0
added library vulkan-1.dll
INFO    | Attempting to send crashreport 84fc2ae1-2764-48e9-9e90-db497712445e to https://clients2.google.com/cr/report
createGlobalVkEmulation:995 Selecting Vulkan device: Intel(R) UHD Graphics 730
initialize: Supports id properties, got a vulkan device UUID
I1009 13:56:04.289707    6580 VkCommonOperations.cpp:1276] Initializing VkEmulation features:
I1009 13:56:04.289798    6580 VkCommonOperations.cpp:1277]     glInteropSupported: true
I1009 13:56:04.289838    6580 VkCommonOperations.cpp:1278]     useDeferredCommands: true
I1009 13:56:04.289874    6580 VkCommonOperations.cpp:1280]     createResourceWithRequirements: true
I1009 13:56:04.289910    6580 VkCommonOperations.cpp:1281]     useVulkanComposition: false
I1009 13:56:04.289945    6580 VkCommonOperations.cpp:1282]     useVulkanNativeSwapchain: false
I1009 13:56:04.289982    6580 VkCommonOperations.cpp:1283]     enable guestRenderDoc: false
I1009 13:56:04.290016    6580 VkCommonOperations.cpp:1284]     ASTC LDR emulation mode: 2
I1009 13:56:04.290057    6580 VkCommonOperations.cpp:1285]     enable ETC2 emulation: true
I1009 13:56:04.290125    6580 VkCommonOperations.cpp:1286]     enable Ycbcr emulation: false
I1009 13:56:04.290183    6580 VkCommonOperations.cpp:1287]     guestUsesAngle: false
I1009 13:56:04.290218    6580 VkCommonOperations.cpp:1288]     useDedicatedAllocations: false
E1009 13:56:04.290417    6580 VkCommonOperations.cpp:3570] Failed to initialize memory type index test ColorBuffer.
F1009 13:56:04.290475    6580 VkCommonOperations.cpp:1325] FATAL in initVkEmulationFeatures, err code: 4300000000: Failed to find memory type for ColorBuffers.

C:\Users\htc-003\AppData\Local\Android\Sdk\emulator>

关机的两句报错如下:

java 复制代码
E1009 13:56:04.290417    6580 VkCommonOperations.cpp:3570] Failed to initialize memory type index test ColorBuffer.
F1009 13:56:04.290475    6580 VkCommonOperations.cpp:1325] FATAL in initVkEmulationFeatures, err code: 4300000000: Failed to find memory type for ColorBuffers.

VkCommonOperations.cpp → Vulkan GPU 渲染初始化。说明虚拟机在初始化 Vulkan 图形加速时失败,很可能是英特尔的集成显卡驱动不兼容当前的渲染模式。尝试用软件渲染代替GPU渲染。

3、emulator -avd Television_1080p_API_34 -gpu swiftshader_indirect -verbose 使用软件渲染方式打开虚拟机

用这种方式去启动立马成功了。除了上述这种用命令的方式,还可以在添加虚拟机时,指定图像渲染方式,如下:

有些虚拟机添加的时候Graphics根本不能选,只有默认的Automatic,这个时候就只能去改配置文件了,找到自己的avd目录对应的虚拟机,找到config.ini文件,我的如下:D:.android\avd\Pixel_8_Pro_API_34.avd\config.ini

修改hw.gpu.mode为swiftshader_indirect即可。

三、总结

本文提供了一种排查虚拟机启动失败的方法,主要是要了解Android Studio启动一个虚拟机是怎样的流程,包含那三个部分,以及三个部分的作用。

相关推荐
Libraeking3 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位3 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen1235 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs6 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob6 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔6 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei9966 小时前
flutter和Android动画的对比
android·flutter·动画
先跑起来再说7 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
lxysbly8 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首8 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节