The Android Developer Challenge is back! Submit your idea before December 2.

Emulator 版本说明

Android 模拟器包含在 Android Studio 中。

25.3.0 之前的模拟器版本作为 Android SDK Tools 的一部分进行分发。

为了确保您使用的是最新版本,请检查 SDK Manager 看看是否有更新。

对于 25.3.0 之前的 Android 模拟器版本,请参阅 Android SDK Tools 版本说明

要详细了解在各个版本中修复的错误,请参阅 Android Studio 版本更新博客

29.0.6(2019 年 5 月 1 日)

此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些错误。

移除了对 QEMU1 和 32 位 Windows 的支持

为了更好地维护模拟器,我们不再提供 QEMU1 和 32 位 Windows 二进制文件。如果您使用的是 32 位 Windows 系统,则无法升级到版本 29.0.6。

针对 Android Q 系统映像的要求

如果要运行使用 Android Q 系统映像的 AVD,您现在必须使用版本 29.0.6(即本部分介绍的发布版本)或更高版本。

Project Marble 改进

我们在 2018 年 11 月举办的 Android 开发者峰会上宣布推出了 Project Marble 计划,并继续对其改进而推出了这项更新。要详细了解在之前版本中推出的其他 Project Marble 改进,请参阅 Android 模拟器:Project Marble 改进

在此更新中,我们对 Project Marble 进行的大部分改进都旨在减少模拟器对资源的消耗,例如降低模拟器在空闲时对 CPU 的消耗。此外,我们还进行了一些更改,让用户能在更多类型的环境中更轻松地使用模拟器;并且还解决了一些常见的质量问题。

下面各部分介绍了在此更新中包含的 Project Marble 改进:

主机音频行为方面的改进

从版本 28.0.3 开始,模拟器在默认情况下会屏蔽来自主机的音频输入

要使用主机音频数据,您只需依次转到 Extended controls > Microphone,然后启用 Virtual microphone uses host audio input 这个选项即可。每次重启模拟器,此选项都会自动停用。

如果您使用命令行,也可利用 -allow-host-audio 选项启用主机音频,并且可以分别使用以下 ADB 命令来开启或关闭主机音频数据:

  • adb emu avd hostmicon
  • adb emu avd hostmicoff

针对无头模拟器版本的改进

从版本 28.0.25 开始,模拟器加入了无头版本选项,可让您在没有界面的情况下运行模拟器。您可以通过无头版本针对 Docker 和持续集成 (CI) 工作流程设置模拟器。

通过此更新,我们做出了进一步改进,可让模拟器运行最少量的依赖项。在 Linux 上,无头版本不再包含 pulseaudiolibX11 库。未与模拟器打包在一起的系统相关共享库已缩减为下列几个:

  • Linux-vdso.so.1
  • Libutil.so.1
  • Libm.so.6
  • Libdl.so.2
  • Librt.so.1
  • Libpthread.so.0
  • Libgcc_s.so.1
  • Libc.so.6
  • ld-linux-x86-64.so.2

将 Qt 界面库升级到了 5.12 LTS

此更新在 Qt 5.12 LTS 版本的基础上进行了以下改进:

  • 在启动某些系统映像的过程中,为了避免 Qt 的 libpng 解码发生崩溃,模拟器现在会使用自己的 libpng 副本来解码 PNG 映像。
  • 部分 Linux 安装包含了一些 Qt 关联库的不兼容版本,为了解决这部分安装所出现的问题,我们将 libfreetypelibsoftoknlibsqlite3libxkbcommon 和模拟器打包在一起。
  • 模拟器现在会使用平台的本机窗口库来获取监视器维度,而不会使用返回不可靠结果的 Qt 库。

在冷启动后自动优化 CPU

为了解决 CPU 使用率问题,模拟器现在会在冷启动完成时(也就是收到 boot complete 信号后)运行以下 ADB 命令:

adb shell settings put screen_off_timeout 214783647
此命令会增加屏幕关闭超时,以便模拟器可以在电池模式下使用,而无需充电。在电池模式下,会大大减少后台任务对 CPU 的耗用。
在交流充电模式下,像应用更新等 GMSCore 后台操作会占用设备的所有 CPU 核心(乃至用户的计算机),而不会显示任何警告。
adb shell pm revoke com.google.android.googlequicksearchbox android.permission.RECORD_AUDIO
此命令会撤消向 Google 搜索应用授予的麦克风使用权限,从而在该应用处于活动状态时,大幅降低主屏幕和启动器中的后台 CPU 使用率。
模拟器除了默认为主机停用主机音频之外,也会运行此命令。而且,这还会自动降低 CPU 使用率(如 28.0.23 版本中的启动指令检测部分所述)。

用于监视性能的新环境变量

您现在可以使用以下两个新的环境变量来详细监视模拟器的性能和资源使用情况。

SHOW_PERF_STATS=1
该环境变量可以跟踪 CPU 和 RAM 这两者的使用情况。针对 RAM 使用情况的跟踪会区分图形使用情况和总驻留内存。
ANDROID_EMU_TRACING=1
每当输入或图形操作需要较长时间(超过 1 毫秒)时,此环境变量就会启用打印。
我们还会使用此环境变量来帮助诊断 Windows 用户会比 macOS 或 Linux 用户遇到更多卡顿(即丢帧)的问题。

常规 Project Marble 改进

此更新还包含 Project Marble 计划的以下常规改进:

  • 现在,您可以通过以下控制台命令立即暂停模拟器上的所有 vCPU:
    • adb emu avd pause
    • adb emu avd resume
  • 大幅降低了 OpenGL 绘图的开销。这一改进降低了模拟器播放动画时的 CPU 使用率。
  • 恢复了对主线 QEMU 的 e1000 虚拟网络设备的支持。您可以使用此设备在桥接网络环境中设置模拟器。在桥接网络环境中,模拟器和主机网络会相互显示对方。
  • 现在可以使用 QEMU 2.12 适用的 BIOS 二进制文件来启动模拟器。
  • ffmpeg 版本升级到了 3.4.5,以用于视频编解码。
  • 将基于 select() 的主循环替换为基于 kqueue 的主循环,大幅降低了 macOS 上 QEMU 主循环的 I/O 开销。
  • 将 logcat 缓冲区空间增加到了 2 MB,解决了在使用模拟器运行 logcat 时出现的不稳定的 EOF 异常。
  • 现在,模拟器在默认情况下会导出 LC_ALL=C 环境变量。这项更改解决了与在不同语言区域中运行模拟器相关的崩溃和不兼容问题。
  • 您现在可以通过性能统计信息来跟踪模拟器的 CPU 和 RAM 使用情况。该统计信息的具体访问路径为:Extended controls > Settings > Advanced > Performance Stats。如果模拟器似乎使用了过多的 CPU 或 RAM,这些统计信息便可用来快速诊断问题。
  • glReadPixels GL_IMPLEMENTATION_COLOR_READ_TYPE 现在会使用主机 GPU 的结果,而不是模拟结果。这项更改有助于修复由于回读格式不正确而导致图片和素材资源无法显示的问题。
  • 添加了对 OpenGL ES 扩展 GL_EXT_texture_format_BGRA8888GL_APPLE_texture_format_BGRA8888 的支持(前提是主机支持这些扩展)。
  • 在错误报告界面中添加了更多诊断信息。此外,您还可以使用以下命令从控制台访问错误报告:
    • telnet localhost 5554
    • avd bugreport
  • 在 Android Q 系统映像上,模拟器将其最小 RAM 大小增加到了 2 GB。
  • 针对 OpenGL 或虚拟机监控程序无法初始化这种情况,添加了更多日志记录和打印输出信息。
  • 如果模拟器无法启动 AVD 的并发 -read-only 实例,现在则会尝试在 3 秒内重新启动 -read-only AVD 3 次以上。如果 AVD 的其他可写实例没有完成过时文件的清理,此更改会增加模拟器可以启动该 AVD 的并发 -read-only 实例的几率。
  • 对于即将推出的系统映像,模拟器现在支持 Hardware Composer 2.0。此更改应该会在运行大多数动画时降低驱动程序的开销。
  • 模拟器编译现在是基于 CMake/Ninja。
  • 在模拟器的 Extended controls 界面中,恢复了键盘快捷键表格中的分隔线。
  • 用户现在可以选择向我们团队提供采用 10 秒间隔的 CPU 和 RAM 使用情况指标。我们会运用这些指标深入了解用户在不同用例中的模拟器资源使用情况,以便我们能将模拟器变得更加地高效和灵敏。

