安装 Android 11 GSI 以进行应用测试

Treble 计划(包括 Android (9)Pie 及更高版本的设备)可在 Android 操作系统和供应商部分之间创建一个清晰的接口。供应商部分包含板级支持包 (BSP)。操作系统部分称为 Android 通用系统映像 (GSI):

符合 Treble 接口要求的 Android 操作系统 build 可以在任何符合 Treble 标准的 Android 设备上运行。当然,这些操作系统 build 不能包含任何 OEM 自定义或扩展。

什么是通用系统映像 (GSI)?

Android GSI 是一个与 AOSP 源代码匹配的完整操作系统映像。对于应用开发者而言,GSI 的一些价值在于:

  • 在 Android 早期发布阶段,例如开发者预览版和 Beta 版阶段,开发者可以将这些操作系统安装到制造商尚未推出最新操作系统的设备上。

如果应用能够在 GSI 上正常运行,那么它应该在未来具有相同 Android API 级别的认证 OEM 平台上顺畅运行。在这方面,GSI 使开发者能够更早针对未来的 Android 操作系统世代测试应用;早期测试为开发者赢得更多时间来解决与新操作系统的潜在兼容性问题,还让开发者可以更早地报告操作系统问题,以便 Android 团队能在最终操作系统发布之前解决这些问题!GSI 帮助开发者和 Android 团队打造更出色的 Android 生态系统,并为您的应用实现最佳用户体验。

此 Codelab 介绍了如何将 Android GSI 11 安装到搭载 Android 9(API 级别 28)的设备,从而让我们可以开始在新的 Android 11 上进行常规测试或开发!

Android GSI 的设备要求

一般来说,使用 Android GSI 需要满足以下 3 个条件:

  • 设备完全符合 Treble 标准(发布时搭载 Android 9 或更高版本的设备必须支持 Treble)。
  • 设备的引导加载程序可以解锁。
  • 用于更新设备操作系统的工具和过程。

您可以通过设备制造商找到上述信息。在此 Codelab 中,我们会以 Pixel 3 手机为例。

构建内容

在此 Codelab 中,您将学习以下内容:

  • 确定要下载的 GSI
  • 将 GSI 安装到 Android 设备上

在这里,您可以执行应用开发和验证:GSI 是您设备的新操作系统。

您将学习的内容

  • 如何确定合适的 GSI 类型
  • 在何处下载 GSI
  • 如何将 GSI 安装到设备上

您将需要满足的条件

  • 一台安装了 Debian/Ubuntu Linux、Mac OS 或 Windows 的计算机,其中预安装了最新的稳定版 Android StudioAndroid SDK
  • 添加到 PATH 环境变量的 platform-tools 目录:
  • 在 Linux 或 Mac OS 上:
    export PATH=$your-android-sdk-path/platform-tools:$PATH
  • 在 Windows 上:setx path "%path%;%your-android-sdk%\platform-tools"
  • 发布时搭载 Android 9 或更高版本、已解锁引导加载程序已启用 USB 调试的 Android 设备。

如果在此 Codelab 操作期间遇到任何问题(代码错误、语法错误、措辞含义不明等),都可以通过 Codelab 左下角的报告错误链接报告相应问题。

启用 USB 调试

按照说明启用 USB 调试后,在终端中输入以下命令:

adb devices


您应该会在终端中看到测试设备的序列号。

确认设备发布时搭载的操作系统版本

如需确认 Android 9 是测试设备发布时搭载的操作系统,请输入以下命令:

adb shell getprop ro.product.first_api_level

如果此命令的结果是 28(或更高),则表明是 Android 9 或更高版本,我们就准备就绪了:要完全符合 Treble 标准,需要发布时搭载 Android 9 及更高版本的设备。

请注意,无法在运行较新世代 Android 操作系统的设备上安装较旧世代的 GSI:例如,在发布时搭载 Android 11 的设备上安装 Android 10 GSI,可能无法工作。

解锁引导加载程序

