创建和管理虚拟设备

Android 虚拟设备 (AVD) 是一种配置,用于定义您想要在 Android 模拟器 中模拟的 Android 手机、平板电脑、Wear OS、Android TV 或 Automotive OS 设备的特性。设备管理器是您可以从 Android Studio 启动的工具,可帮助您创建和管理 AVD。

要打开新的 **设备管理器**,请执行以下操作之一

  • 从 Android Studio 欢迎屏幕中,选择 **更多操作 > 虚拟设备管理器**。

Opening the Device Manager from the Welcome screen

  • 打开项目后,从主菜单栏中选择**查看 > 工具窗口 > 设备管理器**,然后单击**+**,再单击**创建虚拟设备**。

New Device Manager window

创建设备后,您将在设备管理器面板上看到所有设备的列表。

Device Manager list

如果您想使用虚拟设备以可扩展且自我管理的方式运行自动化测试,请考虑使用Gradle 管理的设备

关于 AVD

AVD 包含硬件配置文件、系统映像、存储区域、皮肤和其他属性。

建议您为您的应用可能支持的每个系统映像创建一个 AVD,具体取决于 <uses-sdk> 清单中的设置。

硬件配置文件

硬件配置文件定义了设备出厂时的特性。设备管理器预装了某些硬件配置文件,例如 Pixel 设备,您可以根据需要定义或自定义硬件配置文件。

The Select Hardware dialog

在**Play 商店**列中标有 Google Play 徽标的设备定义包括 Google Play 商店应用和对 Google Play 服务的访问权限,包括**扩展控件**对话框中的**Google Play**选项卡,该选项卡提供一个方便的按钮来更新设备上的 Google Play 服务。

带有此徽标设备类型为“手机”的设备也符合CTS 标准,并可能使用包含 Play 商店应用的系统映像。

系统映像

标有**Google API**的系统映像包括对Google Play 服务的访问权限。

The System Image
dialog

**推荐**选项卡列出了推荐的系统映像。其他选项卡包含更完整的列表。右侧窗格描述了选定的系统映像。

如果在系统映像旁边看到下载图标,则该映像当前未安装在您的开发机器上。单击图标下载系统映像。您必须连接到互联网才能下载系统映像。

目标设备的 API 级别很重要,因为您的应用不会在 API 级别低于您的应用所需的 API 级别的系统映像上运行,如应用清单文件中的 minSdk 属性中所指定。有关系统 API 级别和minSdk之间关系的更多信息,请参阅应用版本控制

如果您的应用在清单文件中声明了一个 <uses-library> 元素,则该应用需要包含该外部库的系统映像。要在模拟器上运行您的应用,请创建一个包含所需库的 AVD。为此,您可能需要使用 AVD 平台的附加组件;例如,Google API 附加组件包含 Google 地图库。

为了确保应用安全性和与物理设备的一致体验,包含 Google Play 商店的系统映像使用发布密钥签名,这意味着您无法使用这些映像获得提升权限(root)。

如果您需要提升权限(root)来帮助解决应用故障,您可以使用不包含 Google 应用或服务的 Android 开放源代码项目 (AOSP) 系统映像。然后,您可以使用adb rootadb unroot 命令在正常权限和提升权限之间切换。

  % adb shell
  emu64a:/ $
  emu64a:/ $ exit
  % adb root
  restarting adbd as root
  % adb shell
  emu64a:/ #
  emu64a:/ # exit
  % adb unroot
  restarting adbd as non root
  % adb shell
  emu64a:/ $
  emu64a:/ $ exit
  %
  

存储区域

AVD 在您的开发机器上有一个专用的存储区域。它存储设备用户数据,例如已安装的应用和设置,以及模拟的 SD 卡。如果需要,您可以使用设备管理器擦除用户数据,以便设备具有与新设备相同的数据。

皮肤

模拟器皮肤指定设备的外观。设备管理器提供了一些预定义的皮肤。您也可以定义自己的皮肤或使用第三方提供的皮肤。

AVD 和应用功能

确保您的 AVD 定义包含您的应用依赖的设备功能。有关您可以在 AVD 中定义的功能列表,请参阅有关硬件配置文件属性AVD 属性 的部分。

创建 AVD

创建新的 AVD

  1. 打开设备管理器。
  2. 单击**创建设备**。

    将出现**选择硬件**窗口。

    请注意,只有某些硬件配置文件包含**Play 商店**。这些配置文件完全符合CTS 标准,并可能使用包含 Play 商店应用的系统映像。

  3. 选择硬件配置文件,然后单击**下一步**。

    如果您没有看到所需的硬件配置文件,您可以创建导入 硬件配置文件,如本页其他部分所述。

    将出现**系统映像**窗口。

  4. 选择特定 API 级别的系统映像,然后单击**下一步**。
  5. 将出现**验证配置**窗口。

  6. 根据需要更改AVD 属性,然后单击**完成**。

    单击**显示高级设置**以显示更多设置,例如皮肤。

  7. 新 AVD 将出现在设备管理器的**虚拟**选项卡和目标设备菜单中。