常规 Project Marble 修复

此更新还包含 Project Marble 计划的以下常规修复:

  • 修复了以下问题:使用 Android Q 系统映像时,在采用 Intel GPU 的系统中显示抽搐和错误帧。
  • 修复了以下问题:在使用含有 Pixel 2 XL 皮肤(或任何有缺口或圆角的皮肤)的 Android Q 系统映像时,出现黑屏。
  • 修复了 -partition-size 命令行选项不设置数据分区大小的问题。
  • 修复了 Linux 模拟器上的 pulseaudio 会在某些情况下旋转并占用整个 CPU 内核的问题。
  • 修复了处理压缩纹理时出界内存访问的问题。
  • 修复了以下问题:更新某些 Gralloc 缓冲区(采用 RGB 565、RGB10A2、RGB(A)16F 格式)时,主机的 glTexSubImage2D 中出现 GL 错误。
  • 修复了带有快照的 Android Q 系统映像中出现的显示问题,该问题让通知栏的几何图形使用不恰当的实例除数设置进行渲染。
  • 修复了由于 Qt 信号丢失或启动状态不稳定、不一致而导致在启动时出现的一些难以重现的崩溃和卡顿问题。
  • 修复了大量并发问题。现在,我们可以使用 ThreadSanitizer (TSAN) 编译 Linux 模拟器,该工具可以轻松找出用其他方式难以重现的错误。
  • 针对 Linux 用户:我们发现在某些主机内核上,客户机 Android 内核出错以及在 KVM 中退出时发生通用硬件错误。现在,如果出现这种情况的话,模拟器会运行 abort(),以提高可调试性;而在以前,模拟器只会挂起。
  • 针对 Linux 用户:为了方便进行 CI 设置,您可以使用新的 -stdouterr-file <file-name> 命令行选项将 stdoutstderr 都重定向到相应文件。
  • 修复了 SO_REUSEADDR 使用不当的问题。有关详情,请参阅提交详细信息
  • 修复了 Windows 模拟器存在的一个长期问题。当用户名中包含空格时,该问题会导致子进程(如 ADB 命令)无法启动。
  • 修复了 HAXM vCPU 线程中缺少 RCU 初始化的问题。此修复可能会解决一些崩溃问题和竞争条件。
  • 修复了在使用最新 Android Q 系统映像从快照界面中保存和加载快照的某些模式时发生崩溃的问题。
  • 修复了以下问题:如果在保存快照时正在播放 AR 宏,那么从快照初始化模拟器时,虚拟场景摄像头将为空白。
  • 修复了以下问题:在 Linux 上启动模拟器时,某些采用远程桌面设置的用户遇到黑屏。为避免这个问题,模拟器现在会明确配置 MESA_RGB_VISUAL。有关详情,请参阅提交详细信息
  • 修复了旋转按钮出现在电视 AVD 上这个问题
  • 修复了以下问题:如果模拟器始终位于顶部,那么每次旋转模拟器时都会显示“Extended controls”窗口。

可折叠设备的硬件配置文件

模拟器现在包含可折叠设备的硬件配置文件。要使用这些新增的硬件配置文件,您必须使用 Android Studio 3.5 Canary 10 或更高版本。

您可以使用下面这两个可折叠设备硬件配置文件来创建 AVD:

  • 7.3" 可折叠设备:1536x2152(展开),4.6" 840x1960(折叠)
  • 8" 可折叠设备:2200x2480(展开),6.6" 1480x2480(折叠)

