从命令行启动模拟器

Android SDK 包含一个 Android 设备模拟器——一个在您的计算机上运行的虚拟设备。Android 模拟器允许您在不使用物理设备的情况下开发和测试 Android 应用。

此页面描述了您可以与 Android 模拟器一起使用的命令行功能。有关使用 Android 模拟器 UI 的信息,请参阅 在 Android 模拟器上运行应用

启动模拟器

使用 emulator 命令启动模拟器,作为 运行您的项目通过 AVD 管理器启动它 的替代方法。

以下是从终端提示符启动虚拟设备的基本命令行语法:

emulator -avd avd_name [ {-option [value]} … ]

或者

emulator @avd_name [ {-option [value]} … ]

例如,如果您在运行于 Mac 上的 Android Studio 中启动模拟器,则默认命令行将类似于以下内容:

/Users/janedoe/Library/Android/sdk/emulator/emulator -avd Pixel8_API_34 -netdelay none -netspeed full -qt-hide-window -grpc-use-token -idle-grpc-timeout

请注意,参数 -qt-hide-window -grpc-use-token -idle-grpc-timeout 仅用于在 Android Studio 中运行模拟器窗口。如果您想在自己的窗口中运行模拟器,则不应使用这些额外参数。

您可以在启动模拟器时指定启动选项,但在启动后则不能。

要查看 AVD 名称列表,请输入以下命令:

emulator -list-avds

使用此选项可以显示 Android 主目录中的 AVD 名称列表。您可以通过设置 ANDROID_SDK_HOME 环境变量来覆盖默认主目录,该变量指定存储所有配置和 AVD 内容的用户特定目录的根目录。

您可以在启动虚拟设备之前在终端窗口中设置环境变量,或者通过操作系统的用户设置进行设置。例如,在 Linux 系统的 .bashrc 文件中。

要停止 Android 模拟器,请关闭模拟器窗口。

安装应用

除了通过 Android Studio 或 模拟器 UI 安装应用外,您还可以使用 adb 实用程序在虚拟设备上安装您的应用。

要使用 adb 安装、运行和测试您的应用,请遵循以下一般步骤:

  1. 按照 构建和运行您的应用 中的说明,将您的应用构建并打包成 APK。
  2. 如上一节所述,使用命令行启动模拟器,并使用任何必要的启动选项。
  3. 使用 adb 安装您的应用。
  4. 在模拟器上运行和测试您的应用。
    模拟器运行期间,您可以使用 模拟器控制台 根据需要发出命令。

要卸载应用,请像在 Android 设备上一样操作。

虚拟设备在用户数据磁盘分区 (userdata-qemu.img) 中保留应用及其状态数据以应对重启。要清除此数据,请使用 -wipe-data 选项启动模拟器或在 AVD 管理器中清除数据。有关用户数据分区和其他存储的更多信息,请参阅下一节。

注意:adb 实用程序将虚拟设备视为实际的物理设备。因此,您可能必须对某些常见的 adb 命令(例如 install)使用 -d 标志。-d 标志允许您指定要使用哪个连接设备作为命令的目标。如果您不指定 -d,则模拟器将以其列表中的第一个设备为目标。

了解默认目录和文件

模拟器使用关联文件,其中 AVD 系统和数据目录最为重要。在指定命令行选项时,了解模拟器目录结构和文件很有帮助,尽管您通常不需要修改默认目录或文件。

Android 模拟器使用 (QEMU) 虚拟机管理程序。

AVD 系统目录

系统目录包含模拟器用于模拟操作系统的 Android 系统映像。此目录包含所有相同类型的 AVD(包括 API 级别、CPU 架构和 Android 变体)共享的特定于平台的只读文件。默认位置如下:

  • macOS 和 Linux - ~/Library/Android/sdk/system-images/android-apiLevel/variant/arch/
  • Windows - C:\Users\user\Library\Android\sdk\system-images\android-apiLevel\variant\arch\

其中:

  • apiLevel 是数字 API 级别或预览版本的字母。例如,android-V 表示 Android VanillaIceCream 预览版。发布后,它成为 API 级别 35,由 android-35 指定。
  • variant 是与系统映像实现的特定功能相对应的名称。例如,google_apisandroid-wear
  • arch 是目标 CPU 架构。例如,x86

使用 -sysdir 选项可以为 AVD 指定不同的系统目录。

模拟器从系统目录读取以下文件:

表 1. Android 模拟器读取的系统目录文件

