排查 Android 模拟器的已知问题

本页列出了 Android 模拟器的已知问题、解决方法和问题排查提示。如果您遇到未在此页列出的问题或使用此页所列的解决方法未成功解决问题,请报告 bug

常规问题


Google 地图未显示在 Android 模拟器扩展控件中

自 5 月中旬起,Android 模拟器 34.2.13 之前的版本将不再在扩展控件中提供可用的 Google 地图。旧版模拟器附带的 Chromium 版本与 Google 地图 JavaScript API 不兼容。

检查是否有足够的磁盘可用空间

为了避免因可用磁盘空间不足而导致崩溃和挂起,模拟器会在启动时检查是否有足够的可用磁盘空间,并且只会在可用空间至少有 5 GB 的情况下启动。如果模拟器无法启动,请检查您是否有足够的可用磁盘空间。

防毒软件

由于许多安全和杀毒软件包的工作原理是监控每次读取和写入操作,因此使用此类软件会降低 Android 模拟器等工具的性能。

许多防毒软件包都能够将特定应用添加到可信应用的列表中,从而使这些列出的应用能够在不降低性能的情况下运行。如果您在保存或加载 AVD 快照时遇到性能不佳的问题,可以通过在防毒软件中将 Android 模拟器应用添加为可信应用来提高性能。

性能影响因杀毒软件包而异。如果除操作系统附带的杀毒软件之外您还安装了其他杀毒软件,您可以运行简单测试以确定哪个杀毒软件对模拟器加载和保存操作的性能影响较大。

有些杀毒软件可能与 Android 模拟器不兼容。

如果您使用的是 Avast 软件且 Android 模拟器无法正常运行,请在 Avast 的 Troubleshooting 设置中停用 Use nested virtualization when availableEnable Hardware assisted virtualization。此外,在停用 Avast 硬件虚拟化后,请通过从 SDK 管理器彻底重新安装最新的 HAXM,再次确保 HAXM 已正确设置。

在 Windows 上,有时 AVD 会在使用 HAXM 时冻结,此时只需完全卸载 McAfee 即可解决此问题。

Windows:可用 RAM 和已提交内存

当模拟器启动时,它需要初始化 Android 客户机操作系统的 RAM。在 Windows 上,模拟器要求 Windows 在启动时考虑客户机内存的完整大小,即使在实际操作期间,内存可能会按需进行分页。模拟器在启动时会请求全部客户机内存,因为在确保有足够的物理 RAM 和页面文件可用于存放整个潜在的工作集方面,Windows 较为保守。此请求应对以下最糟糕的情况做好了准备:所有客户机内存被快速占用,没有任何机会舍弃或以其他方式释放内存。

有时,当模拟器要求 Windows 考虑完整的客户机内存大小时,请求会超出当前的提交限制,即可用物理 RAM 和页面文件的总和。在这种情况下,Windows 无法保证在最糟糕的情况下工作集能存入物理 RAM 或页面文件,模拟器无法启动。

通常情况下,对大多数模拟器用例来说,为页面文件分配的硬盘空间加物理 RAM 已绰绰有余。不过,如果由于超出提交限制而无法启动模拟器,我们建议检查当前的已提交内存,已提交内存可在 Windows 任务管理器的性能标签页中看到。如需打开任务管理器,请按 Ctrl+Shift+Esc。

为了降低以各种方式超出提交限制的可能性,请执行以下操作:

  • 通过关闭未使用的应用和文件,在启动模拟器之前释放物理 RAM。
  • 停用第三方内存管理和内存压缩实用程序。这些实用程序可能降低效率,导致过量的已提交内存并使您的系统更接近提交限制。
  • 对 Windows 页面文件使用系统管理大小,系统管理大小可以更灵活且更动态地增加页面文件大小(因而提高提交限制),以应对模拟器和其他应用增加的需求。

    如需详细了解已提交内存以及为什么灵活设置效果最佳,请参阅这篇 Microsoft 文章