当您使用其中一个硬件配置文件运行模拟器时,可以使用模拟器工具栏中的折叠和展开操作控制台命令或以下键盘快捷键折叠和展开设备:

  • 折叠:Ctrl + F(在 macOS 上为 Command + F
  • 展开:Ctrl + U(在 macOS 上为 Command + U

AR 宏

模拟器现在包含 AR 宏,可协助您测试通用 AR 操作。例如,您可以使用宏将所有设备的传感器重置为默认状态。

有关详情,请参阅使用宏测试通用 AR 操作部分。

Vulkan 支持(Windows、Linux)

Windows 和 Linux 用户现在可以使用 Android 模拟器测试 Vulkan 应用(最高可到 Vulkan 1.1),不过要使用兼容的系统映像(Vulkan 1.1:Android Q 测试版 3 或更高版本,Vulkan 1.0:Android Q 测试版 2)和兼容的主机 GPU(包括 2014 及之后的大多数 Intel GPU、NVIDIA GPU 和 AMD GPU)。

要启用 Vulkan 支持,您必须将下列功能标记添加到 ~/.android/advancedFeatures.ini 文件中(如果没有这个文件的话,请创建一个):

  • Vulkan = on
  • GLDirectMem = on

对 ROM 开发者的初步支持

对于在 AOSP master 分支上编译 sdk_phone_x86sdk_phone_x86_64userdebugeng 变体)目标的 ROM 开发者,现在可以运行支持 Vulkan 的模拟器。

此支持仍处在实验阶段,主要面向从事系统映像、驱动程序和游戏引擎工作的开发者推出。有许多扩展尚未开发完毕。不过,HOST_COHERENT 内存已受支持,您现在应该能够运行 Vulkan API 教程示例

如果您使用的是 Linux,可以使用以下命令尝试:

    mkdir aosp-master
    cd aosp-master
    repo init -u https://android.googlesource.com/platform/manifest -b master --depth=1
    repo sync -c -j12
    . build/envsetup.sh
    lunch sdk_phone_x86_64-userdebug
    make -j12
    emulator -no-snapshot -feature Vulkan,GLDirectMem
    

通过 Vulkan 进行 Skia 渲染

支持 Vulkan 的 NVIDIA GPU 和 AMD GPU 也支持通过 GL_EXT_memory_objects 扩展与 OpenGL 进行零复制交互操作。模拟器会利用此功能提供使用 Skia Vulkan API 渲染 Android 界面的完整方法。

如果您的 NVIDIA 或 AMD GPU 支持 Vulkan,请使用以下命令对采用兼容系统映像(Android Q 测试版 3 及更高版本)的 Skia 渲染进行测试:

    adb shell
    su
    setprop debug.hwui.renderer skiavk
    stop
    start
    

为 Vulkan 提供的 macOS 支持

macOS 支持仍处在实验阶段,但模拟器中已加入 Swiftshader API、MoltenVK API 和 libportability (gfx-rs) API。您可以通过设置以下环境变量来使用这些 API 进行实验:

  • Swiftshader:ANDROID_EMU_VK_ICD=swiftshader
  • MoltenVK:ANDROID_EMU_VK_ICD=moltenvk
  • libportability:ANDROID_EMU_VK_ICD=portability

已知问题

HAXM 有时无法先将 Vulkan 相干内存映射到客户机,然后再关闭模拟器。这个问题会在即将推出的 HAXM 更新中得到解决。

gRPC 流式模拟器 (Linux)

我们一直在努力尝试让主机 GPU 从最广泛的运行环境中进行渲染和互动,以便让模拟器尽可能灵活多变。以下是我们的 CI 和远程桌面用户长期遇到的一些问题:

  • 如果以编程方式向模拟器发送输入命令,要么需要运行 adb shell 命令(会产生大量开销);要么就需要使用 Telnet 控制台(虽然速度更快,但可能无法与某些网络配置配合使用)。
  • CI 用户会经常在无头模式下运行模拟器,因此很难发现需要屏幕显示或进入可互动状态的问题。
  • 远程桌面用户在使用主机 GPU 渲染时常常无法与模拟器互动,因为 GPU 渲染通常与主机的非虚拟显示相关联。

为了解决上述问题,在 Linux 计算机上运行时,模拟器现在可以提供 gRPC 服务。gRPC 是 RPC 的通用框架,通过 HTTP 运行。

默认情况下,模拟器 gRPC 服务处于停用状态,但您可以使用下面的命令行选项启用该服务,其中 <port> 是模拟器应向 gRPC 请求提供的端口(通常为 5556):

    -grpc <port>
    

启动该服务后,您可以从客户端发出 gRPC 命令。当前的这组命令允许发送输入事件和接收屏幕截图。这些命令有助于解决以下问题:

  • 可通过 HTTP 以较低的开销向模拟器发送输入命令。HTTP 还允许在其他网络配置中发送命令。
  • 可发送屏幕截图命令来查询当前屏幕,即便在无头模式下运行模拟器也可以发送。如果要进行互动,也可以向模拟器发回输入事件。
  • 远程桌面用户可以一边使用 GPU 加速渲染在主机显示器上以无头模式运行模拟器;一边使用 gRPC 获取屏幕截图和发送输入事件,以与模拟器进行互动。

有关可用命令的完整列表,请参见此 protobuf

为了帮助您着手使用 gRPC,我们提供了一些可供参考的示例客户端

目前包含以下示例:

  • 基于 Go 的服务,可用于查询模拟器状态。
  • React 应用,通过屏幕截图和输入 RPC 演示远程交互。此示例需要使用 protobuf 3.7.0 或更高版本。
  • Python 示例,用于查询模拟器的虚拟机配置,然后发送一系列命令。

28.0.25(2019 年 3 月 29 日)

此更新加入了以下改进和修复:

无头模拟器版本

由于系统可能希望能够支持 Qt 及其共享库依赖项(以及其他问题),因此使用 Docker 和其他持续集成 (CI) 工作流程很难设置模拟器。

作为解决这个问题的第一步,我们推出了一个模拟器启动器变体,它带有 QEMU 可执行文件且不依赖于 Qt。在 Linux 上,仍然存在指向 libX11 的链接,但我们也希望尽快将其移除。

要使用无头模拟器,请照常从命令行运行模拟器,但用 emulator-headless 替换模拟器二进制调用。有关详情,请参阅 28.1.8 Canary 版本更新。

  • 修复了以下问题:运行 Android Q 系统映像时,Intel GPU 上显示颤动或错误帧。
  • 修复了以问题:使用含有 Pixel 2 XL 皮肤的 Android Q 系统映像时,出现黑屏。
  • 现在会使用最新的 BIOS 二进制文件启动模拟器。此更改有助于减少在 Windows 上启动模拟器时偶尔发生的“vCPU shutdown request”错误。
  • 针对“从快照恢复 Android Q 系统映像时出现错误显示”问题向后移植了修复。
  • 由于 Platform-Tools 28.0.2 不兼容 ADB 中的更改,因此用户会遇到“未经授权”模拟器问题。您现在可在 Platform-Tools 28.0.2 中放心地将 ADB 与模拟器结合使用。如果遇到“未经授权”模拟器方面的问题,请执行以下故障排除步骤:
    1. 退出所有模拟器。
    2. 一并删除 ~/.android/adbkey~/.android/adbkey.pub 文件。
    3. 运行以下命令:adb kill-server
    4. 运行以下命令:adb devices
    5. 擦除 AVD 数据。
    6. 重新启动该模拟器。

28.0.23(2019 年 1 月 29 日)

此更新加入了以下改进和修复:

默认停用主机音频输入

Reddit 上最近发布的一个帖子详细说明了搭载 Android 操作系统的客户机如何总是使用主机麦克风音频,从而允许“Ok Google”启动指令意外运行。我们对此感到非常抱歉,并会与 Android 团队合作,以确保同时在系统映像中停用启动指令检测功能。

为解决这个问题,我们做出了以下更改:

  • 现在会默认限制实际的主机音频数据。在客户机使用麦克风时,只会传递静音,而不会传递主机的音频。
  • 要使用主机音频数据,您现在只需依次转到 Extended controls > Microphone,然后启用 Virtual microphone uses host audio input 这个选项即可。每次重启模拟器,此选项都会自动停用。

有关 CPU 使用率调查的更新信息

在 Project Marble 调查期间,我们发现导致模拟器上的高 CPU 使用率通常是因为以下三种原因:

空闲时:在 Play 商店映像中自动更新应用

我们发现,即使用户未登录,安装的所有应用也会被随机更新。在更新过程中,CPU 使用率会升至 GMSCore 和 dex2oat 中的核心数量乘以 100%(通常约为 400%)。您可以在 Play 商店应用中停用应用自动更新功能来缓解这个问题。

空闲时:启动指令检测

如果主屏幕上没有任何应用在前台使用,CPU 使用率可能会很高(大约 25%,高峰时可达 50%)。这是由于启动指令检测功能不断 ping 主机所致。您无法通过停用主机音频输入来缓解这个问题,因为 CPU 的开销主要是出在从主机传输到客户机所花的时间上。不过,您可以通过撤消 Google 应用的麦克风使用权限来缓解这个问题。

虽然处于活动状态,但有时也会进入空闲时:动画

导致高 CPU 使用率的第三个原因是动画。我们发现,通过优化图形驱动程序堆栈,即使模拟器不处于空闲状态,我们也可以降低 CPU 使用率。作为 Project Marble 的一部分,我们将逐步优化图形驱动程序。

28.0.22(2018 年 12 月 21 日)

此更新加入了以下改进和修复:

  • 修复了以下长期问题:在某些设置中,Mac 模拟器会在快速启动保存时重新启动或出现内核崩溃。(问题 120951634
  • 将映射文件用作 RAM 快照时,模拟器现在会在退出时明确撤消文件映射。

28.0.20(2018 年 12 月 11 日)

此更新加入了以下改进和修复:

  • 修复了导致模拟器在使用某些型号的 Intel GPU 加载快照时出现卡顿的 Windows 问题。
  • 修复了在使用非标准 ANDROID_SDK_HOME 位置时导致 ADB 设备出现 unauthorized 状态的问题。
  • 修复了在启动停用了 CPU 加速的系统映像时导致模拟器崩溃的 Windows 问题。
  • 修复了模拟器显示像素化问题。现在,降采样应该可以正常运行了。
  • 修复了以下 macOS 10.14+ 问题:由于与新的无障碍功能安全设置互动,虚拟场景摄像头 MouseLook 控件可能会变得过于敏感。
  • 修复了时区计算错误,该错误可能导致模拟器时钟偶尔发生变化。
  • 修复了在各种 cocos2d 和虚幻引擎应用中出现的一些渲染错误。
  • 在模拟器中添加了对 WLAN 对等连接的支持。如果使用最新的 Pie Play 商店映像,两个模拟器现在可以直接通过 WLAN 相互通信。要使用 WLAN 对等连接,请使用相同的 -wifi-server-port-wifi-client-port 参数启动两个 AVD:
    • emulator @<server-avd-name> -wifi-server-port 9999
    • emulator @<client-avd-name>-wifi-client-port 9999
  • 添加了在 Windows 上使用更多摄像头的支持,即采集任何不兼容的帧大小并进行动态调整来适应 Android 客户机中的相机设置。

28.0.16(2018 年 11 月)

此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些错误。

资源利用率

现在,模拟器会在总体上减少对 RAM 的使用,尤其是在使用 API 级别为 28 或更高级别的系统映像时。这些系统映像降低了客户机端图形驱动程序的内存使用率。

此外,我们还在以下方面提升了资源利用率:

  • 降低了模拟器在长时间运行测试的过程中对内存的使用率。如果您在长时间运行测试的过程中仍然会遇到内存使用率问题,请在问题跟踪器中创建问题来描述您的使用情形。
  • 降低了运行含有动画的应用时的 CPU 使用率。
  • 修复了 QEMU AIO 上下文在 Windows 上引起的泄漏问题。

同时运行单个 AVD 的多个实例

您现在可以启动同一个 AVD 的多个实例并同时运行它们。在第一个实例之后启动的实例都会处于只读状态,并且在退出时将舍弃对客户机虚拟磁盘做出的更改。

要同时运行同一个 AVD 的多个实例,请在启动第一个实例之后使用 -read-only 标记从命令行启动任何其他实例。

您可以通过复制与 Android 映像可写部分关联的 QCOW2 文件来实现此功能。为了帮助您管理磁盘空间,我们还捆绑了 qemu-img 命令行工具,以便您能够在启动多个实例之前预先提交 QCOW2 文件。

此外,当与有文件支持的客户机 RAM 快照功能配合使用时,多个 AVD 实例会将主 AVD 快速启动快照作为写入时复制客户机 RAM 的公共源进行共享。此属性意味着实例会共享大部分公共 RAM。如果使用此功能运行测试,则需要并行运行多个设备。

非常感谢您针对常规互动或 CI 工作流程中可能出现的使用情形提供反馈。请在问题跟踪器中创建问题或对相应问题投支持票。

有文件支持的客户机 RAM 快照

通过预先分配客户机 RAM 并将其映射为文件,模拟器现在可以在运行时保存快速启动快照,而不必在退出时执行所有操作。如果您目前在关闭模拟器时需要等很长时间才能保存的话,请启用此功能来提升快速启动性能。默认情况下,快速启动快照每次都会在退出时保存,然后再重新加载,例如暂停和唤醒实际设备。

由于 Android 客户机 RAM 现在默认自动保存,因此,如果您要定义设备状态并从该状态重复加载,则需要告知模拟器在每次会话后舍弃更改。为此,您可以执行以下操作:

  • 从命令行启动模拟器时,使用 -no-snapshot-save-read-only 标记。
  • 依次转到 Extended controls > Snapshots > Settings,然后将 Auto-save current state to Quickboot? 切换为 No
  • 选择此选项后,您需要重新启动模拟器。如果模拟器已设为自动保存,您可以运行以下命令来设置检查点:
        adb emu avd snapshot remap 0
        
    在您运行此命令后,模拟器快速启动快照就会停留在那个检查点上。再次运行相同的命令便可从该检查点加载模拟器。

快照会像之前一样通过快照界面功能进行截取和加载,而没有文件映射。

由于这是快速启动运作方式的一项重大变更,因此非常感谢您能向我们反馈快速启动性能是否得到提升以及在使用过程中遇到的问题。如果您遇到问题,请在 ~/.android/advancedFeatures.ini 文件中添加以下这行代码来停用此功能:

QuickbootFileBacked = off
    

如果从快照启动模拟器(无论是使用 -snapshot 命令行选项,还是从 AVD Manager 中的快照启动),模拟器会停用快速启动快照的自动保存功能和在退出时保存快速启动快照的功能。这样可以降低无意中覆盖快速启动快照的可能性,并避免使用那些不使用有文件支持的快速启动快照的慢速回退路径。

QEMU 2.12

我们已将 QEMU 的变体从 QEMU 2.9 衍合到 QEMU 2.12。此更新包含以下 QEMU 更改:

以下是一些会对 Android 模拟器产生影响的重要更改:

  • x86:gdbstub 现在会提供对 SSE 寄存器的访问权限。
  • 磁盘映像:添加了映像锁定,并会默认启用此功能。只要主机支持 OFD 或 posix 锁定,便无法向同一个映像写入多个 QEMU 进程(除非另外指定了选项)。
  • qemu-img: qemu-img resize 支持预先分配映像的新增部分。
  • 现在,qemuqemu-img 支持使用 QCOW2 压缩。

无障碍

  • 修复了屏幕阅读器的问题,并在屏幕录制和快照界面中为这些工具添加了更好的支持。
  • 制作了一些更便于色盲用户使用的“快速启动”通知图标。

图形

  • 修复了 OpenGL ES 顶点数组指针可能出现的内存越界访问问题。
  • 某些老款 GPU 不支持必需的 OpenGL 2.1 或更高版本,或在稳定性方面存在其他问题。这些问题可能导致模拟器在启动时发生崩溃、出现卡顿或在采用默认 GPU 设置时无法正常运行。现在,如果模拟器检测到这些 GPU 正在使用中,便会自动切换到 Swiftshader 渲染程序。
  • 修复了在 eglSwapBuffers 时绑定 FBO != 0 的情况下导致模拟器不发布正确帧缓冲区的问题。
  • 修复了虚拟 Android 显示屏只会在左上角显示的问题。我们认为这是由于配置错误的 Qt 环境变量造成的。模拟器现在会替换所有与 Qt 缩放相关的环境变量。
  • 修复了以下问题:从快照加载 GLES1 应用时,模拟器会在某些情况下发生崩溃。
  • 修复了 OpenGL 中以及启动渲染线程时可能导致双重释放或数据损坏的并发问题。
  • Android 模拟器现在支持使用 API 级别 28 或更高级别的系统映像的 ASTC LDR 压缩纹理支持 (GL_KHR_texture_compression_astc_ldr)。
  • 大多数新款 GPU 现在应该能够在不使用 GLESDynamicVersion 功能标记的情况下,启动默认启用 OpenGL ES 3.x 的模拟器。
  • -gpu guest(客户机中的软件渲染)已被弃用。API 级别 28 或更高级别的系统映像现在会自动改用 Swiftshader (-gpu swiftshader_indirect)。
  • 如果使用 -no-window 标记从命令行启动模拟器,现在会默认采用 Swiftshader 这个渲染程序。

位置

  • 模拟器现在可以更新方位以及纬度和经度位置。通过在回放 GPX 或 KML 文件时推断运动情况,磁力计虚拟传感器会自行动态调整为指向地磁的北极。
  • 现在可在“Location”页面上设置设备速度。
  • 回放 GPX 或 KML 文件时,系统会自动设置速度,并在播放结束时将速度设置为零。
  • 海拔高度不再局限于介于 -1000 到 +10000 米之间。
  • 修复了虚拟 GPS 位置不会定期更新(除非至少打开过一次“Extended controls”窗口)的问题。

相机

现在,可在 Windows 上使用更多的摄像头,因为模拟器会动态调整来自摄像头的相机帧的大小。此外,该功能还可以防止帧传递错误导致模拟器挂起。

Play 商店

为了解决 Play 商店映像耗尽磁盘空间的问题,模拟器现在可在使用新的 Play 商店 AVD 运行时,自动将用户数据分区的大小调整为 6 GB。

常规质量改进和修复

  • 一些用户报告模拟器运行缓慢。我们发现,一个可能的原因是模拟器的临时目录中最终会有太多过时的文件。为了解决这个问题,模拟器不会再在该目录中存储 ADB 活性检查文件。不过,这对删除那个文件夹中的内容可能也会有所帮助。根据操作系统的不同,该文件夹会位于以下其中一个位置:
    • Windows:C:\Users\<username>\AppData\Local\Temp\AndroidEmulator\*
    • macOS 或 Linux:/tmp/android-<username>/*
  • 如果模拟器因可用 RAM 空间不足而无法启动,现在会显示错误消息。如果您使用的是 Windows,并注意到有可用的 RAM,但仍然无法启动模拟器的话,则可能是因为超过了已提交内存。如需此问题的相关帮助,请参阅模拟器问题排查页
  • 现在,-sysdir 命令行选项会正确替换推断的系统映像目录。
  • 虚拟调制解调器现在支持模型 Activity 信息 +MAI 查询。
  • 修复了内存泄漏、内存损坏和 CPU 使用率方面的各种问题。如果您遇到了崩溃、内存泄漏或其他高资源使用率问题,请在问题跟踪器中创建相应问题。
  • 修复了在 macOS 10.14 上重新出现的以下问题:将蓝牙耳机与模拟器一起使用会降低全局音频质量。为了防止出现此问题,模拟器现在可在 macOS 上运行时不使用蓝牙音频。(问题 37070892
  • 修复了 Windows 上模拟器时钟时区不正确的问题。
  • 修复了模拟器在采用旋转硬盘 (HDD) 的 Linux 系统上出现的运行缓慢和挂起的问题。
  • 修复了一些可能导致 macOS 堆栈损坏的编译警告。
  • 修复了可能产生误导性挂起报告的问题。
  • 修复了在未成功创建其中一个线程的情况下销毁可能导致崩溃的线程池的问题。
  • 修复了在 macOS 上出现的以下问题:因计时器变得不可靠而导致挂起和其他奇怪行为。如果您在 macOS 上遇到模拟器挂起,请在问题跟踪器中创建相应问题。
  • 修复了关闭模拟器会停用界面但实际并未关闭模拟器的问题。
  • 修复了涉及偶发崩溃的问题,包括由于打开过多的 /dev/urandom 实例导致的中止。
  • 修复了导致模拟器在 ADB 首次被强制终止后无法启动的问题。
  • 移除了 MIPS 编译。如果您仍需要使用 MIPS,请在问题跟踪器中创建相应问题。
  • 修复了在快照加载时 ADB 连接可能会损坏的问题。
  • 修复了在恢复设备方向与 AVD 默认方向不同的快照时,模拟器窗口出现残留图像或瞬间移动到屏幕之外的问题。
  • 修复了保存快照时出现的崩溃问题。
  • 在 Linux 上,btrfs 文件系统会导致运行速度极其缓慢,因为模拟器会自动保存快照并为其虚拟磁盘设备使用写入时复制。建议清除 ~/.android/avd 目录并在空的 ~/.android/avd 目录中运行以下命令:
        chattr +C
        
    这将在停用写入时复制的文件夹中创建新的快照。

HAXM 7.3.2

我们之所以再次提及 HAXM 7.3.2,是因为必须安装它才能在模拟器上正常运行最近的系统映像。HAXM 7.3.2 应该已在稳定版渠道中推出,并且也可以通过 https://github.com/intel/haxm/releases 手动安装。

以下是此版 HAXM 已解决的几个问题:

  • 修复了使用最新 Linux 内核 (>= 4.6) 的客户机操作系统的随机崩溃问题。例如,Ubuntu 18.04(#39#74)。
  • 修复了可能导致主机崩溃的 x86 指令模拟器错误 (#93)。

弃用在 Windows 上运行的 32 位版本

由于使用率低和维护成本高,我们打算弃用在 Windows 上运行的 32 位版 Android 模拟器。在移除并终止使用该版本的 Android 模拟器之前,我们会推出相应的过渡计划。不管怎样,我们一直都在积极寻求针对这项未来更改的反馈或疑问。

如果您目前依赖的是在 Windows 上运行的 32 位版 Android 模拟器,则有任何有助于我们在未来与您展开精诚合作的建议,都请通过问题跟踪器告知我们。

27.3.10(2018 年 8 月)

此更新修复了以下问题:

修复了 RAM 大小配置

一些用户报告模拟器运行缓慢。我们发现,一个可能的原因是 AVD 的 config.ini 文件中的 AVD RAM 大小设置不正确。

为了缓解这一问题,模拟器将使用 API 级别不低于 26 的映像的 RAM 最低级别提高到 1536 MB 的 Android Studio 默认级别。如果 AVD 的 config.ini 文件未以兆字节为单位列出 hw.ramSize,请在问题跟踪器中创建相应问题。您可以在以下位置找到 config.ini 文件:

~/.android/avd/<avdname>.avd/config.ini

27.3.9(2018 年 7 月)

此更新做出了以下改进和错误修复:

完善了针对 Windows 虚拟机监控程序平台的错误消息

一些用户在诊断 Windows 虚拟机监控程序平台 (WHPX) 为什么在他们启动 WHPX 模拟器后无法初始化时遇到困难。为帮助您诊断这些问题,我们添加了一些信息更丰富的错误消息。您可以使用 -verbose 标记在命令行中运行模拟器来启用这些错误消息。

常规修复

  • 修复了在相机应用中加载快照时出现的 OpenGL 错误。

27.3.8(2018 年 7 月)

此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些错误。

快照

现在,您可以为指定的设备配置保存多个 AVD 快照,并可选择在启动模拟器时加载哪些保存的快照。

从 Android Studio 3.2 Canary 13 开始,每个设备配置都会在“Virtual Device Configuration”对话框的高级设置中包含一个控件,您可以使用该控件指定在启动 AVD 时加载哪个 AVD 快照。

为配合快照功能的这种扩展,我们在 Extended controls 对话框中添加了 Snapshots 类别。这个新窗格会显示用于保存和加载 AVD 快照的一些控件(包括先前位于 Settings 窗格中用于保存和加载快速启动快照的控件)。

您可以修改每个已保存快照的名称和说明。

如需了解详情,请参阅快照部分。

HAXM 7.2.0

HAXM 7.2.0 现已在所有渠道中推出。

此更新修复了一些错误并改进了针对大量 RAM 的支持。此外,如果结合使用此 HAXM 更新和模拟器 27.3 及更高版本,快照则会根据需要将内容加载到 RAM 中,而不是在虚拟设备启动时加载整个快照。此更改应该会大大缩短加载快照所需的时间。

如需了解详情,请参阅配置虚拟机加速部分。

27.2.9(2018 年 5 月)

此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些错误。

屏幕录制

现在,您可以在 Android 模拟器中录制视频和音频,并可将录制内容保存到 WebM 或动画 GIF 文件中。

屏幕录制控件位于 Extended controls 窗口的 Screen record 标签中。

提示:您也可以按 Control + Shift + R(在 Mac 中按 Command + Shift + R)来打开屏幕录制控件。

要开始屏幕录制,请点击 Screen record 标签中的 Start recording 按钮。要停止录制,请点击 Stop recording

用于播放和保存录制视频的控件位于 Screen record 标签底部。要保存视频,请从该标签底部的菜单中选择 WebMGIF,然后点击 Save

您也可以在命令行上使用以下命令,从模拟器中录制并保存屏幕录制内容:

adb emu screenrecord start --time-limit 10 [path to save video]/sample_video.webm

屏幕截图

您可以在命令行中使用以下任一命令截取屏幕截图:

  • screenrecord screenshot [destination-directory]
  • adb emu screenrecord screenshot [destination-directory]

屏幕截图会以 PNG 格式保存。

虚拟场景摄像头和 ARCore

利用新的虚拟场景摄像头,您现在可以更轻松地使用 ARCore 开发和测试增强现实应用 (AR)。该摄像头可让您在虚拟环境中实验 AR 体验。

要了解如何在模拟器中使用虚拟场景摄像头,请参阅在 Android 模拟器中运行 AR 应用一文。

Pixel 设备映像上的 Google Play 商店

现已为 Pixel 和 Pixel 2 设备映像启用 Google Play 商店。在 Android Studio 3.2 及更高版本的 AVD Manager 中,系统会通过在 Play Store 列中显示 Google Play 徽标来指明 Play 商店已启用。对于启用了 Google Play 商店的 AVD,Extended controls 对话框中会显示 Google Play 标签,以提供便于在设备上更新 Google Play 服务的按钮。

快照

您现在无需重启模拟器,便可加载快速启动快照。要加载快照,请打开 Extended controls 窗口,然后转到 Settings 页面并点击 Load Now 按钮。

我们对快照的加载和保存做出了许多改进,以提高资源使用效率并最大限度地缩短执行每项操作所花费的时间。如果您在保存快照时仍然需要花费超乎寻常的时间,请提出问题,并详细说明您使用的 CPU、RAM 以及当时正在运行的防毒软件/防火墙/安全软件的设置。

使用 Skia 渲染

使用 API 27 或更高级别的映像时,模拟器可以使用 Skia 渲染 Android 界面,如此一来,渲染会变得更加流畅和高效。

目前,您必须明确启用 Skia 才能使用它。

要启用 Skia 渲染,请在 adb shell 中使用以下命令:

      su
      setprop debug.hwui.renderer skiagl
      stop
      start
    

相机

在 Windows 上,Android 模拟器现在会将 Media Foundation 用作摄像头后端,这极大地提高了使用摄像头抓拍功能的性能和帧速率(最高可达 720p 30 FPS)。

在 Mac 上,您现在可以一起使用 webcam0 和 webcam1。

其他

-phone-number-prefix 命令行选项已更改为 -phone-number [number],允许设置完整的电话号码。

您现在可以使用由字母数字组成的短信地址。

修复

  • Linux 版的 Android 模拟器现在使用新型 Clang C ++ 工具链编译。此更改修复了由于 libGL 和 libstdc++ 错误导致模拟器无法启动的问题。
  • 修复了导致崩溃和挂起的多个问题。
  • 为了避免因可用磁盘空间不足而导致崩溃和挂起,模拟器现在会在启动时检查是否有足够的可用磁盘空间,并且只会在可用空间至少有 2 GB 的情况下启动。
  • 修复了阻止某些 Unity 游戏无法渲染的问题。
  • 修复了导致模拟器无法连接到网络的 DNS 问题。
  • 修复了导致对内部存储空间(通过“Virtual Device Configuration”对话框分配给 AVD)所做更改不起作用的问题。
  • 修复了许多 adb 进程被创建且未正确关闭的问题。
  • 修复了导致旋转按钮和界面其他部分无响应(除非“Extended controls”窗口已打开)的问题。
  • 修复了导致无法在主机上执行复制和粘贴操作(除非 Extended controls 对话框至少打开过一次)的问题。
  • 更新了无框模拟器调整矩形大小的功能,以更好地搭配模拟器的视觉主题。
  • 现在,启用飞行模式后,电话和短信功能都会被正确停用。
  • 修复了加载快照后导致短信和移动网络功能遭到停用的问题。
  • 您将不会再收到显示以下内容的虚假警告消息:“Unable to open... \pstore.bin. Permission denied.”
  • 修复了导致无法在某些 Mac 屏幕上重新定位 AVD 的问题。
  • 修复了以下一些问题:运行采用 Pixel 2 XL 皮肤的 AVD 时,较新款 MacBook Pro 计算机上会出现闪烁和空白屏幕。
  • 修复了以下一些问题:在无框模拟器处于活动状态时,如果切换到放大模式,会出现空白屏幕。
  • 修复了导致设备皮肤和模拟器内容在放大后无法同步滚动的问题。

如果您仍然遇到挂起或其他不稳定性问题,请提交问题

27.1.12(2018 年 3 月)

此更新修复了以下问题:

  • 启动模拟器后,蓝牙音频质量下降。(问题 37095756
  • 发送给一个模拟器的位置还会发送给打开的其他模拟器。(问题 73450633
  • 使用控制台设置的 GPS 位置会被通过图形界面中 Extended controls > Location 设置的值替换。(问题 73471760

如果您仍然遇到挂起或其他不稳定性问题,请提交问题

结合运用此更新、当前系统映像和 Android Studio 预览版,您可以使用 Android 模拟器运行用 ARCore 编译的增强现实应用。有关详细要求和说明,请参阅在 Android 模拟器中运行 AR 应用一文。

27.1.10(2018 年 2 月)

  • 相机捕获分辨率

    现在,可通过连接的摄像头捕获 720p 的帧。

    要与 Android 8.1(API 级别 27)及更高版本的系统映像配合使用,所有连接的摄像头必须能够捕获 720p 的帧。

  • 修复

    • 修复了导致使用摄像头录制有时输出失真或全绿图像的问题。
    • 修复了以下问题:即使实际上没有挂起,也可能显示以下消息:“emulator: ERROR: detected a hanging thread 'Qt event loop'. No response for 15000 ms”(模拟器:错误:检测到挂起的线程“Qt 事件循环”。在 15000 毫秒内没有任何响应)。

如果您仍然遇到挂起或其他不稳定性问题,请提交问题

27.1.7(2018 年 2 月)

  • 无框模拟器窗口:

    默认情况下,带有设备皮肤文件的模拟器不会显示周围的窗口框架。要显示周围的窗口框架,请在 Extended controls 窗口的“Settings”窗格中启用 Show window frame around device

  • 改进了快速启动功能,以提升与 AVD 快照搭配使用的效率:

    • 您可以使用 Extended controls 对话框“Settings”窗格中的 Save Now 按钮随时保存 AVD 快照。
    • 通过仅保存当前状态与先前所保存快照之间的差异,模拟器缩短了在许多情况下保存快照所需的时间。

    有关详情,请参阅有关快速启动的文档。

  • 模拟器已更新为使用 QEMU 2.9。

    以下是一些重要改进:

    • 经过优化的 I/O 和更精细的 I/O 线程锁定,进一步提升了性能。
    • 修复了自 QEMU 2.8 (26.1.4) 以来的一些错误。
    • HAXM 后端的新实现方式。

    要了解完整的更改列表,请参阅 QEMU 2.9 更改日志

  • 符合 OpenGL ES 3.0 标准的 Swiftshader 实现:

    现在,模拟器的 Swiftshader 渲染程序完全符合 OpenGL ES 3.0 标准。要详细了解 Swiftshader 渲染程序,请参见 Extended controls Settings >Advanced 部分。

  • 修复

    • 修复了无法共享剪贴板(除非先关闭然后再打开 Enable clipboard sharing 选项)的问题。
    • 修复了搭配使用 Swiftshader 渲染后端和低分辨率 AVD 时出现的挂起问题。

27.0.5(2018 年 1 月)

  • 现在会默认停用在 Windows 上用于渲染的 ANGLE。

    如果您更喜欢使用 ANGLE,可以在命令行中使用 -gpu angle_indirect 标记来重新启用它;或者,打开“Extended controls”窗口,并依次转到 Settings > Advanced,然后选择用于设置 OpenGL ES 渲染程序的 ANGLE D3D11

  • 修复了按 Shift + B 不输入大写字符 B 的问题。

27.0.2(2017 年 12 月)

  • 新的快速启动功能以 AVD 实例快照为基础,可缩短模拟器的启动时间。

    默认情况下,系统会为所有 AVD 启用快速启动功能。尽管 AVD 在首次启动时必须执行冷启动(如同启动设备),但之后的所有启动都会很快,而且会将系统恢复到关闭模拟器时的状态(类似于唤醒设备)。

    要控制模拟器保存快照的时机,请打开模拟器的“Extended controls”窗口,然后点击 Settings。在此处,您可以选择 Save quick boot state on exit 的以下其中一项设置:

    • Yes:关闭模拟器时始终保存快速启动快照。这是默认设置。
    • No:一律不保存快速启动快照;每次都执行冷启动。
    • Ask:在关闭模拟器时,提示是否保存快速引导快照。

    您的选择仅适用于当前打开的 AVD。

    有关详情,请参阅相关快速启动文档

  • 添加了对 Mac OpenGL ES 3(适用于使用 API 级别 24 及更高级别的系统映像、Google API 和 x86 ABI) 的支持。

  • 为了提高 OpenGL ES 2+ 应用的稳定性,模拟器现在会使用 OpenGL 核心配置文件(如果有)。

  • 用于使用 Swiftshader/ANGLE 进行渲染的新选项:

    • -gpu swiftshader_indirect:Swiftshader 的变体,速度更快、更稳定,可与快速启动功能搭配使用。
    • -gpu angle_indirect(仅限 Windows):ANGLE D3D 的变体,更加稳定,还可以与快速启动功能搭配使用。

    旧的 -gpu swiftshader-gpu angle 选项现已弃用。在“Extended controls”窗口中,Settings > Advanced 下用于设置 OpenGL ES 渲染程序的“SwiftShader”和“ANGLE”选项现在使用的是 *_indirect 变体。

  • 修复了各种其他错误。

26.1.4(2017 年 8 月)

这是一个次要版本,修复了一些错误并对 GPU 配置做出了以下改进:

  • 在 ANGLE 渲染程序上运行时,启用开机动画
  • 在 ANGLE 渲染程序上运行时,停用 GLES3

26.1.3(2017 年 8 月)

这是一个次要版本,修复了一些错误、提升了性能并做出了一些小的功能变更。

  • 此版本现在需要使用最新的 Android 8.0 系统映像(符合 Treble 标准,且具有独立的 vendor.img 分区)。
  • 现在可使用新的 HAXM 6.2.0(请查看 SDK Manager)并加入了以下更新:
    • 提高了内存使用效率。由 HAXM 固定的内存工作集峰值不再等于 AVD RAM 的大小;而是按需分页。这有助于模拟器在 RAM 容量较小的计算机上更稳定地运行。
    • 现在,带有 HAXM 6.2.0 的模拟器在 macOS 上可跳过冗长的初始化阶段,从而让启动变得更加快速。
  • 对 GPU 配置做出了以下改进
    • 修复了以下问题:如果通过回退到采用 Swiftshader 的主机端软件渲染来执行客户机端软件渲染,那么在启动过程中会出现黑屏。将 API 级别 19-25 的最新版系统映像与 Google API 搭配使用应该能够让客户机端渲染正常运行。
    • 修复了以下问题:虽然因检测到存在老款 Intel GPU 而让模拟器改用软件渲染程序,但模拟器实际上仍是在独立的 GPU 上运行。让 GPU 改用 ANGLE 还是 Swiftshader 进行渲染将根据下列情况确定:
      • 老款 Intel iGPU 在运行 OpenGL 和 ANGLE D3D 驱动程序时都会出现驱动程序问题。使用 3xxx 及更老款 HD Graphics 的用户将使用 Swiftshader。
      • 一些用户报告称,由于“Pixel Launcher keeps stopping”错误,无法使用 API 级别 25 的映像。这似乎是在某些 Intel HD 4xxx 型号中出现的驱动程序问题。因此,系统会为他们自动改用 ANGLE。
    • 要获得最理想的 GPU 模拟效果,建议使用独立的 NVIDIA 或 AMD GPU,或较新版款 Intel GPU(Iris、HD 5xxx、HD 5xx/6xx)。
    • 修复了以下问题:如果 AVD 配置了 hw.gpu.mode=host 且模拟器是在远程桌面客户端中启动,那么模拟器无法启动(OpenGL 模拟不能顺利初始化)。
    • 更正了“OpenGL ES API level (requires restart)”设置;并添加了相应选项,在遇到问题或需要在较低级别的 OpenGL ES API 上测试时,可从 OpenGL ES 3 降级到 OpenGL ES 2。
    • Mesa 渲染程序已被弃用;hw.gpu.mode=mesa 现在将自动切换为在主机上使用 Swiftshader。
  • 针对 macOS 做出了以下改进:
    • 现在,模拟器会通过 Hypervisor.Framework 或 HAXM 6.2.0 与 macOS 10.13 High Sierra 完全兼容。
    • 在 macOS 上,现在会为 32 位 x86 映像默认启用 Hypervisor.framework,以提升性能和与 macOS 的兼容性。在您遇到这方面的具体问题时,请提交错误报告并将 HVF = off 附加到 ~/.android/advancedFeatures.ini 中(如果没有这个文件的话,请创建一个)。
    • 修复了在使用 Hypervisor.framework 时无法连接互联网/不能附加调试程序的问题。
    • 为了提升使用摄像头抓拍功能的兼容性和性能,基于 QTKit 的使用摄像头抓拍功能已被替换为基于 AVFoundation 进行缓冲的使用摄像头抓拍功能。
  • 添加了对某些系统映像(目前仅限 API 级别 25)中的 WLAN 的支持。可使用名为“AndroidWifi”的接入点,Android 也会自动与之连接。您可以通过使用命令行参数 -feature -Wifi 运行模拟器来停用 WLAN 支持。
  • 有些用户担心固定大小的 Play 商店系统映像会出现存储空间不足的问题。因此,在默认情况下,我们将大小增加到了 2 GB(在 800 MB 的基础上)。
  • 添加了可直接从设置页面打开错误报告界面页面的键盘快捷键 (Ctrl+Shift+U)。
  • 修复了以下问题:如果使用的老款 CPU 采用了 Intel x86 EPT 但未使用 UG 的话,那么在配置多个核心的情况下,模拟器将无法启动。
  • 修复了模拟器本身就在 Xen 虚拟机监控程序中运行时出现 HyperV 检测不当的问题。
  • 修复了在某些 Linux 配置下启动模拟器时发生崩溃的问题。

26.1.2(2017 年 7 月)

此版本加入了一些新功能并提升了性能。

  • 添加了在“Extended controls”窗口(依次点击 More SettingsProxy)中定义自定义 HTTP 代理配置的功能。默认情况下,模拟器使用 Android Studio HTTP 代理设置,不过您可以在此屏幕中指定手动代理配置。

  • 添加了对客户机模式 GPU 的 VNC 支持,因此可以远程查看和控制模拟器。例如,您可以启动模拟器,然后让 VNC 侦听端口 5901,如下所示:

    1. 执行:emulator -gpu guest -avd avd_name -no-window -qemu -vnc :1
    2. 打开 VNC 查看器(例如 TightVNC 查看器),以连接到端口 5901。

      • 要使用 Mac 的内置屏幕共享客户端,则在启动模拟器时需要输入 VNC 密码。要设置密码,请使用以下命令:

        emulator -gpu guest -avd avd_name -no-window -qemu -vnc :1,password -monitor stdio

        然后,在控制台中输入 change vnc password,并输入密码。

    Android O 目前不支持 VAC 模式。

  • 在“Extended controls”窗口的“Help”屏幕(点击 More 图标 ,然后点击 HelpEmulator help)中添加了 File a bug 按钮。点击 File a bug 会打开一个对话框,您可以在其中查看错误报告详情(例如屏幕截图、AVD 配置信息和错误报告日志)。然后,您可以自己保存报告或报告模拟器问题

  • 在模拟器和虚拟传感器面板中添加了陀螺仪传感器。该传感器需要使用含有陀螺仪支持的系统映像才能运行(目前为 API 级别 24 和 25)。

  • 针对主机上的多个虚拟网络接口引入多个不适用于模拟器的 DNS 地址这种情况,在 Windows 上为 Qemu DNS 列表添加了主机首选 DNS。

  • 通过服务器标记在 macOS 10.10+ 上为 32 位 x86 映像添加了实验性 macOS Hypervisor.Framework 支持,这可缩短启动时间并提升性能。

    • 如果遇到这方面的问题,请在 ~/.android/advancedFeatures.ini 中添加 HVF = off 这行内容。
  • 针对支持 OpenGL ES 3 的系统映像和主机 GPU,现在会默认启动 OpenGL ES 3.x。目前,只有 Android O(API 级别 26)和 Windows/Linux 主机支持 OpenGL ES 3。

    • 如果您遇到 OpenGL ES 3 方面的问题,请在 ~/.android/advancedFeatures.ini 中添加 GLESDynamicVersion = off 这行内容。
  • 模拟器现在会对除最终显示图片之外的所有渲染使用离屏 OpenGL FBO,这将有助于解决跨平台的颜色一致性问题。

  • 在收集突发模拟器放慢问题的数据后,我们发现该问题可能与旧版 Intel OpenGL 驱动程序和 Windows 更新之间的某些互动有关。因此,如果用户使用的是 Intel HD 4000、3000、2000(及相关 GPU),现在会默认将渲染设置为 D3D 渲染程序 (ANGLE) 或 Swiftshader(软件渲染程序)。

26.0.0(2017 年 3 月)

此版本与 API 级别 26 兼容,并且还提升了性能和修复了一些错误。

次要修订版 26.0.3(2017 年 5 月)

  • 添加了可在线更新的功能标记,用于快速解决由有问题的硬件配置引起的问题。这可让 Google 通过更新服务器端标记发布基于用户配置的修复和功能。如果您发现特定硬件方面的问题,请报告错误,以便我们展开调查。
  • 针对 Android Wear API 级别 25 系统映像的旋转输入的全新支持。要模拟 Wear 设备上的旋转输入拨盘,请点击扩展窗口上的 Rotary Input 标签。
  • 现在可以调整“Crash Reporting”对话框的大小;并且在没有做任何输入的情况下,不会再将 When to send crash reports 重置为 Ask
  • 为了防止模拟器耗尽 2 GB 的虚拟地址空间,32 位模拟器现在需要的最大 AVD RAM 大小不会超过 512 MB。
  • 添加了对模拟器映像中绝对路径的支持。
  • 在 Google Play 商店映像的扩展窗口中添加了一个新标签,其中会显示 Play 服务版本和用于检查 Play 服务更新的按钮。
  • 添加了一个可在“Emulator Settings”页面上选择 OpenGL 渲染程序的下拉菜单。如果您在 Windows 计算机上遇到 OpenGL 驱动程序方面的问题,请尝试使用 ANGLE (D3D11) 或 ANGLE (D3D9) 选项(需要重启)。如果您在非 Windows 计算机上遇到 OpenGL 驱动程序方面的问题,请尝试使用 Swiftshader 软件渲染程序(需要重启)。
  • 在极少数情况下,模拟器同时收到 exitminimize 命令后退出时会崩溃,现在修复了这一问题。
  • 修复了在 Mac 计算机上更改显示时出现的缩放问题。(问题 268296
  • 修复了以下问题:从睡眠状态唤醒主机计算机或当模拟器已经运行很长一段时间后,模拟器会占用 300% 的 CPU 并且会一直保持这么高的使用率。
  • 修复了模拟器在关闭时发生的崩溃问题。

HAXM v6.1.1 更新(2017 年 3 月)

注意:自 3 月 30 日起,HAXM v6.1.1 会通过 SDK Manager 面向 Mac 用户推出,而且很快也将面向 Windows 用户推出。

Android 模拟器的 26.0.0 版本支持 HAXM v6.1.1,其中包含以下更新:

  • 启用了性能监控单元 (PMU) 模拟器。(问题 223377
  • 修复了 Mac 上 VirtualBox 和 Docker 的共存问题。(问题 197915
  • 更正了相应安装错误消息。该消息会在安装程序无法在 Windows 上检测到 Intel VT-x(通常是因为启用了 Hyper-V)时显示。
  • 添加了对在基于 Hyper-V 的 Windows 虚拟机中加速 Android 模拟器的支持。此更新要求主机 Hyper-V 实例(即管理 Windows 虚拟机/客户机的实例)使用启用了嵌套虚拟化技术的最新版 Hyper-V。必须在客户机 Hyper-V 实例(Windows 虚拟机)中停用 Hyper-V。

依赖项

  • Android SDK Platform-Tools 修订版 25.0.4 或更高版本。
  • Android SDK Tools 修订版 26.0.0 或更高版本。

新功能和错误修复

  • 与 API 级别 26 兼容。
  • 完全符合 GLES 2.0 标准。鉴于主机 GPU 配有符合要求的桌面 OpenGL 驱动程序,模拟器现在会完全通过 Android CTS dEQP-GLES2 mustpass 列表中的测试。这已针对 API 级别 24 的 x86 映像(修订版 11 及更高版本)发布,并且很快将包含在所有系统映像中。
  • 提升了视频播放性能。现在,模拟器会将所有视频颜色缓冲区存储在主机/客户机共享内存中,并会在 GPU 中执行必要的最终 YUV 到 RGB 转换。大多数系统现在都可以使用 1080p30。这已针对 API 级别 24 的 x86 映像(修订版 11 及更高版本)发布,并且很快将包含在所有系统映像中。
  • 现在,模拟器在退出时能正确地从 adb devices 列表中注销自己,并关闭在 Linux 计算机上打开的 TCP 端口。
  • adb 连接现在更加稳定。正在运行的模拟器可被更快地检测到,并且不会再进入“离线”或“未授权”状态。

25.3.0(2017 年 3 月)

从此版本开始,Android 模拟器将与 SDK Tools 分开发布。此版本包含各种性能改进、新功能和错误修复。

次要修订版 25.3.1(2017 年 3 月)

  • 修复了默认停用 GLAsyncSwap 会导致在某些 GPU 配置上发生崩溃的问题。在 25.3.0 中添加了此功能,以改善游戏和视频的帧时间和每秒帧数,但会导致模拟器在某些未知的计算机配置上无法运行。您可以打开 android_sdk/emulator/lib/advancedFeatures.ini 文件并设置 GLAsyncSwap = on 来手动启用 GLAsyncSwap。

依赖项

  • Android SDK Platform-Tools 修订版 24 或更高版本。
  • Android SDK Tools 修订版 25.3.0。

新功能和错误修复

  • 将模拟引擎更新到了 QEMU 2.7,包括所有近期的错误修复、提升的性能和新功能。
  • 新的 IPv6 支持。
  • 模拟器现在会在主机上将 SwiftShader 用作纯软件渲染程序。
  • Android Pipe 性能提升:作为模拟器和 Android 操作系统之间的主要通信渠道,Android Pipe 现在速度提高了一个数量级、缩短了延迟时间并能提供更好的多线程性能。这让模拟器的性能得到大幅提升,其中包括:
    • 提高了 ADB 推送/拉取速度。
    • 更好地支持 3D 加速。
    • 提高了模拟器的总体响应速度。
    • 提升了图形性能。
  • 如果客户机请求 GPU 端缓冲区,模拟器现在会使用该缓冲区 (glBindBuffers/glBufferData),从而降低某些应用的 CPU 开销。
  • 改进了音频支持。
  • 加快了磁盘的 I/O 速度:模拟器现在会使用单独的线程来调度磁盘 I/O,从而降低延迟和增加吞吐量(约 1.5 倍的顺序 I/O 速度,约 5 倍的随机访问 I/O 速度)。这也减少了磁盘的刷新次数,从而降低了物理设备的负载。
  • 现在,模拟器会在 Windows 计算机上使用稀疏文件进行磁盘引导,从而加快了首次启动和“擦除数据”启动的速度。在创建或重置 AVD 时,模拟器现在向磁盘写入的数据量为 100-200 MB,而不是 2 GB 或更多。
  • 各种 GUI 增强功能:
    • 模拟器现在使用 Qt 5.7.0,其中包含一些错误修复和性能提升。
    • 由于界面初始化不再尝试将所有模拟器可执行文件作为 Qt 插件进行加载,因此初始化时间显著缩短,尤其是在 HDD 上。
    • 界面互动现在变得更加快速和顺畅,包括旋转、调整窗口大小和加载/关闭“Extended controls”窗口。