从副本开始创建 AVD

  1. 从设备管理器的**虚拟**选项卡中,单击**菜单** 并选择**复制**。

    将出现**验证配置** 窗口。

  2. 如果您需要在系统映像选择硬件 窗口中进行更改,请单击**上一步**。
  3. 进行必要的更改,然后单击**完成**。

    AVD 将出现在设备管理器的**虚拟**选项卡中。

创建硬件配置文件

设备管理器为常用设备提供了预定义的硬件配置文件,以便您可以轻松地将它们添加到 AVD 定义中。如果您需要定义不同的设备,您可以创建新的硬件配置文件。

您可以从头开始定义新的硬件配置文件,也可以复制硬件配置文件作为起点。预装的硬件配置文件不可编辑。

从头开始创建新的硬件配置文件

  1. 选择硬件 窗口中,单击**新建硬件配置文件**。
  2. 在**配置硬件配置文件**窗口中,根据需要更改硬件配置文件属性

    The Configure hardware profile dialog
  3. 单击**完成**。

    新的硬件配置文件将出现在**选择硬件**窗口中。您可以通过单击**下一步**来创建使用硬件配置文件的 AVD,也可以单击**取消**返回**虚拟**选项卡或目标设备菜单。

使用副本作为起点创建硬件配置文件

  1. 在**选择硬件**窗口中,选择硬件配置文件并单击**克隆设备**,或右键单击硬件配置文件并选择**克隆**。

  2. 在**配置硬件配置文件**窗口中,根据需要更改硬件配置文件属性
  3. 单击**完成**。
  4. 新的硬件配置文件将出现在**选择硬件**窗口中。您可以通过单击**下一步**来创建使用硬件配置文件的 AVD,也可以单击**取消**返回**虚拟**选项卡或目标设备菜单。

编辑现有 AVD

您可以在设备管理器的**虚拟**选项卡中对 AVD 执行以下操作。

  • 要编辑 AVD,请单击**编辑此 AVD** 并进行更改。
  • 要删除 AVD,请单击**菜单** 并选择**删除**。
  • 要显示磁盘上的关联 AVD INI 和 IMG 文件,请单击**菜单** 并选择**在磁盘上显示**。
  • 要查看 AVD 配置详细信息,您可以将这些信息包含在发送给 Android Studio 团队的错误报告中,请单击**菜单** 并选择**查看详细信息**。

编辑现有硬件配置文件

您无法编辑或删除预装的硬件配置文件,但可以在**选择硬件**窗口中对其他硬件配置文件执行以下操作。

  • 要编辑硬件配置文件,请选择它并单击**编辑设备**。您也可以右键单击硬件配置文件并选择**编辑**。接下来,进行更改。
  • 要删除硬件配置文件,请右键单击它并选择**删除**。

运行和停止模拟器以及清除数据

从**虚拟**选项卡中,您可以对模拟器执行以下操作。

  • 要运行使用 AVD 的模拟器,请单击**启动**
  • 要停止正在运行的模拟器,请单击**菜单** 并选择**停止**。
  • 要清除模拟器的数据,请单击**菜单** 并选择**擦除数据**。

导入和导出硬件配置文件

从**选择硬件**窗口中,您可以按以下方式导入和导出硬件配置文件。

  • 要导入硬件配置文件,请单击**导入硬件配置文件**并选择计算机上包含定义的 XML 文件。
  • 要导出硬件配置文件,请右键单击它并选择**导出**。指定要存储包含定义的 XML 文件的位置。

AVD 属性

AVD 配置指定了开发计算机与模拟器之间的交互,以及您要在硬件配置文件中覆盖的属性。您可以在**验证配置**窗口中为 AVD 配置指定以下属性。标记为**(高级)**的属性仅在您单击**显示高级设置**时显示。

AVD 配置属性会覆盖硬件配置文件属性,而您在模拟器运行时设置的模拟器属性会覆盖两者。

表 1. AVD 配置属性

