排查 Android 模拟器的已知问题

此页面列出了 Android 模拟器的已知问题、解决方法和故障排除技巧。如果您遇到此处未列出的问题,或无法成功使用此处列出的解决方法,请报告错误

常见问题


Android 模拟器扩展控件中无法显示 Google 地图

从 5 月中旬开始,34.2.13 之前的 Android 模拟器版本将不再在扩展控件中提供功能正常的 Google 地图。旧版模拟器附带的 Chromium 版本与 Google 地图 Javascript API 不兼容。

检查磁盘空间是否充足

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

防病毒软件

由于许多安全和防病毒软件包通过监控每个读写操作来工作,因此使用此类软件可能会降低 Android 模拟器等工具的性能。

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

不同防病毒软件包对性能的影响有所不同。如果您除了操作系统自带的防病毒软件之外还安装了其他防病毒软件,则可以运行简单的测试以确定哪个防病毒软件对模拟器的加载和保存操作的性能影响更大。

某些防病毒软件可能与 Android 模拟器不兼容。

如果您使用的是 Avast 软件并且在运行 Android 模拟器时遇到问题,请在 Avast 的疑难解答设置中禁用如果可用,则使用嵌套虚拟化启用硬件辅助虚拟化。此外,在禁用 Avast 硬件虚拟化后,请确保通过重新安装 SDK 管理器中的最新 HAXM 来正确设置 HAXM。

在 Windows 上,有时 AVD 会在使用 HAXM 时冻结,可以通过完全卸载 McAfee 来解决此问题。

Windows:可用 RAM 和提交电荷

模拟器启动时,需要初始化 Android 来宾操作系统的 RAM。在 Windows 上,模拟器会在启动时请求 Windows 占用来宾内存的完整大小,即使在实际操作过程中,内存可能会根据需要进行分页。模拟器在启动时请求完整的来宾内存量,因为 Windows 在确保有足够的物理 RAM 和页面文件可用以容纳整个潜在工作集方面比较保守。此请求为最坏情况做准备,即所有来宾内存都会很快被访问,而没有机会丢弃或以其他方式释放内存。

有时,当模拟器要求 Windows 占用此完整的来宾内存大小时,该请求会超过当前的提交限制,即可用物理 RAM 和页面文件的总和。在这种情况下,Windows 无法保证最坏情况下的工作集适合物理 RAM 或页面文件,并且模拟器无法启动。

在典型情况下,分配给页面文件和物理 RAM 的硬盘空间对于模拟器的大多数用例来说绰绰有余。但是,如果您遇到因超过提交限制而导致模拟器无法启动的情况,我们建议检查当前的提交电荷,这可以在 Windows 任务管理器中的性能选项卡中查看。要打开任务管理器,请按 Ctrl+Shift+Esc。

降低以各种方式超过提交限制的可能性

  • 在启动模拟器之前释放物理 RAM,方法是关闭未使用的应用程序和文件。
  • 禁用第三方内存管理和内存压缩实用程序。这些实用程序可能会导致提交电荷过高,并使系统更接近提交限制。
  • 对于 Windows 页面文件,使用系统管理大小,这可以更灵活和动态地增加页面文件大小,从而增加提交限制,以响应模拟器和其他应用程序的增加需求。

    有关提交电荷以及为什么灵活设置效果最佳的更多信息,请阅读这篇 Microsoft 文章

工具窗口中无法使用多点触控

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

模拟器降低蓝牙音频输出质量

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

要避免此问题,请通过将hw.audioInput=no添加到 Android 虚拟设备 (AVD) 的config.ini文件中禁用模拟器中的麦克风。要查找 AVD 的config.ini文件,请转到设备管理器中的 AVD,点击其溢出菜单,然后选择显示在磁盘上

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 中拉出。为此,在模拟器窗口中,点击设置 > 查看模式,然后选择窗口而不是停靠固定

图形问题


Android 模拟器更新后运行缓慢

许多外部因素会导致 Android 模拟器在更新后开始运行缓慢。要开始故障排除,我们建议执行以下步骤

  • 如果您有英特尔 GPU(特别是英特尔 HD 4000),请确保已下载并安装最新的英特尔显卡驱动程序。
  • 如果您的机器同时具有英特尔 GPU 和独立显卡,请在设备管理器中禁用英特尔 GPU,以确保您正在使用独立显卡。
  • 使用-gpu swiftshader模式运行模拟器。有关在命令行上配置图形加速选项的更多信息,请参阅配置硬件加速
  • 如果您没有 IPv6 连接,请确保您的路由器没有使用 IPv6 地址。

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

错误:找不到 vulkan-1.dll

如果模拟器由于错误vulkan-1.dll cannot be found而无法启动,则您可能需要更新模拟器。要在 Android Studio 中更新模拟器,请转到工具 > SDK 管理器并安装最新稳定版本的 Android 平台。

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

无法创建快照

创建包含Vulkan图形库的模拟器快照不受支持。要运行不使用 Vulkan 的模拟器,请从命令行启动模拟器并使用标志-feature -Vulkan。或者,如果您想将快照作为开发工作流程的一部分使用,则可以卸载并避免使用具有 Vulkan 的应用程序(例如 API 30 或更高版本上的 Chrome)。

无法正确打开网页

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

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

如果您收到有关 GPU 驱动程序回退的警告,则您可能正在使用不受支持的 GPU。默认情况下,它使用自动模式,这可能会选择软件渲染。如果您选择硬件,则应该能够强制它使用硬件渲染(它仍然可能会弹出警告消息)。

对于非 Play 商店映像,您可以在设备管理器中执行此操作 -> 3 个点 -> 编辑。对于 Play 商店映像,您需要手动编辑这两个配置文件

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

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

并将hw.gpu.mode更改为host

请注意,这样做可能会降低模拟器的稳定性。有关更多详细信息,请参阅错误

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

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

模拟器在 macOS 中的硬件渲染模式下行为异常

在具有 Apple Silicon 的 Mac 设备上,当选择硬件渲染模式时,模拟器使用MoltenVK库作为 Vulkan API。虽然 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 for your devices

无网络连接:DNS 解析问题

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

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


无法启动 AVD

如果存在较新模拟器的崩溃报告,则 AVD 可能无法启动(issue #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 及更高版本中修复。要解决此问题,请选择**工具 > SDK 管理器**更新模拟器。

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

虚拟机管理程序无法模拟 x86 Android 系统所需的某些 CPU 功能

虚拟机管理程序通常无法模拟某些 CPU 功能,例如 x86 Android 系统所需的 Streaming SIMD Extensions (SSE)