文件 描述 指定不同文件的选项
kernel-qemukernel-ranchu AVD 的二进制内核映像。kernel-ranchu 基于 QEMU 模拟器。 -kernel
ramdisk.img 引导分区映像。这是在系统映像挂载之前,内核最初加载的 system.img 的一个子集。它通常只包含少量二进制文件和初始化脚本。 -ramdisk
system.img 系统映像的只读初始版本。具体来说,包含与 API 级别和变体相对应的系统库和数据的分区。 -system
userdata.img 数据分区的初始版本,在模拟系统中显示为 data/,并包含 AVD 的所有可写数据。当您创建新的 AVD 或使用 ‑wipe-data 选项时,模拟器使用此文件。有关详细信息,请参阅下一节中的 userdata-qemu.img 文件说明。 -initdata
-init-data

AVD 数据目录

AVD 数据目录(也称为内容目录)特定于单个 AVD 实例,并包含 AVD 的所有可修改数据。

默认位置如下,其中 name 是 AVD 名称:

  • macOS 和 Linux - ~/.android/avd/name.avd/
  • Windows 10 及更高版本 - C:\Users\user\.android\name.avd\

使用 -datadir 选项可以指定不同的 AVD 数据目录。

下表列出了此目录中最重要的文件:

表 2. AVD 数据目录中的重要文件

文件 描述 指定不同文件的选项
userdata-qemu.img

数据分区的內容,在模拟系统中显示为 data/。当您创建新的 AVD 或使用 -wipe-data 选项将 AVD 重置为出厂默认值时,模拟器会复制系统目录中的 userdata.img 文件来创建此文件。

每个虚拟设备实例都使用可写的用户数据映像来存储用户和特定于会话的数据。例如,它使用该映像来存储唯一用户的已安装应用数据、设置、数据库和文件。每个用户都有一个不同的 ANDROID_SDK_HOME 目录,用于存储该用户创建的 AVD 的数据目录。每个 AVD 都有一个 userdata-qemu.img 文件。

-data
cache.img 缓存分区映像,在模拟系统中显示为 cache/。当您第一次创建 AVD 或使用 -wipe-data 选项时,它为空。它存储临时下载文件,并由下载管理器和有时由系统填充。例如,浏览器使用它在模拟器运行时缓存下载的网页和图像。当您关闭虚拟设备时,文件将被删除。您可以使用 -cache 选项来持久化该文件。 -cache
sdcard.img

(可选) SD 卡分区映像,允许您在虚拟设备上模拟 SD 卡。您可以在 AVD 管理器 中或使用 mksdcard 工具创建 SD 卡映像文件。该文件存储在您的开发计算机上,必须在启动时加载。

在 AVD 管理器中定义 AVD 时,您可以选择使用自动管理的 SD 卡文件或使用 mksdcard 工具创建的文件。您可以在 AVD 管理器中查看与 AVD 关联的 sdcard.img 文件。-sdcard 选项会覆盖 AVD 中指定的 SD 卡文件。请注意,此 SD 卡选项在使用 Apple Silicon 的 Mac 上不起作用。

在虚拟设备运行时,您可以使用模拟器 UI 或 adb 实用程序浏览、向模拟 SD 卡发送文件以及从模拟 SD 卡复制和删除文件。您无法从正在运行的虚拟设备中删除模拟 SD 卡。

要加载之前将文件复制到 SD 卡文件,请将映像文件安装为循环设备,然后复制文件。或者,使用实用程序(例如 mtools 包)将文件直接复制到映像。

模拟器将文件视为字节池,因此 SD 卡格式无关紧要。

`-wipe-data` 选项不影响此文件。如果要清除文件,请删除该文件,然后使用 AVD 管理器或 `mksdcard` 工具重新创建它。更改文件大小也会删除文件并创建一个新文件。

-sdcard

列出模拟器使用的目录和文件

您可以通过两种方式查找文件位置

  • 从命令行启动模拟器时,使用 `-verbose` 或 `-debug init` 选项。查看输出结果。
  • 使用 `emulator` `-help-option` 命令列出默认目录。例如
    emulator -help-datadir
    Use '-datadir <dir>' to specify a directory where writable image files will be searched. On this system, the default directory is: /Users/me/.android See '-help-disk-images' for more information about disk image files.

命令行启动选项

本节列出启动模拟器时可在命令行中提供的选项。

注意:Android 模拟器正在持续开发中,以提高其可靠性。有关针对各种命令行选项报告的问题的状态以及如何报告错误,请参阅Android Issue Tracker

常用选项

下表列出您可能更经常使用的命令行启动选项

表 3. 常用命令行选项

命令行选项 描述
快速启动
-no-snapshot-load 执行冷启动并在退出时保存模拟器状态。
-no-snapshot-save 如果可能,执行快速启动,但在退出时不保存模拟器状态。
-no-snapshot 完全禁用快速启动功能,并且不加载或保存模拟器状态。
设备硬件
-camera-back mode
-camera-front mode
设置背向或前向摄像头的模拟模式。这将覆盖 AVD 中的任何摄像头设置。