工具窗口中不支持多点触控

当模拟器在工具窗口中运行时,多点触控手势(包括双指平移)无法运作。如需启用多点触控,请在单独的窗口中启动模拟器

模拟器会使蓝牙音频输出的质量下降

如果您使用的是蓝牙耳机,可能会注意到在模拟器运行时,蓝牙耳机音频输出的质量会下降(问题 183139207)。之所以会发生这种情况,是因为模拟器在启动时会开启耳机的麦克风,导致耳机切换双工模式,使输出的质量降低。

为避免出现这个问题,您可以在 Android 虚拟设备 (AVD) 的 config.ini 文件中添加 hw.audioInput=no,以停用模拟器中的麦克风。如需查找 AVD 的 config.ini 文件,请前往设备管理器中的 AVD,点击其溢出菜单,然后选择 Show on Disk

Android 虚拟设备无法在 ChromeOS 上启动

在 ChromeOS 上,Android 虚拟设备 (AVD) 可能因缺少 libnss3 依赖项无法启动。如需成功启动 AVD,请运行 sudo apt install libnss3 以手动安装 libnss3 库。

Wear OS 上的手腕倾斜传感器警告

在 Wear OS 上,模拟器可能会重复记录以下有关手腕倾斜传感器的消息:the host has not provided value yet for sensorHandle=16

开发者可以放心地忽略这些警告。

嵌入式模拟器窗口过小

在分辨率较低(例如 1024x768)的机器上,模拟器在 Android Studio 中的工具窗口中运行时,可能很难看清其屏幕。如需为模拟器留出更多空间,请关闭设备管理器工具窗口(如果窗口已打开)。您也可以将模拟器窗口从 Android Studio 中拖出来。为此,请在模拟器窗口中依次点击 Settings > View Mode,然后选择 Window 而非 Dock Pinned

图形问题


Android 模拟器在更新后运行缓慢

很多外部因素可能会导致 Android Emulator 在更新后运行缓慢。如需开始问题排查,我们建议按照以下步骤操作:

  • 如果您使用的是 Intel GPU(尤其是 Intel HD 4000),请确保您已下载并安装最新的 Intel 图形驱动程序。
  • 如果您的计算机同时具有 Intel GPU 和独立的 GPU,请在设备管理器中停用 Intel GPU,以确保您使用的是独立的 GPU。
  • 使用 -gpu swiftshader 模式运行模拟器。如需详细了解如何在命令行中配置图形加速选项,请参阅配置硬件加速
  • 如果您没有 IPv6 连接,请确保路由器使用的不是 IPv6 地址。

如果您仍遇到 Android 模拟器运行缓慢的问题,请报告错误,并提供必要的 Android 模拟器详细信息,以便我们进行调查。

错误:找不到 vulkan-1.dll

如果模拟器因 vulkan-1.dll cannot be found 错误而无法启动,您可能需要更新模拟器。如需在 Android Studio 中更新模拟器,请依次前往 Tools > SDK Manager,然后安装最新的稳定版 Android 平台。

或者,如果您不需要任何使用 Vulkan 图形库,可通过命令行启动模拟器并使用标志 -feature -Vulkan,从而关闭 Vulkan。

无法创建快照

系统不支持为包含 Vulkan 图形库的模拟器创建快照。如需在不使用 Vulkan 的情况下运行模拟器,请通过命令行启动模拟器,并使用标志 -feature -Vulkan。或者,如果您要在开发工作流中使用快照,可以卸载并避免使用借助 Vulcan 的应用(例如基于 API 30 或更高版本的 Chrome)。

无法正确打开网页

从 API 级别 30 开始,Chrome 使用 Vulkan 图形库作为其渲染后端,并且在某些机器上可能存在兼容性问题。如果 Chrome 无法向您正确呈现内容,请尝试通过命令行启动模拟器,并使用标志 -feature -Vulkan

GPU 驱动程序警告 - 回退到软件