AVD 属性 说明
AVD 名称 输入 AVD 的名称。名称可以包含大写或小写字母、数字、句点、下划线、括号、连字符和空格。存储 AVD 配置的文件的名称将从 AVD 名称派生。
AVD ID(高级) 查看 AVD ID。AVD ID 将从 AVD 名称派生。您可以使用 ID 从命令行引用 AVD。
硬件配置文件 单击**更改**从**选择硬件**窗口中选择不同的硬件配置文件。
系统映像 单击**更改**从**系统映像**窗口中选择不同的系统映像。需要活动的互联网连接才能下载新映像。
启动方向

为模拟器的初始方向选择一个选项。

  • 纵向: 高度大于宽度
  • 横向: 宽度大于高度

仅当硬件配置文件中支持该选项时才会启用该选项。在模拟器中运行 AVD 时,如果硬件配置文件中支持纵向和横向,则可以更改方向。

相机(高级)

为任何启用的相机选择一个选项。模拟和虚拟场景设置将生成软件生成的图像,而网络摄像头设置将使用开发计算机的网络摄像头拍照。

相机选项仅在硬件配置文件中支持相机时才可用。它们不适用于 Wear OS、Android TV 或 Google TV。

网络:速度(高级)

选择网络协议以确定数据传输速度。

  • GSM: 全球移动通信系统
  • HSCSD: 高速电路交换数据
  • GPRS: 通用分组无线电业务
  • EDGE: 增强型 GSM 演进数据速率
  • UMTS: 通用移动通信系统
  • HSDPA: 高速下行链路分组接入
  • LTE: 长期演进
  • 完整(默认): 尽可能快地传输数据,直到您的计算机允许为止。
网络:延迟(高级) 选择网络协议以设置协议将数据包从一个点传输到另一个点所需的时间。
模拟性能:图形

选择模拟器中图形的渲染方式

  • 硬件: 使用您的计算机显卡进行更快的渲染。
  • 软件: 在软件中模拟图形,如果您在显卡渲染中遇到问题,这很有用。
  • 自动: 让模拟器根据您的显卡决定最佳选项。
模拟性能:启动选项(高级)

    选择 AVD 的启动方式

  • 冷启动: 设备每次从设备关闭状态启动。
  • 快速启动: 设备从保存的快照加载设备状态。
模拟性能:多核 CPU(高级) 选择要用于模拟器的计算机处理器核心数量。使用更多处理器核心可以加快模拟器速度。
内存和存储:RAM(高级) 覆盖硬件制造商设置的设备上的 RAM 容量。增加大小会占用计算机上的更多资源,但支持更快的模拟器操作。输入 RAM 大小并选择单位,其中之一是 B(字节)、KB(千字节)、MB(兆字节)、GB(千兆字节)或 TB(太字节)。
内存和存储:VM 堆(高级) 覆盖硬件制造商设置的 VM 堆大小。输入堆大小并选择单位,其中之一是 B(字节)、KB(千字节)、MB(兆字节)、GB(千兆字节)或 TB(太字节)。
内存和存储:内部存储(高级) 覆盖硬件制造商设置的设备上可用的不可移动内存空间量。输入大小并选择单位,其中之一是 B(字节)、KB(千字节)、MB(兆字节)、GB(千兆字节)或 TB(太字节)。
内存和存储:SD 卡(高级)

指定可用于在设备上存储数据的可移动内存空间量。

要使用由 Android Studio 管理的虚拟 SD 卡,请选择 Studio 管理,输入大小并选择单位,其中之一是 B(字节)、KB(千字节)、MB(兆字节)、GB(千兆字节)或 TB(太字节)。建议至少使用 100 MB 来使用相机。

要在文件中管理空间,请选择 外部文件 并单击 ... 以指定文件和位置。

有关更多信息,请参阅 mksdcardAVD 数据目录

设备框架:启用设备框架 选择以启用模拟器窗口周围的框架,该框架模仿真实设备的外观。
自定义皮肤定义(高级) 选择一个皮肤,该皮肤控制设备在模拟器中显示时的外观。指定一个屏幕尺寸太大以至于无法适应皮肤可能会导致屏幕被切断,因此您无法看到整个屏幕。有关更多信息,请参阅 创建模拟器皮肤 部分。
键盘:启用键盘输入(高级) 选择此选项以使用您的硬件键盘与模拟器进行交互。此选项在 Wear OS 和 Android TV 上被禁用。

硬件配置文件属性

您可以在 配置硬件配置文件 窗口中为硬件配置文件指定以下属性。AVD 配置属性会覆盖硬件配置文件属性,而您在模拟器运行时设置的模拟器属性会覆盖这两个属性。

设备管理器中包含的预定义硬件配置文件不可编辑。但是,您可以复制配置文件并编辑副本。

某些属性对于某些设备类型被禁用。例如,“圆形”属性仅在 Wear OS 设备上可用。

表 2. 硬件配置文件配置属性