`mode` 可以是以下任何值

  • `emulated` - 模拟器在软件中模拟摄像头。
  • `webcamn` - 模拟器使用连接到开发计算机的网络摄像头,由数字指定。要获取网络摄像头的列表,请使用 `-webcam-list` 选项。例如,`webcam0`。
  • `none` - 禁用虚拟设备中的摄像头。

例如

emulator @Pixel8_API_34 -camera-back webcam0
-webcam-list 列出开发计算机上可用于模拟的网络摄像头。例如
emulator @Pixel8_API_34 -webcam-list
        List of web cameras connected to the computer:
        Camera 'webcam0' is connected to device 'webcam0'
        on channel 0 using pixel format 'UYVY'

在此示例中,第一个 `webcam0` 是您在命令行中使用的名称。第二个 `webcam0` 是开发计算机操作系统使用的名称。第二个名称因操作系统而异。

从 SDK 工具 25.2.4 开始,需要 AVD 名称。

磁盘映像和内存
-memory size

指定物理 RAM 大小,范围为 1536 到 8192 MB。例如

emulator @Pixel8_API_34 -memory 2048

此值将覆盖 AVD 设置。

-sdcard filepath 指定 SD 卡分区映像文件的名称和路径。例如

emulator @Pixel8_API_34 -sdcard C:/sd/sdcard.img

如果找不到该文件,模拟器仍会启动,但没有 SD 卡。命令将返回 **无 SD 卡映像** 警告。

如果不指定此选项,除非 AVD 指定其他内容,否则默认值为数据目录中的 `sdcard.img`。有关模拟 SD 卡的详细信息,请参阅AVD 数据目录

-wipe-data 删除用户数据并从初始数据文件复制数据。此选项将清除虚拟设备的数据,并将其恢复到首次定义时的状态。所有已安装的应用和设置都将被删除。例如

emulator @Pixel8_API_34 -wipe-data

默认情况下,用户数据文件为 `userdata-qemu.img`,初始数据文件为 `userdata.img`。这两个文件都位于数据目录中。`-wipe-data` 选项不影响 `sdcard.img` 文件。有关用户数据的更多信息,请参阅名为了解默认目录和文件的部分。

调试
-debug tags 启用或禁用一个或多个标签的调试消息显示。用空格、逗号或冒号分隔多个标签。例如

$ emulator @Pixel8_API_34 -debug init,metrics

要禁用标签,请在其前面放置一个短横线 (-)。例如,以下选项显示所有调试消息,但与网络套接字和指标相关的消息除外

-debug all,-socket,-metrics

要获取标签和说明的列表,请使用 `-help-debug-tags` 选项。例如

emulator -help-debug-tags

您可以在ANDROID_VERBOSE环境变量中定义默认调试标签。在逗号分隔的列表中定义要使用的标签。以下示例显示如何指定 `socket` 和 `gles` 标签

ANDROID_VERBOSE=socket,gles

它等效于使用

-debug-socket -debug-gles

-debug socket,gles

-debug-tag
-debug-no-tag
启用特定的调试消息类型。使用 `no` 形式禁用调试消息类型。例如

emulator @Pixel8_API_34 -debug-all -debug-no-metrics

要获取标签列表,请使用 `emulator -help-debug-tags` 命令。

-logcat logtags 启用一个或多个标签的 Logcat 消息显示,并将它们写入终端窗口。例如,以下命令启用所有组件的错误消息

emulator @Pixel8_API_34 -logcat *:e

`logtags` 使用与 `adb logcat logtags` 命令相同的格式。输入 `adb logcat -help` 以获取更多信息。它是一个空格或逗号分隔的日志筛选器列表,格式为 `componentName:logLevel`。`componentName` 可以是通配符星号 (*) 或组件名称,例如 `ActivityManager`、`SystemServer`、`InputManager` 或 `WindowManager`。

`logLevel` 是以下值之一

  • `v` - 详细
  • `d` - 调试
  • `i` - 信息
  • `w` - 警告日志级别
  • `e` - 错误
  • `s` - 静默

以下示例以信息日志级别显示 GSM 组件消息

emulator @Pixel8_API_34 -logcat '*:s GSM:i'

如果在命令行上不提供 `-logcat` 选项,则模拟器会查找ANDROID_LOG_TAGS环境变量。如果 `ANDROID_LOG_TAGS` 使用有效的 `logtags` 值定义并且不为空,则模拟器会默认使用其值将 Logcat 输出启用到终端。您也可以通过 `adb` 将相同或其他日志消息重定向到终端。

