Android Emulator — 什么是模拟器以及模拟如何工作

作者: IT Sectr 发布日期: 2026-02-09 阅读时间: 8 分钟

Android Emulator — Android Studio的一个组件,可在开发者的计算机上运行完整的Android设备虚拟副本。模拟器使用QEMU将ARM指令转换为主机的x86_64架构。 Google文档描述了AVD虚拟设备和硬件加速的完整设置周期。

要点

  • Android Emulator — 基于QEMU的完整模拟,支持ARM转换、GPU、传感器和NFC
  • AVD Manager — 通过选择API级别、架构和硬件特性来创建和配置虚拟设备的工具
  • HAxM和Hyper-V — 硬件加速可将模拟器性能提升3-5倍
  • 代码检测 — Build.FINGERPRINT和Build.PRODUCT允许在Kotlin中检测是否在模拟器中运行
  • 传感器模拟 — 模拟器支持加速度计、陀螺仪、NFC、GPS和摄像头

什么是Android Emulator?

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也有单独的镜像。

kotlin
// 在代码中检测模拟器类型
val isEmulator = Build.FINGERPRINT
    .contains("generic") ||
    Build.PRODUCT.contains("sdk")

if (isEmulator) {
    Timber.d("应用程序在模拟器中运行")
}

在Android Studio中配置AVD

AVD(Android Virtual Device) — 模拟器的虚拟设备配置。Android Studio中的AVD Manager允许创建具有任意特性组合的设备:型号、屏幕尺寸、像素密度、RAM容量、存储大小和Android版本。

AVD参数开发建议测试建议
架构x86_64(使用HAxM)ARM64(纯模拟)
RAM2048-4096 MB1536-2048 MB
内部存储8-16 GB4-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转换和硬件加速

ARM转换 — Android Emulator的关键技术,可即时将ARM指令转换为x86_64。如果没有转换,模拟器只能运行x86_64镜像,这限制了测试。Google使用libhoudini进行ARM→x86转换,并使用Intel库进行HAXM加速。

bash
# 在Windows上检查HAxM状态
sc query "IntelHaxm"

# 通过SDK Manager安装HAxM
sdkmanager "extras;intel;Hardware_Accelerated_Execution_Manager"

# 使用硬件加速启动模拟器
emulator -avd Pixel_9_API_35 -accel on -gpu auto

Intel HAxM(Hardware Accelerated Execution Manager) — 适用于Intel VT-x处理器的虚拟化驱动程序,可将模拟器加速3-5倍。在配备AMD处理器的Windows上,请使用Windows Hyper-V PlatformWHPX。没有硬件加速,模拟器运行缓慢,动画延迟可达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代码中检测模拟器

Kotlin中确定运行环境对于禁用错误代码或添加调试信息非常有用。Android提供Build.FINGERPRINTBuild.PRODUCTBuild.HARDWARE用于此目的。

kotlin
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中描述。

kotlin
// 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的Android Emulator

模拟器不仅支持智能手机,还支持Wear OSAndroid TV。对于Wear OS,提供圆形和矩形AVD配置、表圈旋转和滑动手势模拟,以及测试与手机模拟器的交互。对于Android TV,使用带有D-pad导航的界面。两个平台都支持硬件加速和Google Play Services测试,这对于智能手表和电视应用的开发周期非常重要。

常见问题

Android Emulator与iOS Simulator有何不同?

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"。

如何加速Android Emulator?

启用Intel HAxM(Intel VT-x)或适用于AMD处理器的Windows Hyper-V Platform(WHPX)。使用带有硬件加速的x86_64系统镜像。在AVD Manager中为模拟器分配至少4 GB RAM。启用Quick Boot进行快照加载。

能否在Android Emulator中测试NFC?

是的,Android Emulator从Android 10(API 29)开始支持NFC模拟。Extended Controls → Phone → NFC允许发送NDEF消息。支持读/写标签、点对点和HCE模式。如需完整测试,请使用带有NFC芯片的真实设备。

AVD应该选择哪些系统镜像?

日常开发选择带有Google APIs的x86_64 — 最大性能和完整服务集。兼容性测试使用ARM64镜像。CI — 不带Google Play Services的镜像,它们更小且加载更快。

总结

  • Android Emulator — 基于QEMU的Android设备完整模拟,支持ARM转换、GPU、传感器和NFC
  • AVD Manager — 通过选择架构、API级别、RAM和硬件特性来配置虚拟设备
  • 硬件加速 — HAxM、Hyper-V和WHPX可将模拟器性能提升3-5倍
  • 环境检测 — Build.FINGERPRINT、Build.PRODUCT和Build.HARDWARE用于检测是否在模拟器中运行
  • Extended Controls — 模拟GPS、NFC、传感器、来电和SMS以测试场景
  • CI自动化 — Gradle Managed Devices和x86_64镜像用于在CI上进行高效测试
  • Quick Boot — 快照模式将模拟器加载时间减少到2-5秒

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读