解锁引导加载程序的步骤完全取决于设备制造商。对于 Pixel 3 及之后推出的 Pixel 手机,如果尚未解锁,我们可按照 AOSP 网站上的说明进行操作:

  • 通过“设置”应用启用 OEM 解锁功能:开发者选项 > OEM 解锁
  • 通过按住电源键音量调低按钮或使用 adb,重新启动到引导加载程序:
adb reboot bootloader
  • 使用以下命令解锁引导加载程序:
fastboot flashing unlock

按照 Pixel 3 上的提示操作,以允许解锁;现在,这部 Pixel 3 已准备好安装 GSI 了。

Android 通用系统映像 (GSI) 网站列出了可用的 GSI 类型。如需检查设备的 CPU 架构,请在终端窗口中运行以下命令:

adb shell getprop ro.product.cpu.abi

它应该会返回以下某个结果:

  • arm64-v8a
  • armeabi-v7a
  • armeabi
  • x86
  • x86_64

Pixel 3 支持 arm64-v8a 架构,因此我们可以使用 arm64 或 arm64 + GMS GSI:

  • arm64 GSI 类型:AOSP Android
  • gms_arm64 类型:使用 Google GMS 的 arm64 GSI

arm64+GMS 允许您在设备上使用 Google Play 服务,您通常会安装这种类型的 GSI 来测试您的应用。出于下载文件大小方面的考虑,在此 Codelab 中,我们会使用 arm64 GSI;步骤与 gms_arm64 GSI 完全相同。

下载 Android 11 GSI

GSI 是 Android 发布周期(包括开发者预览版、Beta 版,直到正式版本)的一部分。正式发布时,GSI 源代码会发布到 AOSP。一般来说:

  • 在正式发布之前,只有预构建 GSI 可用;
  • 在最终发布时,GSI 源代码会发布到 AOSP;然后
  • 不含 GMS 的 GSI 可从 AOSP CI 页面获取;您也可以自行利用源代码构建 GSI
  • 包含 GMS 的 GSI 只能从 GSI 发布页面获取。

目前,GSI 的可用情况汇总如下:

发布阶段

位置

GSI 格式

最终发布前

GSI 发布网站

预构建二进制文件:

  • aosp gsi
  • aosp + gms gsi

最终版本

GSI 发布网站

预构建二进制文件:

  • aosp gsi
  • aosp + gms gsi

AOSP

源代码,即:

  • aosp-android10-gsi
  • aosp-pie-gsi

CI 页面上的 aosp GSI,即:

季度更新

AOSP

源代码,即:

  • aosp-android10-gsi
  • aosp-pie-gsi

CI 页面上的 aosp GSI,即

此 Codelab 适用于 Android 11 GSI,Android 11 GSI 目前处于 Beta 版阶段,只能从 GSI 发布网站获取,我们来从此网站下载 arm64 GSI:

  1. 导航到此页面上的映像下载表。
  2. 选择 ARM64 旁边的链接:

  3. 接受 GSI 条款及条件、下载文件并解压缩:
  mkdir  ~/gsi
  cd ~/gsi
  mv ~/Downloads/aosp_arm64-exp*.zip .
  unzip aosp_arm64-exp*.zip

解压缩后,您应该会看到 2 个映像文件:

  • vbmeta.img:仅用于停用 AVB(Android 启动时验证);如果您的设备采用了 Android 启动时验证实现,则需要此映像。
  • system.img:将安装到您设备上的通用系统映像。

(可选)检查 SDK 刷写工具的版本。

如需将 GSI 刷写到测试设备上,您需要 adbfastboot 两款工具。建议使用与您 Android 设备上当前运行的 Android 版本相匹配的版本。

如需确定 SDK 平台工具的版本,请运行以下命令:

adb --version

这在很大程度上取决于设备:不同的 Android 设备制造商都有自己的刷写工具和说明,请务必访问您设备的制造商网站,了解适用于您设备的确切工具和流程!