有关 Logcat 和 `adb` 的更多信息,请参阅Logcat 命令行工具使用 Logcat 查看和写入日志Log 类和发出 adb 命令

-show-kernel 在终端窗口中显示内核调试消息。例如

emulator @Pixel8_API_34 -show-kernel

此选项的一种用途是检查引导过程是否正常运行。

-verbose 将模拟器初始化消息打印到终端窗口。例如

emulator @Pixel8_API_34 -verbose

它显示在启动 AVD 中定义的虚拟设备时实际选择的哪些文件和设置。此选项与指定 `-debug-init` 相同。

网络
-dns-server servers 使用指定的 DNS 服务器。`servers` 最多包含四个 DNS 服务器名称或 IP 地址的逗号分隔列表。例如
emulator @Pixel8_API_34 -dns-server 192.0.2.0,
192.0.2.255

默认情况下,模拟器会尝试检测您正在使用的 DNS 服务器,并在模拟防火墙网络中设置特殊别名,以允许 Android 系统直接连接到服务器。使用 `-dns-server` 选项指定不同的 DNS 服务器列表。

-http-proxy proxy 通过指定的 HTTP/HTTPS 代理进行所有 TCP 连接。如果您的模拟器必须通过代理服务器访问互联网,您可以使用此选项或 `http_proxy` 环境变量来设置相应的重定向。例如

emulator @Pixel8_API_34 -http-proxy myserver:1981

`proxy` 可以是以下之一

http://server:port
http://username:password@server:port

可以省略 `http://` 前缀。

如果不提供此选项,模拟器会查找 `http_proxy` 环境变量,并自动使用任何与 `proxy` 格式匹配的值。有关更多信息,请参阅在使用代理的情况下使用模拟器

-netdelay delay

将网络延迟模拟设置为以下 `delay` 值之一(以毫秒为单位)

  • `gsm` - GSM/CSD(最小 150,最大 550)。
  • `hscsd` - HSCSD(最小 80,最大 400)。
  • `gprs` - GPRS(最小 35,最大 200)。
  • `edge` - EDGE/EGPRS(最小 80,最大 400)。
  • `umts` - UMTS/3G(最小 35,最大 200)。
  • `hsdpa` - HSDPA(最小 0,最大 0)。
  • `lte` - LTE(最小 0,最大 0)。
  • `evdo` - EVDO(最小 0,最大 0)。
  • `none` - 无延迟,默认值(最小 0,最大 0)。
  • `num` - 指定确切的延迟。
  • `min:max` - 指定各个最小和最大延迟。

例如

emulator @Pixel8_API_34 -netdelay gsm

模拟器支持网络限速以及更高的连接延迟。您可以通过皮肤配置或使用 `‑netspeed` 和 `-netdelay` 选项来定义它。

-netfast 禁用网络限速。例如

emulator @Pixel8_API_34 -netfast

此选项与指定 `-netspeed full -netdelay none` 相同。这些是这些选项的默认值。

-netspeed speed

设置网络速度模拟。使用以下 `speed` 值之一(以 kbps 为单位)指定最大网络上传和下载速度

  • `gsm` - GSM/CSD(上行:14.4,下行:14.4)。
  • hscsd - HSCSD (上行: 14.4,下行: 57.6)。
  • gprs - GPRS (上行: 28.8,下行: 57.6)。
  • edge - EDGE/EGPRS (上行: 473.6,下行: 473.6)。
  • umts - UMTS/3G (上行: 384.0,下行: 384.0)。
  • hsdpa - HSDPA (上行: 5760.0,下行: 13,980.0)。
  • lte - LTE (上行: 58,000,下行: 173,000)。
  • evdo - EVDO (上行: 75,000,下行: 280,000)。
  • full - 无限制,默认值 (上行: 0.0,下行: 0.0)。
  • num - 指定上行和下行速度。
  • up:down - 分别指定上行和下行速度。

例如

emulator @Pixel8_API_34 -netspeed edge

模拟器支持网络限速以及更高的连接延迟。您可以通过皮肤配置或使用 `‑netspeed` 和 `-netdelay` 选项来定义它。

-port port 设置用于控制台和adb的TCP端口号。例如

emulator @Pixel8_API_34 -port 5556

对于在您的机器上运行的第一个虚拟设备实例,默认值为5554。虚拟设备通常占用一对相邻的端口:一个控制台端口和一个adb端口。在特定机器上运行的第一个虚拟设备的控制台使用控制台端口5554和adb端口5555。后续实例使用的端口号递增二。例如,5556/5557、5558/5559,依此类推。范围是5554到5682,允许64个并发虚拟设备。