如果您收到有关 GPU 驱动程序回退的警告,则可能使用的是不受支持的 GPU。默认情况下,它使用“auto”,此时可能会选择软件渲染。如果选择了硬件,您应能强制它使用硬件渲染(可能仍会弹出警告消息)。

对于非 Play 商店映像,您可以依次前往“设备管理器”-> 三点状图标 ->“修改”,然后完成此操作。对于 Play 商店映像,您需要手动修改这 2 个配置文件:

~/.android/your_avd_name.avd/config.ini

~/.android/your_avd_name.avd/hardware-qemu.ini

此外,需将 hw.gpu.mode 更改为 host

请注意,这样做可能会降低模拟器的稳定性。如需了解详情,请参阅 bug

模拟器无法在 Windows Chrome 远程桌面上启动

如果在 Windows 上使用 Chrome 远程桌面时模拟器无法启动,目前建议的解决方法是使用 -gpu host 或 -gpu swiftshader 等 -gpu 标志。

模拟器在 macOS 上处于硬件渲染模式时行为异常

在搭载 Apple Silicon 的 Mac 设备上,如果选择硬件渲染模式,模拟器会针对 Vulkan API 使用 MoltenVK 库。虽然 MoltenVK 通常可提供更出色的性能,但该库不支持所有 Vulkan 功能。如果遇到兼容性问题(例如应用中存在着色器编译失败、图形故障或崩溃),请通过 AVD 设置将渲染模式更改为软件,或使用 -gpu swiftshader 命令行参数。

或者,您也可以使用 -feature -Vulkan 参数停用 Vulkan 支持,以便继续在 GLES 应用中使用硬件加速。

网络问题


未连接到互联网:找不到服务器 DNS 地址

如果模拟器无法连接到互联网,请尝试通过命令行启动模拟器,并使用 -dns-server “2001:4860:4860::8844,2001:4860:4860::8888,8.8.8.8,8.8.4.4” 选项。此命令会提供以英文逗号分隔的 Google 公共 DNS IP 地址列表。如需详细了解 Google 公共 DNS,请参阅适用于您设备的 Google 公共 DNS

未连接到互联网:DNS 解析问题

有时,/etc/resolv.conf 文件中的 DNS 地址无法正常运作。如需解决此问题,您可以通过命令行启动模拟器并使用 -dns-server 8.8.8.8-dns.server 2001:4860:4860::8888 选项连接 IPv6 单栈网络。

旧问题(在已废弃的模拟器或旧系统上)


无法启动 AVD

如果存在新版模拟器的崩溃报告,AVD 可能无法启动(问题 281725854)。只有符合以下条件的用户才会出现此问题:从 Canary 版本 33.x 更新为 32.1.13,上次运行 33.x 版本时发生崩溃,且自此以后未重新启动 AVD,因此 %TEMP%/tmp 目录依然处于开启状态。如果您遇到此问题,请尝试清除 %TEMP% 目录(在 Linux 或 macOS 上为 /tmp)。

Windows:如果 AVD 名称中存在 Unicode,模拟器将无法启动

在 Windows 上,当设备管理器创建 Android 虚拟设备 (AVD) 时,默认情况下会在 C:\Users\<name>\.android\avd 中创建 AVD。不过,如果 AVD 名称 (<name>) 包含 Unicode,模拟器将无法使用此默认位置正确启动 AVD。

此问题已在模拟器 31.3.6 及更高版本中得到修复。如需解决此问题,请更新模拟器(依次点击 Tools > SDK Manager)。

或者,如需临时解决此问题,请在创建 AVD 之前将环境变量 ANDROID_SDK_HOME 设置为自定义目录。例如,创建目录 C:\Android\home,然后将 ANDROID_SDK_HOME 设置为新创建的目录。如需了解详情,请参阅环境变量

Hypervisor 无法模拟 x86 Android 系统所需的某些 CPU 功能

Hypervisor 通常无法模拟 x86 Android 系统所需的某些 CPU 功能,例如 Streaming SIMD Extensions (SSE)