Android 模拟器包含在 Android Studio 中。
25.3.0 之前的模拟器版本作为 Android SDK 工具的一部分进行分发。
为了确保您使用的是最新版本,请在 SDK 管理器中看看是否有更新。
如需下载旧版 Android 模拟器,请参阅模拟器下载归档。
如需查看 25.3.0 之前的模拟器版本的版本说明,请参阅 Android SDK 工具版本说明。
如需了解已知问题及如何排查问题,请参阅模拟器问题排查。
35.4.4 Canary(2024 年 12 月 12 日)
新的 Android XR 模拟器
我们添加了一个新的实验性 Android XR 模拟器,用于开发和测试使用 Jetpack XR SDK 为头戴式设备构建的应用。如需了解如何安装 Android XR 模拟器和设置开发环境,请参阅此指南。
Android XR 模拟器是一款实验性工具。不过,我们决定提前与您分享,以便您尽早进行测试。可能会出现问题,尤其是在某些 Windows GPU 和驱动程序配置中。现有 2D 移动应用的兼容性测试方面也可能会出现问题。您的反馈将有助于我们改进功能,并指导我们在未来确定功能优先顺序。
到目前为止,Android XR 模拟器已在以下硬件配置上进行了测试:
- Mac (ARM)
- Windows 11
- nVidia GPU、4GB VRAM、驱动程序版本 553.35 或更高版本
- 至少有 16 GB 的 RAM
- 8 核或更多
已知问题
模拟器 - 稳定性和性能:
- 在某些 Windows 配置中,系统可能会在启动或运行应用期间发生严重锁定或崩溃。请按照 Android Studio 开发者指南中的说明启用 Windows Hypervisor Platform (WHPX)。
- 在笔记本电脑上出现的各种问题,例如在暂停-恢复周期(例如关闭笔记本电脑并重新打开)后 AVD 或界面元素无响应。
- 将应用从“主屏幕模式”切换到“全屏模式”时,偶尔会发生崩溃
- Gemini API 尚不可用;Gemini API 入门模板应用将崩溃。
模拟器 - 模拟输入和输出:
- 用于搜索和修改字段的虚拟键盘在视野中可能仅显示部分内容
无法使用鼠标和键盘在 z 轴方向(在屏幕内和屏幕外)移动元素
AVD 麦克风主机音频输入不稳定可能会导致 AVD 重启和崩溃。
声音有时会出现杂音或失真。
当摄像头移出虚拟客厅时,会出现渲染错误。
Windows 配置显示的颜色比平时更深。
在 macOS 上,让模拟器进入空闲状态并锁定屏幕后,音频将无法再正常运行。(重启模拟器即可恢复。)
当宿主机更改 Wi-Fi 时,网络连接会中断。
启用 Caps Lock 后,系统仍会输入小写字母。
在 Mac 上使用触控板滚动时不流畅。
按预期,某些界面元素可能无法通过点击和拖动滚动。如果没有,请改用鼠标滚轮滚动。
在某些 Windows 系统配置中,Chrome 中的文本、界面和其他内容模糊不清。可能的解决方法:启用 WHP。
模拟器 - 模拟平面和锚点:
- 锚点有时不会在同一位置附近重新生成
- 可移动窗格可能无法锚定到墙壁或天花板
- 在透视模式下,模拟平面与 3D 房间的实际布局不符
- 在虚拟会议室中锚定对象的总体区域受限
- Windows 上的透传视图中存在细小的可见工件
- 在某些情况下,放置锚点可能会导致应用崩溃
- 在 Windows 上将应用移至底部时,应用顶部可能会出现黑线
模拟器 - 其他:
- 模拟器只能在“独立”模式下启动。尚不支持“嵌入”模式(嵌入式界面)。
- 在 Windows 上使用账号登录模拟器可能会导致模拟器挂起
- 窗口的界面内容可能会在调整大小后消失(解决方法:按“Home”按钮)
- 在 JXRCore ActivityPanelTest 应用中,辅助面板最初不会显示
- 快捷设置项可能会在较长一段时间后从系统设置中消失。
- 模拟器界面最初可能会显示在屏幕区域之外。如果是,请稍微调整模拟器窗口的大小,它应该会弹回原位。
- 在 Windows 上使用 Chrome 远程桌面时,模拟器可能无法启动
- 模拟器目前不支持 Open XR,并且 Open XR 应用可能会导致模拟器崩溃
- 在 Windows 上尝试通过 Android Studio 扩展设置提交 bug 报告时,偶尔会失败
- 在 Mac 上,除非光标悬停在“设置”应用中的“返回”图标附近,否则该图标不会正确显示
- 在某些情况下,如果将“基准配置文件”模块用作 XR 模板项目的一部分,构建可能会出错
- “XR Talkback”无障碍功能目前仅部分集成到模拟器中
Scene Viewer 应用:
- 在 Scene Viewer 中移动元素可能会导致其崩溃。如需解决此问题,只需将头部位置从其初始位置稍微移开(例如,使用平移、摇臂、WASD 等),然后再尝试移动元素。
- 如果 3D 模型的实际尺寸低于或高于缩放最小值和最大值限制(目前分别设置为 20 厘米和 70 米),1:1 实际尺寸功能将无法正常运行
- 3D 模型可能会在加载后的第一个帧跳转
35.2.10(2024 年 10 月 1 日)
- 添加了新的 Pixel AVD,包括 Pixel 9、Pixel 9 Pro、Pixel 9 Pro XL 和 Pixel 9 Pro Fold
- 为香草冰淇淋 (API 35) 添加了新的平板电脑系统映像
35.1.20(2024 年 8 月 29 日)
- 添加了 Pixel 8a AVD
- 修复了可折叠设备的各种 bug
- Qt 更新以及对与 Qt 相关的崩溃和挂起问题的修复
- [bug 修复] 修复了在 Windows 上使用 Vulkan 的应用发生崩溃和冻结的问题
34.2.16(2024 年 7 月 9 日)
- [bug 修复] 修复了 Pixel Fold 在折叠/展开期间发生的界面冻结问题
- [bug 修复] 在 Mac M1 上,Android 版本显示为 Android Vanilla Ice Cream 预览版,而不是 API 35。
- [bug 修复] 问题 296162661:在 Pixel C 平板电脑模拟器上,HasSystemFeature FEATURE_SENSOR_HINGE_ANGLE 会返回 true
34.2.15(2024 年 5 月 31 日)
- 修复了与 swangle 模式和广告客户清理相关的各种崩溃问题
34.2.14(2024 年 5 月 20 日)
使用 Android Studio Jellyfish 稳定版补丁 1 进行了测试。
- [bug 修复] 快照有时会在嵌入式模拟器上挂起
- [Bug 修复]“否”和“取消”按钮在快照中无法正常运行
- [bug 修复] 方向键按钮无法使用
- [Bug 修复] 修复了在 Windows 上出现的问题,该问题会导致在某些情况下,当使用 GPU 模式与 ANGLE 搭配使用时,模拟器无法启动,并在日志中返回“Failed to initialize GL emulation”(未能初始化 GL 模拟)错误消息。请注意,使用
-gpu swangle_indirect
选项通过命令行启动模拟器时,此版本可能仍会生成此错误。如果您仍希望使用此版本在 Windows 上通过命令行启动模拟器并使用软件图形渲染,请使用-gpu swiftshader_indirect
- [Bug 修复] 键盘上的“位置”快捷键会加载无法使用的地图
- [Bug 修复] 设置位置时,“保存路线”对话框缺失
34.2.13(2024 年 4 月 30 日)
使用 Android Studio Jellyfish 稳定版进行了测试。
- 更新为 Qt 6.5.3
- 模拟器“Extended Controls”中的“Location”功能所使用的 Google Maps API 更新的兼容性(5 月底生效)。
- 高影响的崩溃问题修复
- 对 Pixel AVD 进行了各种修复
- 更新了用于软件渲染的图形库
- [bug 修复]问题 225541819 在 x86_64 上启动 Chrome 时模拟器会崩溃
- [bug 修复]问题 314614435
-http-proxy
开关解析有误
34.1.20(2024 年 4 月 1 日)
使用 Android Studio Iguana 稳定版进行了测试。
- [bug 修复] 问题 314614435:修复了错误解析
-http-proxy
开关的问题
34.1.19(2024 年 3 月 7 日)
使用 Android Studio Iguana 稳定版进行了测试。
- [bug 修复] 问题 312677259:修复了调整窗口大小后嵌入式模拟器中屏幕冻结的问题。
34.1.18(2024 年 2 月 29 日)
使用 Android Studio Iguana 稳定版进行了测试。
- 向模拟器添加了设备,包括:
- Pixel Fold
- Pixel Tablet
- Pixel 8
- Pixel 8 Pro
- Pixel 7a
- gRPC 集成测试:gRPC 端点现已可供在模拟器中运行的插桩测试使用,从而支持测试真实场景。借助此功能,开发者可以在 Android 插桩测试中安全地与 Android 模拟器托管的 gRPC 端点进行交互。
- 修复了各种 bug
33.1.24(2023 年 12 月 28 日)
使用 Android Studio Hedgehog Stable 和 Iguana Beta 1 进行了测试。
- 修复了不允许以 mp4 格式进行屏幕录制的模拟器摄像头问题。
- 修复了在屏幕录制期间展开 Pixel Fold AVD 时模拟器发生崩溃的问题。
- 修复了以下问题:Pixel Fold 在拆卸键盘后显示不同的手机皮肤且无法使用(在 Windows、Mac Intel 和 Linux 上已修复)
- 修复了独立模式下虚拟传感器的外观故障(在 Windows、Mac Intel 和 Linux 上已修复)
- 修复了一些崩溃问题,尤其是在关闭模拟器时发生的崩溃问题
33.1.23(2023 年 11 月 30 日)
使用 Android Studio Giraffe 补丁 4 和 Hedgehog 稳定版进行了测试。
- 新的可折叠设备实现方式可更好地模拟 Pixel Fold 设备,适用于最新的 API 34
- 图形后端升级:我们为图形后端实现了 gfxstream 协议。这一增强功能可提升系统的整体图形性能和稳定性。此外,从 API 34 的系统映像开始,引入了 Vulkan 1.3 支持
- 功能请求:提供用于停用“双指张合即可缩放”手势或重新分配其热键的选项
- [bug 修复] 问题 302562962 修复了使用 MacOS Sonoma 时模拟器摄像头崩溃的问题
- [bug 修复] 问题 293503871 修复了在模拟器重启时不保存“麦克风”设置的问题
- [bug 修复] 问题 270386314 修复了在 AVD 界面最小化后边栏保持打开状态的动画错误
- [bug 修复] 问题 154896775 修复了 bug 提交工具相关问题
32.1.15(2023 年 8 月 29 日)
通过 Android Studio Giraffe Patch 1 和 Hedgehog Canary 16 进行了测试。
- 符合 AAE 模拟器中传感器的 GAS 硬件要求
- [bug 修复] 问题 266201208 在 API 33 上无法发送希伯来语短信
- [bug 修复] 问题 257097404 在 API 29 和 30 上唤醒主机后,模拟器不显示正确的时间
- [bug 修复] 问题 228201899 在 Android 模拟器扩展控件中看不到 Google 地图
32.1.14(2023 年 6 月 27 日)
使用 Android Studio Hedgehog Canary 8、Giraffe Beta 5 和 Flamingo 稳定版进行了测试。
- 修复了模拟器的摄像头方向和失真问题。
- [bug 修复] 问题 #257097404“在主机唤醒后模拟器不显示正确的时间”。对于 API 29 和 API 30,此 bug 仍可重现。
- [bug 修复] 问题 #243456582“在 Mac M1 计算机的模拟器中,API 30 之后的 Android 版本可能无法正确启动”
32.1.13(2023 年 5 月 22 日)
使用 Android Studio Hedgehog Canary 2、Giraffe Beta 1 和 Flamingo 稳定版进行了测试。
- 添加了对 Pixel Fold AVD 和 Pixel Tablet AVD 的支持。
- 改进了 gLinux 崩溃问题。
- [bug 修复] 问题 #215231636“API 版本高于 API 30 的模拟器在 Intel 第 12 代处理器中无法正常运行”。
- [bug 修复] 问题 #275397905 反复将光标移入和移出模拟器时,Android 模拟器 M1 上会发生高级别的崩溃。
- 与 AVD 启动相关的已知问题是问题 #281725854。如需了解详情,请参阅模拟器问题排查。
32.1.12(2023 年 3 月 21 日)
通过 Android Studio Giraffe Canary 10、Flamingo RC 和 Electric Eel Patch 2 进行了测试。
- [bug 修复]问题 267647323 在从 Android Studio 启动的模拟器上,网络无法正常运行
- [bug 修复]问题 268498686 模拟器屏幕闪烁
- [bug 修复]问题 270034824 更新到版本 33.1.1 后,模拟器性能下降
- [bug 修复] 问题 #225541819 在 x86_64 上启动 Chrome 时模拟器会崩溃
- [bug 修复]问题 257097404 在主机唤醒后模拟器不显示正确的时间
- 为 Apple M1 设备添加了崩溃报告
32.1.11(2023 年 2 月 8 日)
通过 Android Studio Giraffe Canary 2、Flamingo Beta 版 1 和 Electric Eel Patch 1 进行了测试。
- 网速优化
- 嵌入式模拟器中的鼠标支持
- Virtio-snd 改进
- 在安装期间解压缩 Android 模拟器时,停用符号链接
- 修复了模拟器检查中发生的崩溃问题
31.3.14(2022 年 12 月 13 日)
使用 Android Studio Dolphin、Electric Eel RC1 和 Flamingo Canary 9 进行了测试。
- [bug 修复] 修复了登录 Play 商店时的 AVD 崩溃问题。
31.3.13(2022 年 10 月 27 日)
使用 Android Studio Dolphin、Electric Eel Beta 版 2 和 Flamingo Canary 5 进行了测试。
- [bug 修复] 问题 249948338:时区参数不起作用
- [bug 修复] 问题 249366543:在 API 31 之后,模拟器 -dns-server 选项不起作用
31.3.12(2022 年 10 月 10 日)
使用 Android Studio Dolphin 和 Electric Eel Beta 版 1 进行了测试。
此更新做出了以下改进和修复:
- [bug 修复] 问题 247843000:AVD 相对路径处理错误
- 增加了 API 24 及更高级别的磁盘大小
31.3.11(2022 年 9 月 23 日)
使用 Android Studio Dolphin 和 Electric Eel Canary 10 进行了测试。
此更新做出了以下改进和修复:
- [bug 修复]“Extended Controls”窗口上的嵌入式模拟器 AVD 崩溃
- [bug 修复] 问题 183139207:与模拟器启动麦克风相关的音频问题
- [bug 修复] 问题 229764024:会导致界面行为问题的 AVD 触控粘滞 bug
- [bug 修复] 在 Mac M1 上启动 API 33 AVD 时出错。
- [bug 修复] 问题 243053479:更新模拟器后网速变慢
- [bug 修复] 问题 244617627:Windows 和 Linux 上的 Google 地图的位置功能不起作用
- [bug 修复] 问题 232971796:“Extended Controls”>“Phone”页面上的“call device”按钮不起作用
- 将 Android 模拟器更新为 minigbm
- 将构建脚本迁移到 Python3
31.3.10(2022 年 8 月 18 日)
使用 Android Studio Dolphin Beta 版 5 和 Electric Eel Canary 9 进行了测试。
现在可以单独下载模拟器。如果您在使用此最新稳定版本时遇到任何问题或发生崩溃,请提交 bug,并考虑从模拟器下载归档下载可正常运行的旧版本。
此更新做出了以下改进和修复:
- 为 Windows 上的 Unicode 路径提供了更好的支持
- 改进了对模拟器关闭的处理,以便同一个 AVD 的新启动能够成功。
- 更新了可折叠 AVD 的设计和默认设置
- 更新了 Wear 模拟器按钮
- 改进了 gRPC 音频流式传输
- 添加了可调整大小的模拟器控制台命令
- 适用于 API 31 的 Chrome 修复程序
- [bug 修复] 在 GmsCore v21.42.18 中 Google 账号身份验证失败
31.2.10(2022 年 4 月 20 日)
使用 Android Studio Dolphin Canary 8 和 Chipmunk RC 1 进行了测试。
此更新做出了以下改进和修复:
- 添加了使用回退机制加载 Vulkan 函数的实用程序
- [bug 修复] 修复了 gcc8 构建错误
31.2.9(2022 年 3 月 23 日)
使用 Android Studio Dolphin Canary 7 进行了测试。
此更新做出了以下修复:
- [bug 修复] 在 M1 上保存快照时忽略内存压力
31.2.8(2022 年 2 月 7 日)
使用 Android Studio Bumblebee Patch 1 和 Chipmunk Canary 6 进行了测试。
此更新做出了以下改进和修复:
- [bug 修复] 无法登录应用
- [bug 修复] 问题 #215368358:Intel 平台上的“adb reboot”会通过“vCPU 关闭请求”让 avd 崩溃
31.2.7(2022 年 2 月 1 日)
使用 Android Studio Bumblebee Patch 1 和 Chipmunk Canary 6 进行了测试。
此更新做出了以下修复:
- [bug 修复] M1 机器上的模拟器挂起错误。
31.2.6(2022 年 1 月 20 日)
使用 Android Studio Arctic Fox、Bumblebee Beta 版 4 和 Chipmunk Canary 6 进行了测试。
此更新做出了以下改进和修复:
- 向 Wear OS 模拟器添加了 Wear 按钮。
- 使 VHAL 标签页中的所有车辆属性可修改。
- [bug 修复] 在 GmsCore v21.42.18 中 Google 账号身份验证失败。
- [bug 修复] Netshaper 与 VirtioWifi 搭配使用效果不佳。
- [bug 修复] 事件鼠标控制台命令不起作用。
- 添加了针对本地 AVD 创建操作的 KVM 检查。
31.1.3(2022 年 1 月 18 日)
此更新做出了以下改进和修复:
- 为 Fuchsia 启用了控制台端口。
- 调整多显示屏窗口的大小时,屏幕方向会被忽略。
- Wi-Fi:添加了对根据 MAT MAC 地址滤除单播数据包的支持。
- Wi-Fi:修复了使用 vmnet 时发生崩溃的问题。
30.9.5(2021 年 12 月 15 日)
此更新做出了以下改进和修复:
- 添加了轻松根据桌面设备或平板电脑尺寸调整窗口大小的功能。
- 添加了对来自兼容主机设备的多点触控输入的支持。
- VirtioWifi:添加了对点按网络的支持。
- 为 Wear 系统映像启用了旋转输入。
- 修复了 gRPC 音频配置问题。
- 更新了 SensorReplay 模拟器播放功能,以支持标准 Android 传感器。
- 使用直通式 USB 将模拟器连接到外围设备和设备。
30.4.5(2021 年 2 月 23 日)
此更新做出了以下改进和修复:
- macOS:修复了音频输入失真的问题。
- 添加了对用户空间中的 virtio-vsock 的支持。
- 日后的系统映像将使用 virtio-console 处理 logcat 和内核消息。
- 提高了 Vulkan 渲染的速度。
- 添加了对测试失败时进行快照调试的支持。
- virtio-gpu:更新了定义,以支持最新的 blob 资源枚举。
- 为“asg”类型图形传输添加了快照方面的支持。
- macOS:添加了对于针对 macOS SDK 11.1 和更高版本进行构建的支持。
- 在较新的系统映像中,KVMclock 默认处于启用状态。
- 添加了对 Wear 模拟器的心率传感器的支持。
- 移除了 libportability Vulkan 后端。
- 添加了对调制解调器模拟器中更多功能的支持。
30.0.26(2020 年 8 月 16 日)
此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些 bug。
为可折叠设备提供虚拟铰链传感器和 3D 视图支持
针对可折叠设备添加了对铰链传感器的支持。这需要使用未来的 Android 11 系统映像和 AVD 配置。3D 可折叠设备视图和合页参数现已集成到现有可折叠设备预设中。在很多地方(例如,7.3 英寸可折叠 AVD 的
config.ini
文件中)都可以搭配使用以下内容:hw.sensor.hinge = yes hw.sensor.hinge.count = 1 hw.sensor.hinge.type = 1 hw.sensor.hinge.ranges = 180-360 hw.sensor.hinge.defaults = 180 hw.sensor.hinge.areas = 54.7-0 hw.sensor.posture_list=4, 3 hw.sensor.hinge_angles_posture_definitions=210-360, 180-210 hw.sensor.hinge.fold_to_displayRegion.0.1_at_posture=4
可折叠设备现在还带有子类型参数。
config.ini
属性hw.sensor.hinge.sub_type = hinge/fold
现已可用。如需了解详情,请参阅使用 Android 模拟器开发适用于 Android 11 的应用这篇博文。铰链传感器现在默认处于启用状态。
如果配置了可折叠设备,模拟器现在会向客户机发送铰链角度传感器的最新动态和折叠状态变化信息。现在,按工具栏的折叠或展开按钮时,现有的可折叠设备会更新铰链传感器的角度和折叠状态。
适用于 ARM64 主机的模拟器
Linux 模拟器源代码现在支持从 x86_64 到 arm64 主机的交叉编译,从而允许通过 KVM 虚拟化运行 arm64 系统映像。目前仅支持
-gpu swiftshader_indirect
(Swiftshader arm64 主机渲染),但也可以使用一组兼容的主机 GPU libEGL/libGLESv2 库,只需将 lib64/gles_swiftshader 替换为这些库,然后使用-gpu swiftshader_indirect
重新启动即可。此外,快照可能也无法正常运行(需要向命令行添加-no-snapshot
)。指令:mkdir emu cd emu repo init -u https://android.googlesource.com/platform/manifest -b emu-master-dev --depth=1 repo sync -qcj 12 cd external/qemu pip install absl-py pip install urlfetch sudo apt-get install crossbuild-essential-arm64 python android/build/python/cmake.py --noqtwebengine --noshowprefixforinfo --target linux_aarch64
正在推动支持 Apple Silicon。
virtio-gpu 支持
- 在主机端添加了对即将推出的 virtio-gpu 主机相干 blob 资源的支持。
- 由于模拟器渲染的运作方式,我们现在会在 vCPU 线程中处理 virtio-gpu virtqueue(因为渲染无论如何都会分流到其他线程)。virtio-gpu 渲染会在未来的系统映像和模拟器版本中启用。
- 在未来的系统映像中,模拟器将能够使用基于 virtio-gpu 的堆栈运行所有图形。
其他新功能和增强功能
- 现在可在 Windows 上使用
-qemu -usb -device usb-host,vendorid=<usb-vendor-id>,productid=<usb-product-id>
实现 USB 直通模式(Linux 和 macOS 应该也已支持这样做)。 - WebRTC 库已更新为 M83。
- 模拟器现在支持通过 WebRTC 在容器中进行音频流式传输。
- 移除了 darwinn 管道端点。
- 现在可通过环境变量
ANDROID_EMU_MEDIA_DECODER_CUDA_VPX=1
对视频进行 CUDA VPx 解码(如果硬件支持 CUDA VPx 解码)。 - 在 macOS 上,SSE 4.1 和 SSE 4.2 现已在 Android 客户机中提供。
- 在 macOS 上,INVTSC 现在默认处于启用状态。这可以提高客户机时间测量的准确性。
- 我们现在会在指标中跟踪用户选择了哪个扩展控件窗格。
- 在客户机内核版本为 5.4 或更高版本(R 系统映像或更高版本)时,Linux 模拟器现在会使用经过 KVM 半虚拟化的时钟。
- 模拟器现在会使用 LZ4 对客户机内核进行解压缩,使其与新式内核流水线兼容。
添加了以下控制台命令,用于获取模拟器 AVD 目录、嵌入 Studio 的模拟器中的发现文件路径,以及指向快照的路径:
adb emu avd path # Obtains path to AVD directory adb emu avd discoverypath # Obtains path to discovery file adb emu avd snapshotspath # Obtains path to snapshots folder adb emu avd snapshotpath <snapshotName> # Obtains path to the folder that stores the snapshot for the snapshot with name <snapshotName>
为了更轻松地节省垂直屏幕空间,我们在 Extended Controls > Settings 中添加了一个选项,用于隐藏当前 AVD 的设备框架。为了全局隐藏所有 AVD 的设备框架,我们提供了
NoDeviceFrame
功能标志,您可以通过使用-feature NoDevice
框架从命令行启动模拟器来启用该标志,也可以向~/.android/advancedFeatures.ini
(如果此文件尚不存在,请创建一个)添加NoDeviceFrame = on
以锁定该标志。在移动网络页面添加了一个下拉项,用于启用和停用按流量计费性支持;对于不支持 5G 按流量计费性切换开关的旧版系统映像,这是空操作。
- 还出于同一目的添加了以下控制台命令:
gsm meter on|off
- 还出于同一目的添加了以下控制台命令:
工具链/build 已升级为 C++17。
修复:嵌入式模拟器
- 剪贴板现在应该可以正常运行了。
- 修复了大写字符在模拟器中以小写字符的形式提供的问题。
- 修复了在 Windows 中从 Unicode 路径加载控制台令牌的问题。
- 修复了 Linux 上的
SO_REUSEPORT
错误消息。 - 修复了通过 gRPC 发送快照命令和在嵌入 Android Studio 的模拟器中按快照保存按钮时快照损坏的问题。
使用嵌入 Studio 中的 Linux 模拟器时,我们发现,如果通过 Chrome 远程桌面完成此操作,则会出现
XDG_RUNTIME_DIR
未设置的 bug,且可能会导致嵌入式模拟器因模拟器发现文件位于XDG_RUNTIME_DIR
中而无法显示。您可以在 Chrome 问题跟踪器中查看相应问题的状态。为了解决这个问题,模拟器现在会回退到使用基于用户 UID (
/run/user/<uid>
)、可能不同的目录中的发现文件。嵌入式模拟器:带圆角/缺口的设备现在可以正确更改其布局,为边角和缺口留出空间。这需要对这些模拟器进行冷启动。
gRPC 端点现在支持向设备发送短信。
常规修复
- 我们发现在 Riot Vanguard 处于启用状态时运行 Windows 模拟器会出现兼容性问题。Windows 模拟器现在可以检测到 Vanguard 反作弊系统,并会在检测到 Vanguard 时弹出警告消息。
- 修复了 Windows 上的
FD_SETSIZE
错误。我们现在使用WSAEventSelect()
(而非select()
)建立与环回服务器的非阻塞连接。 - 为 Linux 模拟器添加了 F16C CPUID 功能支持,并修复了通过 NDK 转换运行某些 ARM64 应用时出现的问题;正在设法为 macOS/Windows 模拟器提供该支持。
- 修复了 gpx/kml 路由播放问题,以遵循时间戳。
- 针对 macOS 修复了启动时跳出图标的问题。
- 现在,如果
hw.audioInput=no
和hw.audioOutput=no
位于config.ini
中,可以正常停用模拟器音频。 - 修复了以下问题:如果模拟器窗口已最小化,而“Extended controls”窗口已打开但处于非活跃状态,那么在调整模拟器窗口大小时,“Extended controls”窗口会一直显示。我们会在未来的更新中彻底移除该行为(包括“Extended controls”窗口处于活跃状态的情况)。
- 修复了模拟器启动时出现的 Wi-Fi 未连接的异常 bug。
- 修复了模拟器发出 shell 命令后长时间或无限期超时时出现的退出时挂起问题。
- 更新了 PC-BIOS 并修复了一些问题,以更好地支持传递到
-initrd
的大型映像;之前的 BIOS 采用的方法效率非常低下。 - 修复了使用
-wifi-server-port
选项时在终止期间发生崩溃的问题。 - 现在,如果不受支持的选项传递到
-prop
(仅 qemu.* 属性受支持),模拟器会输出一条警告。 - 如果在 Windows 上构建模拟器,向文件写入数据时出现异常失败的几率应该会更小。如需了解详情,请参阅 Windows 构建说明。
- 为可折叠的 AVD 停用了会导致问题的缩放按钮。
- 模拟器现在可以正确报告设备重启所用的启动时间。
- Linux:如果 KVM 权限不足,模拟器现在会更及时地输出调试说明。
- 修复了未加速时模拟器无法启动最近的系统映像的问题。
- 修复了从完成启动的检测器启动时出现内存损坏或崩溃的问题。
- 修复了在较长的屏幕录制会话期间出现内存泄漏的问题。
- 更新了模拟器图标,以反映 Studio 4.1 品牌信息。
- 改进了对在 Windows 上检测远程会话的支持。
修复:图形和视频解码
- 修复了最新的《狂野飙车 9》游戏渲染时出现黑屏的问题。
- 移除了与刷写值为
NULL
的映射缓冲区有关的垃圾内容。 - 修复了 Vulkan 客户机应用退出时拆解 Vulkan 状态导致的竞态条件问题。
- Vulkan ASTC/ETC2 模拟着色器现已纳入到 libOpenglRender 库中。与从文件系统中读取相比,这种方法更加可靠。
- 修复了一个在 Vulkan 中出现的问题:如果在主机上运行 Vulkan 1.0 实例,
vkGetImageMemoryRequirements2KHR
会错误地清除返回的VkMemoryRequirements2
结构体的pNext
字段。 - 修复了 Vulkan 渲染程序中的内存泄漏问题。
- 修复了一个近期的回归问题:具有
isampler2D
等变量名称的 GLSL ES 1.00 着色器无法编译。 - 更新了 ANGLE 着色器转换器,并进行了各种修复,解决了可能无法在 Linux 上编译着色器的问题。
- 现在,如果基本的帧缓冲区位块传输着色器无法编译,我们会使模拟器崩溃,以跟踪相关现象。
- 更新了 ANGLE 着色器转化器,以与上游 ANGLE 保持同步。这修复了在转换和常量折叠使用非方阵的 OpenGL ES 着色器时内存损坏的问题。着色器转换器现在是一个单独的共享库
libshadertranslator.dll
。 - 修复了在一些 GPU 驱动程序上找不到某些 1.1 版设备功能的 Vulkan 初始化问题。
- Vulkan:我们已还原到使用预构建的加载程序,因为支持系统 Vulkan 加载程序会导致某些设置出现问题;我们会找出更好的解决方案。
- 修复了以下问题:在使用 Vulkan 外部内存时,该内存可能会被导入主机上不匹配的内存类型索引。
- 修复了模拟
GL_ALIASED_POINT_SIZE_RANGE
时主机不支持枚举的问题。 - 修复了在某些主机 GPU 上,Skia 着色器由于与
GL_EXT_shader_framebuffer_fetch
相关的错误而无法编译的问题。 - 鉴于 D3D9 ANGLE 渲染程序的副本已在几个版本之前移除,我们现在还会自动将使用该渲染程序的用户切换为使用 d3d11 ANGLE(如果用户在界面偏好设置中选择了该版本)。
- 针对 Windows 上的 WGL 初始化添加了更多调试信息,以便跟踪失败情况。
- 在
hw.gltransport=virtio-gpu-pipe
的情况下,从主机转移到客户机时,不在主机上旋转可提升性能。 - 针对 OpenGLES 模拟无法初始化的情况,添加了更多调试日志记录。
- 修复了在快照加载时 YouTube 视频闪烁或不显示的问题。
- 我们发现 libvpx 的 CUDA 硬件解码存在问题,因此已暂时为 libvpx 切换回软件解码。如果您在主机端有受支持的 CUDA 硬件解码实现,可通过环境变量
ANDROID_EMU_MEDIA_DECODER_CUDA_VPX=1
重新启用 libvpx 的硬件解码。
30.0.10(2020 年 4 月 30 日)
此更新纳入了以下支持:直接在 Android Studio 中运行模拟器;默认为虚拟设备启用自由窗口模式。
在 Android Studio 中运行模拟器
Android 模拟器现在可以直接在 Android Studio 中运行。使用此功能可节省屏幕空间、可利用热键在模拟器窗口和编辑器窗口之间快速导航,并可在一个应用窗口中集中管理 IDE 和模拟器工作流。
自由窗口模式
您现在可以创建启用了自由窗口模式的 AVD,只需在 Android Studio 中创建虚拟设备时,选择支持自由窗口的 13.5 英寸平板电脑硬件配置文件即可。此硬件配置文件需要版本为 Android 11 开发者预览版 3 或更高的系统映像。
已知问题
由于存在会将焦点移到 Window Manager 的问题,目前无法调整自由窗口的大小。此问题将在未来的 Android 11 系统映像版本中得到解决。
30.0.0(2020 年 2 月 19 日)
此更新包含 Android 11(API 级别 30)系统映像,并提升了运行 ARM 二进制文件时的性能。
Android 11 系统映像
您现在可以通过选择以下任一可用的 API 级别 30 系统映像来创建搭载 Android 11 的 AVD:
- x86:包括 x86 和 ARMv7 ABI。
- x86_64:包括 x86、x86_64、ARMv7 和 ARM64 ABI。
Android 9 和 11 系统映像对 ARM 二进制文件的支持
如果您之前因为应用依赖 ARM 二进制文件而无法使用 Android 模拟器,那么现在您可以使用 Android 9 x86 系统映像或任何 Android 11 系统映像来运行应用,而无需再下载特定的系统映像来运行 ARM 二进制文件。这些 Android 9 和 Android 11 系统映像默认支持 ARM,而且与采用完全 ARM 模拟的系统映像相比,它们提供显著提升的性能。
已知问题
- 某些 ARMv7 二进制文件无法在 Android 11 x86 和 x86_64 系统映像上运行。以 Android 11 为目标平台时,请考虑针对 ARM64 进行构建。
29.0.11(2019 年 5 月 29 日)
此更新做出了以下改进和修复:
- Windows:模拟器现在依赖于我们随附的
libgcc
DLL,而不是使用libgcc
进行静态编译。 - Linux:增加了对 gRPC API 的 logcat 支持。如需详细了解 gRPC,请参阅 gRPC 流式传输模拟器 (Linux)。
- 模拟器现在包含 32 位 x86 客户机 (
qemu-system-i386
) 的无头 build。此功能允许 API 级别 26 及更低版本的 x86 32 位映像搭配无头 build 运行。请注意,对于 API 级别 27 及更高级别的 32 位 x86 客户机,模拟器使用 64 位引擎 (qemu-system-x86_64
),因为在这些系统映像中,用户空间为 32 位,内核为 64 位。Android Studio 根据内核来选择模拟引擎。 - 您现在可以使用
ANDROID_QT_LIB_PATH
环境变量指定自定义 Qt 库路径。 - 现在,如果 QEMU1 可执行文件 (
emulator[64]-[x86|arm|etc]
) 放置在模拟器目录中,您就可以使用之前使用 QEMU1 的二进制文件运行模拟器。 - Windows:修复了有时可能导致模拟器无法启动并显示“vCPU shutdown request”消息的问题。
- 修复了在 Vulkan 中的模拟压缩纹理内存在不必要的流水线障碍的问题。
- 修复了在使用分块传输编码时 http 代理请求发生的错误。如需了解详情,请参阅提交详细信息。
29.0.9(2019 年 5 月 7 日)
此更新做出了以下修复:
- Windows:修复了虚拟场景摄像头和网络摄像头无法在模拟器上运行的问题。
29.0.8(2019 年 5 月 6 日)
此更新做出了以下改进和修复:
- 添加了当存在用于枚举和设置每个显示屏的客户机服务时,对多个虚拟硬件显示屏的支持。未来的模拟器系统映像更新中将包含多个虚拟硬件显示屏。
- 添加了新的命令行选项:
-delay-adb
。此选项会禁止处理 ADB 数据包,直到客户机启动完成(关闭冷启动)。此选项有助于解决在 CI 环境中使用模拟器(会重新启动模拟器并同时使用 DDMS)时可能出现的问题。 - 修复了在以下情况下发生的错误:加载快照时,
glIsRenderbuffer
返回错误值。 - 修复了 Android 客户机重新启动时出现过时状态的一些问题。
- Windows:修复了在 Windows 用户名包含非 ASCII 字符或空格时无法启动模拟器的问题。
已知问题
- Automotive 系统映像的快照界面已停用,因为这些系统映像目前不支持快照。
29.0.6(2019 年 5 月 1 日)
此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些 bug。
移除了对 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
无头模拟器 build 方面的改进
从版本 28.0.25 开始,模拟器加入了无头 build 选项,可让您运行没有界面的模拟器。您可以利用无头 build 针对 Docker 和持续集成 (CI) 工作流程设置模拟器。
通过此更新,我们做出了进一步改进,可让模拟器运行最少量的依赖项。在 Linux 上,无头 build 不再包含 pulseaudio
或 libX11
库。未与模拟器打包在一起的系统相关共享库已缩减为下列几个:
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 依赖库的不兼容版本,为了解决这部分安装所出现的问题,我们现在将
libfreetype
、libsoftokn
、libsqlite3
、libxkbcommon
和模拟器打包在一起。 - 模拟器现在会使用平台的本地窗口库获取显示器尺寸,而不会使用返回不可靠结果的 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_BGRA8888
和GL_APPLE_texture_format_BGRA8888
的支持(前提是主机支持这些扩展)。 - 在 bug 报告界面中添加了更多诊断信息。此外,您还可以使用以下命令从控制台访问 bug 报告:
telnet localhost 5554
avd bugreport
- 在 Android Q 系统映像上,模拟器将其最小 RAM 大小增加到了 2 GB。
- 针对 OpenGL 或 Hypervisor 无法初始化这种情况,添加了更多日志记录和输出信息。
- 如果模拟器无法启动 AVD 的并发
-read-only
实例,现在则会尝试在 3 秒内重新启动-read-only
AVD 3 次以上。进行此更改后,在 AVD 的其他可写实例没有完成过时文件清理工作的情况下,模拟器能够启动该 AVD 的并发-read-only
实例的几率将得到提升。 - 对于即将推出的系统映像,模拟器现在支持 Hardware Composer 2.0。此更改应该会在运行大多数动画时降低驱动程序的开销。
- 模拟器 build 现在是基于 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 模拟器,该工具可以轻松找出用其他方式难以重现的 bug。
- 针对 Linux 用户:我们发现在某些主机内核上,客户机 Android 内核出错以及在 KVM 中退出时发生一般性硬件错误。现在,如果出现这种情况的话,模拟器会运行
abort()
,以提高可调试性;而在以前,模拟器只会挂起。 - 针对 Linux 用户:为了方便进行 CI 设置,您可以使用新的
-stdouterr-file <file-name>
命令行选项将stdout
和stderr
都重定向到相应文件。 - 修复了
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 Beta 3 版或更高版本,Vulkan 1.0:Android Q Beta 2 版)和兼容的主机 GPU(包括 2014 及之后的大多数 Intel GPU、NVIDIA GPU 和 AMD GPU)。
如需启用 Vulkan 支持,您必须将下列功能标志添加到 ~/.android/advancedFeatures.ini
文件中(如果没有这个文件的话,请创建一个):
Vulkan = on
GLDirectMem = on
对 ROM 开发者的初步支持
在 AOSP master
分支上构建 sdk_phone_x86
或 sdk_phone_x86_64
(userdebug
、eng
变体)目标的 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 GPU 或 AMD GPU 支持 Vulkan,请使用以下命令对采用兼容系统映像(Android Q 3 Beta 版及更高版本)的 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 是在 HTTP 上运行的 RPC 通用框架。
默认情况下,模拟器 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 日)
此更新做出了以下改进和修复:
无头模拟器 build
由于系统可能希望能够支持 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 与模拟器结合使用。如果遇到“未经授权”模拟器方面的问题,请执行以下问题排查步骤:
- 退出所有模拟器。
- 同时删除
~/.android/adbkey
和~/.android/adbkey.pub
文件。 - 运行以下命令:
adb kill-server
- 运行以下命令:
adb devices
- 擦除 AVD 数据。
- 重新启动该模拟器。
28.0.23(2019 年 1 月 29 日)
此更新做出了以下改进和修复:
默认停用主机音频输入
Reddit 上最近发布的一个帖子详细说明了搭载 Android OS 的客户机如何总是使用主机麦克风音频,从而允许“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 日)
此更新做出了以下改进和修复:
- 修复了一个在 Windows 上出现的问题,这个问题导致模拟器在使用某些型号的 Intel GPU 加载快照时出现卡顿现象。
- 修复了在使用非标准
ANDROID_SDK_HOME
位置时导致 ADB 设备出现unauthorized
状态的问题。 - 修复了一个在 Windows 上出现的问题:在启动停用了 CPU 加速功能的系统映像时导致模拟器崩溃。
- 修复了模拟器显示像素化问题。现在,降采样应该可以正常运行了。
- 修复了以下 macOS 10.14+ 问题:由于与新的无障碍功能安全设置互动,虚拟场景摄像头 MouseLook 控件可能会变得过于灵敏。
- 修复了时区计算错误,该错误可能导致模拟器时钟偶尔发生变化。
- 修复了在各种 cocos2d 和虚幻引擎应用中出现的一些渲染错误。
- 在模拟器中添加了对 WLAN 对等连接的支持。如果使用最新的 Pie Play 商店映像,两个模拟器现在可以直接通过 WLAN 相互通信。如需使用 Wi-Fi 对等连接,请使用相同的
-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 月)
此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些 bug。
资源利用率
现在,模拟器会在总体上减少对 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 管理器中的快照启动),模拟器会停用快速启动快照的自动保存功能以及在退出时保存快速启动快照的功能。这样可以降低无意中覆盖快速启动快照的可能性,并避免使用那些不使用有文件支持的快速启动快照的慢速回退路径。
QEMU 2.12
我们已将 QEMU 的变体从 QEMU 2.9 衍合到 QEMU 2.12。此更新包含以下 QEMU 更改:
- https://wiki.qemu.org/ChangeLog/2.10
- https://wiki.qemu.org/ChangeLog/2.11
- https://wiki.qemu.org/ChangeLog/2.12
以下是一些会影响 Android 模拟器的重要更改:
- x86:
gdbstub
现在会提供对 SSE 寄存器的访问权限。 - 磁盘映像:添加了映像锁定,并会默认启用此功能。只要主机支持 OFD 或 posix 锁定,便无法向同一个映像写入多个 QEMU 进程(除非另外指定了选项)。
qemu-img: qemu-img resize
支持预先分配映像的新增部分。- 现在,
qemu
和qemu-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 文件时,系统会自动设置速度,并在播放结束时将速度设置为零。
- 海拔高度不再局限于介于-1,000 到 +10,000 米之间。
- 修复了虚拟 GPS 位置不会定期更新(除非至少打开过一次“Extended Controls”窗口)的问题。
相机
现在,可在 Windows 上使用更多的摄像头,因为模拟器会动态调整来自摄像头的相机帧的大小。此外,该功能还可以防止帧传递错误导致模拟器挂起。
Play 商店
为了解决 Play 商店映像耗尽磁盘空间的问题,模拟器现在可在使用新的 Play 商店 AVD 运行时,自动将用户数据分区的大小调整为 6 GB。
常规质量改进和修复
- 一些用户报告模拟器运行缓慢。我们发现,一个可能的原因是模拟器的临时目录中最终会有太多过时的文件。为了解决这个问题,模拟器不会再在该目录中存储 ADB 活跃检查文件。不过,这对删除那个文件夹中的内容可能也会有所帮助。该文件夹位于以下其中一个位置(具体取决于您的操作系统):
- Windows:
C:\Users\<username>\AppData\Local\Temp\AndroidEmulator\*
- macOS 或 Linux:
/tmp/android-<username>/*
- Windows:
- 现在,如果模拟器因可用 RAM 空间不足而无法启动,系统会显示错误消息。如果您使用的是 Windows,并注意到有可用的 RAM,但仍然无法启动模拟器的话,则可能是因为超过了已提交内存。如需此问题的相关帮助,请参阅模拟器问题排查页。
- 现在,
-sysdir
命令行选项会正确替换推断的系统映像目录。 - 虚拟调制解调器现在支持模型活动信息
+MAI
查询。 - 修复了内存泄漏、内存损坏和 CPU 使用率方面的各种问题。如果您遇到了崩溃、内存泄漏或其他高资源使用率问题,请在问题跟踪器中创建相应问题。
- 修复了一个在 macOS 10.14 上重新出现的问题:将蓝牙耳机与模拟器一起使用会降低整体音频质量。为了防止出现此问题,模拟器现在于 macOS 上运行时不使用蓝牙音频。(问题 37070892)
- 修复了 Windows 上模拟器时钟时区不正确的问题。
- 修复了模拟器在采用旋转硬盘 (HDD) 的 Linux 系统上出现的运行缓慢和挂起的问题。
- 修复了一些可能导致 macOS 堆栈损坏的编译警告。
- 修复了可能产生误导性挂起报告的问题。
- 修复了一个由以下情况引起的问题:在其中一个线程创建不成功的情况下销毁可能引起崩溃的线程池。
- 修复了一个在 macOS 上出现的问题:因计时器变得不可靠而导致挂起和其他异常行为。如果您在 macOS 上遇到模拟器挂起,请在问题跟踪器中创建相应问题。
- 修复了关闭模拟器会停用界面但实际并未关闭模拟器的问题。
- 修复了涉及偶发崩溃的问题,包括由于打开过多的
/dev/urandom
实例导致的中止。 - 修复了导致模拟器在 adb 首次被强制终止后无法启动的问题。
- 移除了 MIPS build。如果您仍需要使用 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 指令模拟器 bug (#93)。
废弃在 Windows 上运行的 32 位版本
由于使用率低和维护成本高,我们打算废弃在 Windows 上运行的 32 位版 Android 模拟器。在移除并终止使用该版本的 Android 模拟器之前,我们会推出相应的过渡计划。不过,我们一直在积极寻求针对这项未来更改的反馈或疑问。
如果您目前使用的是在 Windows 上运行的 32 位版 Android 模拟器,则如若有任何有助于我们在未来与您展开精诚合作的建议,都请通过问题跟踪器告知我们。
27.3.10(2018 年 8 月)
此更新修复了以下问题:
修复了 RAM 大小配置
一些用户报告模拟器运行缓慢。我们发现了一个可能的原因,即 AVD 的 config.ini
文件中的 AVD RAM 大小设置有误。
为了缓解此问题,模拟器将使用 API 级别 26 或更高级别的映像的最低 RAM 级别提高到了 Android Studio 的默认级别,即 1536 MB。如果您的 AVD 的 config.ini
文件并未以兆字节为单位列出 hw.ramSize
,请在问题跟踪器中创建问题。您可以在以下位置找到 config.ini
文件:
~/.android/avd/<avdname>.avd/config.ini
27.3.9(2018 年 7 月)
此更新做出了以下改进和 bug 修复:
完善了针对 Windows Hypervisor Platform 的错误消息
一些用户在诊断 Windows Hypervisor Platform (WHPX) 为什么在他们启动 WHPX 模拟器后无法初始化时遇到困难。为帮助您诊断这些问题,我们添加了一些信息更丰富的错误消息。您可以使用 -verbose
标志在命令行中运行模拟器以启用这些错误消息。
常规修复
- 修复了在相机应用中加载快照时出现的 OpenGL 错误。
27.3.8(2018 年 7 月)
此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些 bug。
快照
现在,您可以为指定的设备配置保存多个 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 现已在所有渠道中推出。
此更新修复了一些 bug 并改进了针对大量 RAM 的支持。此外,如果结合使用此 HAXM 更新和模拟器 27.3 及更高版本,快照则会根据需要将内容加载到 RAM 中,而不是在虚拟设备启动时加载整个快照。此更改应该会大大缩短加载快照所需的时间。
如需了解详情,请参阅配置虚拟机加速部分。
27.2.9(2018 年 5 月)
此更新加入了几项新功能、对现有功能做出了一些改进并修复了一些 bug。
屏幕录制
现在您可以在 Android 模拟器中录制视频和音频,并将录制内容保存到 WebM 或动画 GIF 文件中。
屏幕录制控件位于 Extended Controls 窗口的 Screen record 标签页中。
提示:您也可以按 Ctrl + Shift + R 键(在 Mac 上,按 Command + Shift + R 键)来打开屏幕录制控件。
如果要开始屏幕录制,请点击 Screen record 标签页中的 Start recording 按钮。如果要停止录制,请点击 Stop recording。
用于播放和保存录制视频的控件位于 Screen record 标签页底部。如果要保存视频,请从该标签页底部的菜单中选择 WebM 或 GIF,然后点击 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 管理器中,系统会在 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) 以来的一些 bug。
- 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
变体。修复了各种其他 bug。
26.1.4(2017 年 8 月)
这是一个次要版本,修复了一些 bug 并对 GPU 配置做出了以下改进:
- 在 ANGLE 渲染程序上运行时,启用启动动画
- 在 ANGLE 渲染程序上运行时,停用 GLES3
26.1.3(2017 年 8 月)
这是一个次要版本,修复了一些 bug、提升了性能并做出了一些小的功能变更。
- 此版本现在需要使用最新的 Android 8.0 系统映像。它们符合 Treble 标准,且具有独立的
vendor.img
分区。 - 现在可使用新的 HAXM 6.2.0(请查看 SDK 管理器)并加入了以下更新:
- 提高了内存使用效率。由 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”bug,无法使用 API 级别 25 的映像。这似乎是在某些 Intel HD 4xxx 型号中出现的驱动程序问题。因此,系统会为他们自动改用 ANGLE。
- 如需获得最理想的 GPU 模拟效果,建议使用独立的 NVIDIA GPU 或 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 的兼容性。在您遇到这方面的具体问题时,请提交 bug 报告并将
HVF = off
附加到~/.android/advancedFeatures.ini
中(如果此文件不存在,请创建一个)。 - 修复了在使用 Hypervisor.framework 时无法连接互联网/不能附加调试程序的问题。
- 为了改进与“使用摄像头拍摄”功能的兼容性并提升其性能,基于 QTKit 的“使用摄像头拍摄”功能已被替换为基于 AVFoundation 进行缓冲的“使用摄像头拍摄”功能。
- 添加了对某些系统映像(目前仅限 API 级别 25)中的 WLAN 的支持。可使用名为“AndroidWifi”的接入点,Android 也会自动与之连接。您可以使用命令行参数
-feature -Wifi
运行模拟器,以停用 Wi-Fi 支持。 - 有些用户担心固定大小的 Play 商店系统映像会出现存储空间不足的问题。因此,在默认情况下,我们将大小增加到了 2 GB(在 800 MB 的基础上)。
- 添加了可直接从设置页面打开 bug 报告界面页面的键盘快捷键 (Ctrl+Shift+U)。
- 修复了以下问题:如果使用的老款 CPU 采用了 Intel x86 EPT 但未使用 UG 的话,那么在配置多个核心的情况下,模拟器将无法启动。
- 修复了模拟器本身就在 Xen Hypervisor 中运行时出现 HyperV 检测不当的问题。
- 修复了在某些 Linux 配置下启动模拟器时发生崩溃的问题。
26.1.2(2017 年 7 月)
此版本加入了一些新功能并提升了性能。
添加了在“Extended controls”窗口中定义自定义 HTTP 代理配置的功能(依次点击 More 图标 、Settings 和 Proxy)。默认情况下,模拟器使用 Android Studio HTTP 代理设置,不过您可以在此屏幕中指定手动代理配置。
添加了对客户机模式 GPU 的 VNC 支持,因此可以远程查看和控制模拟器。例如,您可以启动模拟器,然后让 VNC 监听端口 5901,如下所示:
- 执行:
emulator -gpu guest -avd avd_name -no-window -qemu -vnc :1
打开 VNC 查看器(例如 TightVNC 查看器),以连接到端口 5901。
如需使用 Mac 的内置屏幕共享客户端,则在启动模拟器时需要输入 VNC 密码。如需设置密码,请使用以下命令:
emulator -gpu guest -avd avd_name -no-window -qemu -vnc :1,password -monitor stdio
然后,在控制台中输入
change vnc password
,并输入密码。
Android O 目前不支持 VNC 模式。
- 执行:
在“Extended controls”窗口的“Help”屏幕中添加了 File a bug 按钮(依次点击 More 图标 、Help 和 Emulator help)。点击 File a bug 会打开一个对话框,您可以在其中查看 bug 报告详情(例如屏幕截图、AVD 配置信息和 bug 报告日志)。然后,您可以自己保存报告或报告模拟器问题。
在模拟器和虚拟传感器面板中添加了陀螺仪传感器。该传感器需要使用含有陀螺仪支持的系统映像才能运行(目前为 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 ES 3 时遇到问题,请在
模拟器现在会对除最终显示图片发布之外的所有渲染使用离屏 OpenGL FBO,这将有助于解决跨平台的颜色一致性问题。
在收集突发模拟器放慢问题的数据后,我们发现该问题可能与旧版 Intel OpenGL 驱动程序和 Windows 更新之间的某些互动有关。因此,如果用户使用的是 Intel HD 4000、Intel HD 3000、Intel HD 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 服务更新的按钮。
- 添加了一个可在模拟器“Settings”页面上选择 OpenGL 渲染程序的下拉菜单。如果您在 Windows 计算机上遇到 OpenGL 驱动程序方面的问题,请尝试使用 ANGLE (D3D11) 或 ANGLE (D3D9) 选项(需要重启)。如果您在非 Windows 计算机上遇到 OpenGL 驱动程序方面的问题,请尝试使用 Swiftshader 软件渲染程序(需要重启)。
- 修复了以下问题:在极少数情况下,模拟器在同时收到
exit
和minimize
命令后退出时会崩溃。 - 修复了在 Mac 计算机上改变显示内容时出现的缩放问题。(问题 268296)
- 修复了以下问题:从睡眠状态唤醒主机或当模拟器已经运行很长一段时间后,模拟器会占用 300% 的 CPU 并且会一直保持这么高的耗用率。
- 修复了模拟器在关闭时发生崩溃的问题。
HAXM v6.1.1 更新(2017 年 3 月)
注意:自 3 月 30 日起,HAXM v6.1.1 将通过 SDK 管理器面向 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 工具修订版 26.0.0 或更高版本。
新功能和 bug 修复
- 与 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 工具分开发布。此版本包含各种性能改进、新功能和 bug 修复。
次要修订版 25.3.1(2017 年 3 月)
- 修复了默认停用 GLAsyncSwap 会导致在某些 GPU 配置上发生崩溃的问题。在 25.3.0 版本中添加了此功能,以改善游戏和视频的帧时间和每秒帧数,但会导致模拟器在某些未知的计算机配置上无法运行。您可以通过打开
android_sdk/emulator/lib/advancedFeatures.ini
文件并设置GLAsyncSwap = on
手动启用它。
依赖项
- Android SDK Platform-Tools 修订版 24 或更高版本。
- Android SDK 工具修订版 25.3.0。
新功能和 bug 修复
- 将模拟引擎更新到了 QEMU 2.7,包括所有近期的 bug 修复、提升的性能和新功能。
- 新增了 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,其中包含一些 bug 修复和性能提升。
- 由于界面初始化不再尝试将所有模拟器可执行文件作为 Qt 插件进行加载,因此初始化时间显著缩短,尤其是在 HDD 上。
- 界面互动现在变得更加快速和顺畅,包括旋转、调整窗口大小和加载/关闭“Extended controls”窗口。