端口分配通常与指定-ports port,{port + 1}相同。{port + 1}必须可用,并为adb保留。如果任何控制台或adb端口已被使用,则模拟器将无法启动。

‑port选项报告虚拟设备正在使用的端口和序列号,并在您提供的数值存在问题时发出警告。在模拟器UI中,您可以在窗口标题中看到控制台端口号,并通过选择**帮助** > **关于**查看adb端口号。

请注意,如果port值不是偶数,并且在5554到5584范围内,则如果adb server在模拟器之后启动,则虚拟设备将启动,但在使用adb devices命令时不可见。因此,我们建议使用偶数控制台端口号。

-ports
console-port,adb-port
设置用于控制台和adb的TCP端口。例如

emulator @Pixel8_API_34 -ports 5556,5559

有效的端口范围是5554到5682,允许64个并发虚拟设备。-ports选项报告模拟器实例正在使用的端口和序列号,并在您提供的数值存在问题时发出警告。

我们建议尽可能使用-port选项。-ports选项适用于需要特殊设置的网络配置。

有关设置控制台和adb端口的更多信息,请参阅-port选项。

-tcpdump filepath 捕获网络数据包并将其存储到文件中。例如

emulator @Pixel8_API_34 -tcpdump /path/dumpfile.cap

使用此选项开始捕获通过模拟器的虚拟以太网LAN发送的所有网络数据包。之后,您可以使用Wireshark之类的工具分析流量。

请注意,此选项捕获所有以太网数据包,而不限于TCP连接。

系统
-accel mode 配置模拟器VM加速。例如

emulator @Pixel8_API_34 -accel auto

加速模拟仅适用于x86和x86_64系统映像。在Linux上,它依赖于KVM。在Windows和Mac上,它依赖于英特尔CPU和英特尔HAXM驱动程序。如果您没有模拟x86或x86_64设备,则会忽略此选项。

mode的有效值为

  • auto - 自动确定是否支持加速,并在可能的情况下使用它(默认值)。
  • off - 完全禁用加速,这主要用于调试。
  • on - 强制加速。如果未安装或无法使用KVM或HAXM,则模拟器将无法启动并打印错误消息。

有关更多信息,请参阅为Android模拟器配置硬件加速

-accel-check 检查是否安装了模拟器VM加速所需的虚拟机管理程序(HAXM或KVM)。例如

emulator -accel-check

有关更多信息,请参阅检查是否安装了虚拟机管理程序

-engine engine

指定模拟器引擎

  • auto - 自动选择引擎(默认值)。
  • classic - 使用旧的QEMU 1引擎(已弃用)。
  • qemu2 - 使用较新的QEMU 2引擎。

例如

emulator @Pixel8_API_34 -engine auto

自动检测应选择在模拟特定AVD时提供最佳性能的值。仅出于调试和比较目的使用-engine选项。

-gpu mode 选择GPU模拟模式。例如

emulator @Pixel8_API_34 -gpu swiftshader_indirect

有关更多信息,请参阅配置图形加速

-no-accel 在使用x86或x86_64系统映像时禁用模拟器VM加速。它仅用于调试,与指定-accel off相同。例如

emulator @Pixel8_API_34 -no-accel

有关更多信息,请参阅为Android模拟器配置硬件加速

-nojni
-no-jni
禁用Android Dalvik或ART运行时中的扩展Java Native Interface (JNI) 检查。例如

emulator @Pixel8_API_34 -nojni

启动虚拟设备时,默认情况下会启用扩展JNI检查。有关更多信息,请参阅JNI提示

-selinux {disabled|permissive} 在Linux操作系统上将安全增强型Linux (SELinux) 安全模块设置为disabledpermissive模式。例如

me-linux$ emulator @Pixel8_API_34 -selinux permissive

默认情况下,SELinux处于enforcing模式,这意味着安全策略正在强制执行。permissive模式加载SELinux策略但不强制执行它。此选项仅记录策略冲突。disabled模式禁用内核对SELinux的支持。

-timezone timezone

将虚拟设备的时区设置为timezone,而不是主机时区。例如

emulator @Pixel8_API_34 -timezone Europe/Paris

默认情况下,模拟器使用您的开发计算机的时区。使用此选项指定不同的时区,或者如果自动检测不起作用。 timezone值必须采用zoneinfo格式,即area/locationarea/subarea/location。例如

  • America/Los_Angeles
  • Europe/Paris
  • America/Argentina/Buenos_Aires

指定的时区必须位于zoneinfo数据库中。

-version 显示模拟器版本号。例如

emulator @Pixel8_API_34 -version

或者

