Android Emulator — Android Studio的一个组件,可在开发者的计算机上运行完整的Android设备虚拟副本。模拟器使用QEMU将ARM指令转换为主机的x86_64架构。 Google文档描述了AVD虚拟设备和硬件加速的完整设置周期。
要点
Android Emulator — 一个基于QEMU(Quick EMUlator)运行的虚拟Android设备,模拟Android硬件平台。与iOS Simulator不同,Android Emulator完全转换ARM指令,允许在x86_64主机上运行为移动架构编译的代码。
Google于2007年随第一版Android SDK一起发布了Android Emulator。从那时起,模拟器从一个缓慢的仅ARM解决方案演变为一个支持GPU、硬件加速和传感器模拟的高性能系统。根据Google(Android Developer Blog,2025),带有HAxM的现代模拟器比第一代快4-5倍。
模拟器支持Android设备的所有组件:CPU、GPU、RAM、存储、触摸屏、加速度计、陀螺仪、GPS、摄像头、电池、NFC、蓝牙和Wi-Fi。开发人员可以通过Extended Controls模拟来电、短信、不同级别的网络信号和地理位置。
Android Emulator使用通过SDK Manager下载的系统镜像(System Images)。每个系统镜像包含所选API级别和目标处理器架构的Android固件完整副本。提供不同架构的镜像:x86_64(建议与HAxM一起使用)、ARM64(用于测试ARM兼容性)和Google APIs(预装Google Play Services)。Wear OS、Android TV和Automotive也有单独的镜像。
// 在代码中检测模拟器类型
val isEmulator = Build.FINGERPRINT
.contains("generic") ||
Build.PRODUCT.contains("sdk")
if (isEmulator) {
Timber.d("应用程序在模拟器中运行")
}AVD(Android Virtual Device) — 模拟器的虚拟设备配置。Android Studio中的AVD Manager允许创建具有任意特性组合的设备:型号、屏幕尺寸、像素密度、RAM容量、存储大小和Android版本。
| AVD参数 | 开发建议 | 测试建议 |
|---|---|---|
| 架构 | x86_64(使用HAxM) | ARM64(纯模拟) |
| RAM | 2048-4096 MB | 1536-2048 MB |
| 内部存储 | 8-16 GB | 4-8 GB |
| API级别 | 最新稳定版 | 最低支持版本 |
| Google Play Services | 启用 | 按需 |
创建AVD通过Android Studio中的Device Manager完成:选择硬件配置文件(Pixel、Nexus、Galaxy等)、系统镜像并配置参数。创建后,设备将出现在Run Configurations列表中,用于直接运行应用程序。
模拟器支持Quick Boot — 将AVD状态保存为快照,并在下次启动时恢复。加载时间从30-60秒减少到2-5秒。要重置为干净状态,请在AVD Manager中使用Cold Boot Now。
ARM转换 — Android Emulator的关键技术,可即时将ARM指令转换为x86_64。如果没有转换,模拟器只能运行x86_64镜像,这限制了测试。Google使用libhoudini进行ARM→x86转换,并使用Intel库进行HAXM加速。
# 在Windows上检查HAxM状态
sc query "IntelHaxm"
# 通过SDK Manager安装HAxM
sdkmanager "extras;intel;Hardware_Accelerated_Execution_Manager"
# 使用硬件加速启动模拟器
emulator -avd Pixel_9_API_35 -accel on -gpu autoIntel HAxM(Hardware Accelerated Execution Manager) — 适用于Intel VT-x处理器的虚拟化驱动程序,可将模拟器加速3-5倍。在配备AMD处理器的Windows上,请使用Windows Hyper-V Platform和WHPX。没有硬件加速,模拟器运行缓慢,动画延迟可达1-2秒。
对于Apple Silicon(M系列)上的macOS,硬件加速通过Hypervisor.framework原生运行。根据Google(Android Emulator Release Notes 2025),M2 Max上的模拟器在基本操作上可达到真实设备性能的95%。
在模拟器和真实设备之间的选择取决于开发阶段。在模拟器上开发和调试很方便:快速启动、即时部署、用于传感器模拟的Extended Controls。在真实设备上 — 性能、电池和硬件工作的最终测试。
| 场景 | 模拟器 | 真实设备 |
|---|---|---|
| UI开发 | 是(快速) | 否(部署缓慢) |
| 性能测试 | 否(指标偏高) | 是(真实测量) |
| 传感器模拟(GPS、NFC) | 是(Extended Controls) | 有限 |
| 能耗 | 不支持 | 是(Battery Historian) |
| 网络测试(2G/3G/4G/5G) | 是(速度模拟) | 是(使用SIM卡) |
| CI/CD自动化 | 是(无需物理设备) | 困难(设备农场) |
带有硬件加速的模拟器的性能通常高于真实的低端设备。因此,请在具有目标性能水平的真实设备上进行最终测试。
在Kotlin中确定运行环境对于禁用错误代码或添加调试信息非常有用。Android提供Build.FINGERPRINT、Build.PRODUCT和Build.HARDWARE用于此目的。
object EmulatorDetector {
val isEmulator: Boolean
get() = Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.contains("emulator")
|| Build.HARDWARE == "ranchu"
|| Build.HARDWARE == "goldfish"
fun logEnvironment() {
if (isEmulator) {
Log.d("EmulatorDetector", "环境:模拟器")
}
}
}使用模拟器检测器有助于调试:在模拟器上可以启用扩展日志、禁用动画或将真实的API调用替换为模拟调用。除非应用程序的业务逻辑要求,否则避免在生产构建中进行检测。
Android Emulator用于CI服务器上的自动化测试。要运行测试,需要创建AVD、启动模拟器并等待系统完全加载。Gradle Managed Devices简化了这一过程:AVD配置在build.gradle.kts中描述。
// build.gradle.kts — Gradle Managed Devices
android {
testOptions {
managedDevices {
devices {
register<ManagedVirtualDevice>("pixel9Api35") {
device = "Pixel 9"
apiLevel = 35
systemImageSource = "google"
}
}
}
}
}要手动启动模拟器,请使用命令行:emulator -avd Pixel_9_API_35 -no-window -no-audio -gpu swiftshader_indirect。-no-window标志禁用服务器环境的图形界面,-gpu swiftshader_indirect提供无主机GPU的软件渲染。
Android Emulator中的Extended Controls提供了强大的工具来模拟网络条件:延迟(latency)、带宽(bandwidth)和网络类型(GPRS、EDGE、3G、4G、5G)。这允许测试应用程序在慢速连接下的行为,而无需物理前往信号覆盖较差的区域。
传感器模拟包括通过虚拟3D设备模型的加速度计、陀螺仪和磁力计。对于GPS,可以加载带有路线的GPX文件 — 模拟器模拟沿坐标的移动,这对于测试导航应用程序至关重要。摄像头通过主机网络摄像头或加载图像进行模拟。
Multi-display在Android Emulator中支持平板电脑和可折叠设备的多个屏幕。Extended Controls允许在不重启模拟器的情况下更改方向、屏幕尺寸和像素密度(DPI)。对于可折叠设备的测试,提供Foldable模式,可在折叠和展开状态之间切换。
模拟器不仅支持智能手机,还支持Wear OS和Android TV。对于Wear OS,提供圆形和矩形AVD配置、表圈旋转和滑动手势模拟,以及测试与手机模拟器的交互。对于Android TV,使用带有D-pad导航的界面。两个平台都支持硬件加速和Google Play Services测试,这对于智能手表和电视应用的开发周期非常重要。
常见问题
Android Emulator通过QEMU使用完整的ARM模拟并进行指令转换,而iOS Simulator则为主机架构编译代码。Android Emulator支持GPU、摄像头、传感器、蓝牙、NFC — iOS Simulator不支持大多数这些功能。
在Kotlin中检查Build.FINGERPRINT是否包含"generic"或"emulator",以及Build.HARDWARE是否为"ranchu"或"goldfish"。使用Build.PRODUCT作为附加标记 — 对于模拟器,它包含"sdk_google"或"google_sdk"。
启用Intel HAxM(Intel VT-x)或适用于AMD处理器的Windows Hyper-V Platform(WHPX)。使用带有硬件加速的x86_64系统镜像。在AVD Manager中为模拟器分配至少4 GB RAM。启用Quick Boot进行快照加载。
是的,Android Emulator从Android 10(API 29)开始支持NFC模拟。Extended Controls → Phone → NFC允许发送NDEF消息。支持读/写标签、点对点和HCE模式。如需完整测试,请使用带有NFC芯片的真实设备。
日常开发选择带有Google APIs的x86_64 — 最大性能和完整服务集。兼容性测试使用ARM64镜像。CI — 不带Google Play Services的镜像,它们更小且加载更快。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。