对于 Pixel 3 及之后推出的 Pixel 设备,Android 10 中引入的“动态分区”功能会在以下方面影响 GSI 的安装:

  • 刷写模式
    当动态分区已启用时,Pixel 设备需要进入 fastbootd (dynamic fastboot) 模式;否则,设备需要进入 fastboot 模式:
    adb reboot fastboot // 当动态分区已启用时
    adb reboot bootloader // 未使用或已停用动态分区
    您可以查看 dynamic_partition 启动属性设置,了解动态分区状态:
    adb shell getprop ro.boot.dynamic_partitions
    此命令仅在此功能已启用时返回 true
  • 分区调整大小
    启用动态分区后,系统分区会成为动态分区之一;GSI 将安装到此动态系统分区中。GSI 可能比现有的 system 分区大;在这种情况下,您只需删除一些其他动态分区(例如 product partition),即可在系统调整系统分区大小时为 GSI 腾出更多空间:
    fastboot delete-logical-partition product_a/product_b
    查看官方文档页面,了解上述命令中的 product_aproduct_b 选项。

在此示例中,您将使用运行 Android 9 的 Pixel 3 安装 GSI:发布时搭载 Android 9 的手机比发布时搭载 Android 10 的设备更容易获取。

在 Pixel 3 上安装 GSI 所需的工具为 adbfastboot,我们开始吧:

  1. 导航到本地 GSI 映像目录:
cd ~/gsi
  1. 进入设备的刷写模式:
    请注意,如果启用了动态分区功能,则 Pixel 3 需要进入 fastbootd 模式;在此 Codelab 中,此 Pixel 3 手机搭载的是 Android 9,必须使用 fastboot mode
adb reboot bootloader
  1. 将 GSI 刷写到设备上
fastboot flash system system.img

请注意,如果您看到如下所示的错误消息:
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition')

这表示设备已启用动态分区功能;如前所述,按照刷写 GSI 页面说明使用以下命令解决此问题
fastboot delete-logical-partition product_a/_b

  1. 停用 AVB(Android 启动时验证),以使 GSI 在安装后启动。
fastboot flash --disable-verification vbmeta vbmeta.img
  1. 清空用户数据、缓存并重新启动:
fastboot -w reboot

大约一分钟后,您的设备应该会启动到新安装的 Android 11 GSI:

大功告成,您的 Android 手机上运行着全新的 GSI 映像!现在,您可以开始使用最新、最出色的 Android 版本测试和开发应用。

记得使用 Android GSI 问题跟踪器来报告 GSI 相关问题。

对于某些设备,手动安装 GSI 可能费时费力。从 Android 10 开始,GSI 团队实现了一项名为动态系统更新 (DSU) 的功能,可自动执行 GSI 安装过程!DSU 通过以下途径简化了 GSI 安装:

  • 从 GSI 发布页面获取 GSI(从 Android 11 开始提供)
  • 创建动态分区
  • 将 GSI 安装到新分区

此外,DSU 会保留设备上现有的操作系统和用户数据,因此可以在设备上的原始 Android 操作系统与 GSI 之间自由切换。DSU 在搭载 Android 10 的 Pixel 3 及之后推出的 Pixel 设备上提供,并可供其他原始设备制造商 (OEM) 采用!如需详细的文档,请查看 DSU 页面

总结

在此 Codelab 中,我们介绍了以下内容:

  • GSI 类型和变种。
  • Android GSI 的下载位置
  • Pixel 3 及之后推出的 Pixel 设备的 GSI 刷写步骤。

作为测试平台,Android GSI 可让您执行以下操作:

  • 在全新的 Android 操作系统发布周期内,在还没有(由设备制造商提供)正式操作系统的设备上,使用任何里程碑版本测试您的应用
  • 解决应用兼容性问题
  • 向 Android 团队报告潜在的操作系统问题,以便在最终操作系统版本发布之前解决问题

充分利用 GSI 尽早执行测试,打造具备最优质应用和 Android 操作系统的最佳 Android 生态系统!

深入阅读

我们非常期待您对 GSI 和 Android 的反馈!您可以通过以下方法分享您的想法和报告 GSI 问题:提交 GSI 错误、讨论有关 StackOverflow 的主题,以及在 Reddit 上向 GSI 页面投稿