emulator -version
UI
-no-boot-anim 在模拟器启动期间禁用启动动画,以加快启动速度。例如

emulator @Pixel8_API_34 -no-boot-anim

在较慢的计算机上,此选项可以显著加快启动速度。

-screen mode 设置模拟触摸屏模式。例如

emulator @Pixel8_API_34 -screen no-touch

`mode` 可以是以下任何值

  • touch - 模拟触摸屏(默认值)。
  • multi-touch - 模拟多点触摸屏。
  • no-touch - 禁用触摸和多点触摸屏模拟。

高级选项

下表中的命令行启动选项可用,但普通应用程序开发人员通常不使用。

在描述中,“工作目录”是指您在其中输入命令的终端中的当前目录。有关AVD系统目录和数据目录以及其中存储的文件的信息,请参阅有关默认目录和文件的部分。

其中一些选项适用于外部应用程序开发人员,而其中一些选项主要由平台开发人员使用。“应用程序开发人员”创建Android应用程序并在特定AVD上运行它们。“平台开发人员”在Android系统上工作,并在模拟器内运行它,而无需预先创建AVD。

表4. 高级命令行选项

高级选项 简要说明
-bootchart timeout

启用引导图表,超时时间以秒为单位。一些Android系统映像具有修改后的init系统,该系统集成了引导图表功能。您可以使用此选项将引导图表超时周期传递给系统。如果您的init系统未激活引导图表,则此选项无效。此选项主要对平台开发人员有用,而不是外部应用程序开发人员。

例如

emulator @Pixel8_API_34 -bootchart 120
-cache filepath

指定缓存分区映像文件。提供文件名和绝对路径或相对于数据目录的路径来设置持久性缓存文件。如果文件不存在,模拟器会将其创建为空文件。

例如

emulator @Pixel8_API_34 -cache
   ~/.android/avd/Pixel8_API_34.avd/cache_persistent.img

如果您不使用此选项,则默认为名为cache.img的临时文件。有关更多信息,请参阅AVD数据目录

-cache-size size

以MB为单位设置缓存分区大小。

例如

emulator @Pixel8_API_34 -cache-size 1000

如果您不指定此选项,则默认为66 MB。通常,大多数应用程序开发人员不需要此选项,除非他们需要下载大于默认缓存的非常大的文件。有关缓存文件的更多信息,请参阅AVD数据目录

-data filepath

设置用户数据分区映像文件。提供文件名和绝对路径或相对于工作目录的路径来设置持久性用户数据文件。如果文件不存在,模拟器将从默认的userdata.img文件创建映像,将其存储在您指定的文件名中,并在关机时将用户数据持久保存到其中。

例如

emulator @Pixel8_API_34 -data
   ~/.android/avd/Pixel8_API_34.avd/userdata-test.img

如果您不使用此选项,则默认为名为userdata-qemu.img的文件。有关用户数据文件的更多信息,请参阅AVD数据目录

-datadir dir

使用绝对路径指定数据目录。有关更多信息,请参阅AVD数据目录

例如

emulator @Pixel8_API_34 -datadir
   ~/.android/avd/Pixel8_API_34.avd/mytest
-force-32bit

在64位平台上使用32位模拟器。有时,此选项对于测试或调试很有用。例如,存在模拟器有时无法在64位Windows上运行,但32位可以运行的问题。此选项有助于执行比较以调试问题。这是一个示例

emulator @Pixel8_API_34 -force-32bit
-help-disk-images

获取有关磁盘映像的帮助。此选项提供与应用程序和平台开发人员相关的相关信息。例如

emulator -help-disk-images
-help-char-devices

获取有关字符device规范的帮助。一些模拟器选项需要device参数。例如

emulator -help-char-devices
-help-sdk-images

获取与应用程序开发人员相关的磁盘映像的帮助。此选项获取有关使用SDK工具创建的AVD的映像文件位置的信息。例如

emulator -help-sdk-images
-help-build-images

获取与平台开发者相关的磁盘镜像帮助信息。例如

emulator -help-build-images
-initdata filepath
-init-data filepath

指定数据分区的初始版本。擦除用户数据后,模拟器会将指定文件的内容复制到用户数据(默认情况下为userdata-qemu.img文件),而不是使用默认的userdata.img文件作为初始版本。指定文件名和绝对路径或相对于工作目录的路径。

例如

emulator @Pixel8_API_34 -initdata
   ~/Library/Android/sdk/system-images/android-34/
   google_apis/x86_64/userdata-test.img

如果未指定路径,则将文件放置在系统目录中。更多信息,请参阅AVD系统目录

-kernel filepath

使用特定的模拟内核。如果未指定路径,模拟器将在系统目录中查找。

