使用 Android 模拟器虚拟设备

您可以使用 Android 模拟器创建 Android 设备模拟,以运行您自己的自定义 Android 系统映像。此外,您可以为 Android 模拟器模拟添加多显示器支持。

Android 模拟器架构

Android 模拟器在名为 Android 虚拟设备 (AVD) 的虚拟机中运行 Android 操作系统。每个 AVD 都包含完整的 Android 软件堆栈,并且其运行方式与在物理设备上运行的方式相同。图 1 说明了 Android 模拟器的高级架构。如需详细了解该模拟器,请参阅在 Android 模拟器上运行应用

Android Emulator architecture.

图 1. Android 模拟器架构。

构建 AVD 映像

每个 AVD 都包含一个 Android 系统映像,该映像在该 AVD 中运行。AVD 管理器包含一些系统映像。您可以从源代码构建自定义 AVD 系统映像,并创建设备模拟来运行它们。

要构建和运行 AVD 系统映像,请执行以下操作

  1. 下载 Android 源代码

    mkdir aosp-main; cd aosp-main
    repo init -u
    repo sync -j24

如果您想构建其他 Android 版本,可以在公共 Android 代码库中找到其分支名称。它们映射到Android 代号、标记和 build 编号

  1. 构建 AVD 系统映像。此过程与构建 Android 设备系统映像的过程相同。例如,要构建 x86 64 位 AVD

    source ./build/envsetup.sh
    lunch sdk_phone_x86_64
    make -j32
  2. 在 Android 模拟器中运行 AVD 系统映像

    emulator

如需详细了解如何运行模拟器,请参阅命令行启动选项。图 2 显示了运行 AVD 的 Android 模拟器的示例

Android Emulator running an AVD.

图 2. 运行 AVD 的 Android 模拟器。

共享 AVD 系统映像,供他人与 Android Studio 结合使用

按照以下说明共享您的 AVD 系统映像,供他人使用。他们可以将您的 AVD 系统映像与 Android Studio 结合使用,以开发和测试应用。

  1. 创建额外的 sdksdk_repo 软件包

    对于 Android 13 及更高版本,请使用 emu_img_zip 命令

    $ make emu_img_zip
    

    这会生成一个 sdk-repo-linux-system-images-eng.[username]].zip 文件。

    对于 Android 12 及更低版本,请使用 sdk_repo 命令

    $ make -j32 sdk sdk_repo
    

    make sdk sdk_repo 命令会在 aosp-main/out/host/linux-x86/sdk/sdk_phone_x86 下创建两个文件

    • sdk-repo-linux-system-images-eng.[username].zip
    • repo-sys-img.xml
  2. 将文件 sdk-repo-linux-system-images-eng.[username].zip 托管在您的用户可以访问的某个位置,并获取其网址以用作AVD 系统映像网址

  3. 对于 Android 12 及更低版本,请相应地修改 repo-sys-img.xml

    • <sdk:url> 更新为您的AVD 系统映像网址
    • 请参阅 sdk-sys-img-03.xsd,了解有关该文件的其他更新。
    • repo-sys-img.xml 托管在您的用户可以访问的某个位置,并获取其网址以用作自定义更新站点网址

要使用自定义 AVD 映像,请在 SDK 管理器中执行以下操作

  1. 添加自定义更新站点网址作为SDK 更新站点

    这会将您的自定义 AVD 系统映像添加到“系统映像”页面。

  2. 创建 AVD,方法是下载并选择自定义 AVD 系统映像。

添加多显示器支持

Android 10 增强了多显示器功能,以更好地支持更多用例,例如汽车和桌面模式。Android 模拟器也支持多显示器模拟。因此,您可以创建特定的多显示器环境,而无需设置真实的硬件。

您可以通过进行以下更改或从这些 CL 中挑选更改,为 AVD 添加多显示器支持。

  • 通过将以下行添加到文件 build/target/product/sdk_phone_x86.mk,将多显示器提供程序添加到 build 中

    PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST := \
        system/lib/libemulator_multidisplay_jni.so \
        system/lib64/libemulator_multidisplay_jni.so \
        system/priv-app/MultiDisplayProvider/MultiDisplayProvider.apk \
    PRODUCT_PACKAGES += MultiDisplayProvider
    
  • 通过将以下行添加到文件 device/generic/goldfish/data/etc/advancedFeatures.ini,启用多显示器功能标记

    MultiDisplay = on
    

您可以从以下来源找到最新的模拟器功能和版本信息