硬件配置文件属性 说明
设备名称 输入硬件配置文件的名称。名称可以包含大写或小写字母、数字、句点、下划线、括号和空格。存储硬件配置文件的文件的名称源自硬件配置文件的名称。
设备类型

从以下选项中选择一个

  • 手机/平板电脑
  • Wear OS
  • Android TV
  • Google TV
  • ChromeOS 设备
  • Android 汽车
屏幕:屏幕尺寸 以英寸为单位指定屏幕的物理尺寸,以对角线测量。如果尺寸大于您的计算机屏幕,则在启动时会缩小尺寸。
屏幕:屏幕分辨率 以像素为单位输入宽度和高度,以指定模拟屏幕上的像素总数。
屏幕:圆形 如果设备具有圆形屏幕(例如某些 Wear OS 设备),请选择此选项。
内存:RAM 输入设备的 RAM 大小并选择单位,其中之一是 B(字节)、KB(千字节)、MB(兆字节)、GB(千兆字节)或 TB(太字节)。
输入:具有硬件按钮(后退/主页/菜单) 如果您的设备具有硬件导航按钮,请选择此选项。如果这些按钮仅在软件中实现,请取消选中它。如果选择此选项,按钮不会出现在屏幕上。无论哪种情况,您都可以使用模拟器侧面板来模拟按下按钮。
输入:具有硬件键盘 如果您的设备具有硬件键盘,请选择此选项。如果它没有,请取消选中它。如果选择此选项,键盘不会出现在屏幕上。无论哪种情况,您都可以使用计算机键盘向模拟器发送按键。
输入:导航样式

从以下选项中选择一个

  • 无: 没有硬件控件。导航通过软件进行。
  • 方向键: 方向键支持。
  • 轨迹球
  • 滚轮

这些选项用于设备本身的硬件控件。但是,外部控制器发送到设备的事件是相同的。

支持的设备状态

选择一个或两个选项

  • 纵向: 高度大于宽度
  • 横向: 宽度大于高度

您必须至少选择一个选项。如果选择两个选项,您可以在模拟器中切换方向。

相机

要启用相机,请选择一个或两个选项

  • 后置摄像头: 镜头朝向用户
  • 前置摄像头: 镜头朝向用户

如果启用了相机,您可以使用开发机器的网络摄像头或模拟器提供的照片来模拟拍照,这取决于您在 AVD 配置中选择的选项。

传感器:加速度计 如果设备具有帮助其确定其方向的硬件,请选择此选项。
传感器:陀螺仪 如果设备具有检测旋转或扭曲的硬件,请选择此选项。结合加速度计,陀螺仪可以提供更平滑的方向检测,并支持六轴方向系统。
传感器:GPS 如果设备具有支持全球定位系统 (GPS) 卫星导航系统的硬件,请选择此选项。
传感器:接近传感器 如果设备具有在通话期间检测到设备靠近用户面部以禁用屏幕输入的硬件,请选择此选项。
默认皮肤 选择一个皮肤,该皮肤控制设备在模拟器中显示时的外观。指定一个屏幕尺寸太大以至于无法适应分辨率可能会导致屏幕被切断,因此您无法看到整个屏幕。有关更多信息,请参阅以下关于 创建模拟器皮肤 的部分。

创建模拟器皮肤

Android 模拟器皮肤是一组文件,用于定义模拟器显示的视觉和控制元素。如果 AVD 设置中提供的皮肤定义不满足您的要求,您可以创建自己的自定义皮肤定义,然后将其应用于您的 AVD。

每个模拟器皮肤包含

  • 一个 hardware.ini 文件
  • 支持的方向和物理配置的布局文件
  • 显示元素的图像文件,例如背景、键和按钮

要创建和使用自定义皮肤

  1. 创建一个目录,您可以在其中保存皮肤配置文件。
  2. 在名为 layout 的文本文件中定义皮肤的视觉外观。此文件定义皮肤的许多特性,例如特定按钮的大小和图像资产。例如

    parts {
        device {
            display {
                width   320
                height  480
                x       0
                y       0
            }
        }
    
        portrait {
            background {
                image background_port.png
            }
    
            buttons {
                power {
                    image  button_vertical.png
                    x 1229
                    y 616
                }
            }
        }
        ...
    }
    

  3. 将设备图像的位图文件添加到同一目录中。
  4. 在设备设置的 INI 文件中指定其他特定于硬件的设备配置,例如 hw.keyboardhw.lcd.density
  5. 将皮肤文件夹中的文件归档,并将归档文件选择为自定义皮肤。

有关创建模拟器皮肤的更详细的信息,请参阅工具源代码中的 Android 模拟器皮肤文件规范