使用‑show‑kernel选项查看内核调试消息。

例如

emulator @Pixel8_API_34 -kernel
   ~/Library/Android/sdk/system-images/android-34/
   google_apis/x86_64/kernel-test.img -show-kernel

如果未指定此选项,则默认为kernel-ranchu。更多信息,请参阅AVD系统目录

-noaudio
-no-audio

禁用此虚拟设备的音频支持。某些Linux和Windows计算机的音频驱动程序存在故障,会导致不同的症状,例如阻止模拟器启动。在这种情况下,可以使用此选项来解决问题。或者,您可以使用QEMU_AUDIO_DRV环境变量来更改音频后端。

例如

emulator @Pixel8_API_34 -noaudio
-nocache
-no-cache

启动模拟器时不使用缓存分区。如果不使用此选项,则默认为名为cache.img的临时文件。此选项仅供平台开发者使用。更多信息,请参阅AVD数据目录

例如

emulator @Pixel8_API_34 -nocache
-no-snapshot

禁止自动加载和保存操作,导致模拟器执行完整的启动序列,并在关闭时丢失其状态。它会覆盖-snapshot选项。

例如

emulator @Pixel8_API_34 -no-snapshot
-no-snapshot-load

阻止模拟器从快照存储加载AVD状态。执行完整启动。

例如

emulator @Pixel8_API_34 -no-snapshot-load
-no-snapshot-save

阻止模拟器在退出时将AVD状态保存到快照存储,这意味着所有更改都将丢失。

例如

emulator @Pixel8_API_34 -no-snapshot-save
-no-snapshot-update-time

在恢复快照时不会立即尝试校正AVD时钟时间。此选项在测试期间非常有用,因为它避免了突然的时间跳跃。时间更新大约每15秒发送一次到AVD。

例如

emulator @Pixel8_API_34 -no-snapshot-update-time
-no-snapstorage

启动模拟器时不挂载文件来存储或加载状态快照,强制执行完整启动并禁用状态快照功能。此选项会覆盖-snapstorage-snapshot选项。

例如

emulator @Pixel8_API_34 -no-snapstorage
-no-window

禁用模拟器上的图形窗口显示。此选项在运行没有显示器的服务器上的模拟器时非常有用。您可以通过adb或控制台访问模拟器。例如

emulator @Pixel8_API_34 -no-window
-partition-size size

指定系统数据分区大小(以MB为单位)。例如

emulator @Pixel8_API_34 -partition-size 1024
-prop name=value

在模拟器启动时设置Android系统属性。name必须是标记为qemu_prop的属性名称,最多32个字符,不包含任何空格,而value必须是最多92个字符的字符串。有关示例,请参阅property_contexts文件。您可以在一条命令行上指定多个‑prop选项。此选项对于调试非常有用。例如

emulator @Pixel8_API_34 -prop qemu.name=value -prop qemu.abc=xyz
-qemu args 将参数传递给QEMU模拟器软件。使用此选项时,请确保它是指定的最后一个选项,因为其后的所有选项都被解释为QEMU特定的选项。此选项非常高级,仅应由非常熟悉QEMU *和*Android模拟的开发人员使用。
-qemu -h

显示-qemu帮助信息。例如

emulator -qemu -h
-ramdisk filepath

指定ramdisk引导镜像。指定文件名和绝对路径或相对于工作目录的路径。

例如

emulator @Pixel8_API_34 -ramdisk
   ~/Library/Android/sdk/system-images/android-34/
   google_apis/x86_64/ramdisk-test.img

如果不使用此选项,则默认为系统目录中的ramdisk.img文件。更多信息,请参阅AVD系统目录

-report-console socket

在启动模拟之前向远程第三方报告控制台端口。这对于自动化测试脚本很有用。socket必须使用以下格式之一

  • tcp:port[,server][,max=seconds][,ipv6]
  • unix:port[,server][,max=seconds][,ipv6]

更多信息,请使用-help-report-console选项,如特定选项的帮助信息部分所述。

-shell

在当前终端上创建一个root shell控制台。此选项与adb shell命令的不同之处在于

  • 它创建一个*root* shell,允许您修改系统的许多部分。
  • 即使模拟系统中的adb守护程序已损坏,它也能正常工作。
  • 按Control+C(或macOS上的Command-C)停止模拟器而不是shell。

例如

emulator @Pixel8_API_34 -shell
-snapshot name

指定快照存储文件内用于自动启动和保存操作的快照名称。

模拟器可以从较早的状态快照恢复执行,而不是执行完整的引导序列,这通常要快得多。提供此选项时,模拟器将从快照镜像加载该名称的快照,并在退出时将其保存回同一名称。

如果不使用此选项,则默认为完整的引导序列。如果指定的快照不存在,则模拟器将改为执行完整的引导序列并执行保存操作。

有关指定快照存储文件和默认文件的详细信息,请参阅-snapstorage选项。

emulator @Pixel8_API_34 -snapshot snapshot2

请记住,在加载快照的过程中,系统、用户数据和SD卡镜像的所有内容都将被其在创建快照时保存的内容覆盖。除非您将此信息保存在不同的快照中,否则自那时以来的任何更改都将丢失。

您还可以使用avd snapshot save name命令从模拟器控制台创建快照。更多信息,请参阅发送模拟器控制台命令

-snapshot-list

显示可用快照的列表。此命令打印存储在启动模拟器时使用的快照存储文件中的快照表,然后退出。如果还指定了-snapstorage file,则此命令将打印存储在文件中的快照表。

例如

emulator @Pixel8_API_34 -snapshot-list -snapstorage
   ~/.android/avd/Pixel8_API_34.avd/snapshots-test.img

您可以使用输出中的ID和TAG列值作为-snapshot选项的参数。

-snapstorage filepath

指定包含所有状态快照的存储库文件。执行期间进行的所有快照都将保存在此文件中。仅此文件中的快照可在模拟器运行期间恢复。

例如

emulator @Pixel8_API_34 -snapstorage
   ~/.android/avd/Pixel8_API_34.avd/snapshots-test.img

如果不指定此选项,则默认为数据目录中的snapshots.img。如果指定的文件不存在,则模拟器将启动,但不会支持保存或加载状态快照。

-sysdir dir

使用绝对路径指定系统目录。更多信息,请参阅AVD系统目录。例如

emulator @Pixel8_API_34 -sysdir
   ~/Library/Android/sdk/system-images/android-34/
   google_apis/x86_64/test
-system filepath

指定初始系统文件。提供文件名和绝对路径或相对于工作目录的路径。

例如

emulator @Pixel8_API_34 -system
   ~/Library/Android/sdk/system-images/android-34/
   google_apis/x86_64/system-test.img

如果不使用此选项,则默认为系统目录中的system.img文件。更多信息,请参阅AVD系统目录

-use-system-libs

在Linux上,使用系统libstdc++而不是模拟器系统捆绑的版本。仅当模拟器无法正常启动时才使用此选项,并注意它并不总是有效。或者,将 ANDROID_EMULATOR_USE_SYSTEM_LIBS环境变量设置为1。

例如

me-linux$ emulator @Pixel8_API_34 -use-system-libs
-writable-system

使用此选项可在模拟会话期间获得可写的系统镜像。为此

  1. 使用-writable-system选项启动虚拟设备。
  2. 从命令终端输入adb remount命令,告诉模拟器将system/重新挂载为读/写。默认情况下,它被挂载为只读。

使用此标志会创建系统镜像的临时副本,该副本可能非常大,最多几百MB,但会在模拟器退出时被销毁。

已弃用的选项

以下命令行选项已弃用

  • -audio-in
  • -audio-out
  • -charmap
  • -code-profile
  • -cpu-delay
  • -dpi-device
  • -dynamic_skin
  • -enable-kvm
  • -gps
  • -image
  • -keyset
  • -help-keys
  • -help-keyset-file
  • -nand-limits
  • -noskin
  • -no-skin
  • -onion
  • -onion-alpha
  • -onion-rotation
  • -radio
  • -ranchu
  • -raw-keys
  • -scale
  • -shared-net-id
  • -shell-serial
  • -skin
  • -skindir
  • -trace
  • -useaudio

获取有关命令行选项的帮助

本节介绍如何获取有关命令行选项的帮助。它提供有关启动模拟器时可用的常用模拟器命令行选项的更深入信息。

列出所有模拟器选项

要打印所有模拟器选项(包括简短说明)的列表,请输入以下命令

emulator -help

获取特定选项的详细帮助

要打印特定启动选项的帮助信息,请输入以下命令

emulator -help-option

例如

emulator -help-netspeed

此帮助信息比-help选项提供的描述更详细。

获取所有选项的详细帮助

要获取所有模拟器选项的详细帮助,请输入以下命令

emulator -help-all

列出模拟器环境变量

要获取模拟器环境变量的列表,请输入以下命令

emulator -help-environment

您可以在启动虚拟设备之前在终端窗口中设置环境变量,也可以通过操作系统的用户设置进行设置。例如,在Linux上的.bashrc文件中进行设置。

列出调试标签

要打印-debug选项的标签列表,请输入以下命令

emulator -help-debug-tags

-debug选项允许您启用或禁用来自特定模拟器组件的调试消息,这些消息由标签指定。