常规系统映像

常规系统映像 (GSI) 是包含未经修改的 Android 开源项目 (AOSP) 代码的“纯 Android”实现。

从 Android 9(API 级别 28)开始,我们会提供可让您在实际设备(而不只是模拟器)上运行的常规系统映像 (GSI),这样一来,开发者就可以更轻松、更一致地进行应用测试。GSI 映像是开源的

各种设备的 GSI 支持情况

图 1. 各种设备的 GSI 支持情况。

GSI 对开发者而言有什么作用?

GSI 是合规性的基准。它为采用各种符合条件的设备的开发者提供一致的测试环境。如果您的应用可在 GSI 上运行,那么您可以确定它几乎可以在所有 Android 设备上运行。

此外,从 Android 9(API 级别 28)开始,Android 兼容性可确保系统映像与旧版供应商实现向后兼容。这意味着开发者可以将 Android 平台的后续版本刷写到其运行 Android 9 供应商实现的当前设备上,以便完成以下事项:

  • 使用 Android 新功能开发应用。
  • 验证现有应用是否具有向前兼容性。

核心系统功能可确保它们在各个平台版本之间的行为保持一致。不过,在下列情况下,您可能会遇到行为差异:

  • 涉及界面的交互。
  • 使用新硬件功能的工作流。

检查设备是否符合条件

GSI 仅适用于具有以下特征的设备:

  • 已解锁。
  • 具有 Treble 支持。
  • 搭载 Android 9(API 级别 28)或更高版本。从较低版本升级到 Android 9 的设备不一定支持 GSI。

要确定您的设备是否可以使用 GSI 以及确定应该安装哪个 GSI 操作系统版本,请执行以下操作:

  1. 通过运行以下命令检查是否具有 Treble 支持:

    adb shell getprop ro.treble.enabled

    如果响应为 false,则表示设备与 GSI 不兼容,您不应继续执行操作。如果响应为 true,请继续执行下一步操作。

  2. 通过运行以下命令检查是否具有跨版本支持:

    adb shell cat /system/etc/ld.config.version_identifier.txt \
    | grep -A 20 "\[vendor\]"

    在输出中,在 [vendor] 部分中查找 namespace.default.isolated

    如果该属性的值为 true,则设备完全支持供应商原生开发套件 (VNDK),而且可以使用任何 GSI 操作系统 (OS) 版本。选择提供的最新 GSI 操作系统版本。

    如果该属性的值为 false,则设备不完全支持 VNDK,而且设备只能针对同样的设备上操作系统版本使用 GSI。例如,如果搭载 Android 9(API 版本 28)的设备与 VNDK 不兼容,则只能加载 Android 9 GSI 映像。

  3. GSI CPU 架构类型必须与设备的 CPU 架构保持一致。要为 GSI 映像查找合适的 CPU 架构,请运行以下命令:

    adb shell getprop ro.product.cpu.abi

    使用输出来确定在刷写设备时要使用的 GSI 映像。例如,在 Pixel 3 上,输出可能会指示 CPU 架构是 arm64-v8a,因此您要使用 arm64 类型的 GSI。

  4. 对于从较低版本升级到 Android 9 的设备,您可以使用下面两种不同类型的旧版 GSI 映像:_a_ab。系统用户在设备上的权限级别决定了使用哪种类型。

    要确定系统用户的权限级别,请运行以下命令:

    adb shell cat /proc/mounts | grep -q /dev/root && echo "system-as-root" || \
    echo "non-system-as-root"

    如果命令的输出是 system-as-root,则您必须使用 _ab 类型的 GSI 映像。如果输出是 non-system-as-root,则必须使用 _a 类型。如果命令的输出中没有值,则表示设备与 GSI 不兼容,您不应继续执行操作。

安装 GSI 映像

在确定您的设备与 GSI 兼容后,请通过以下任意一种方式获取设备对应的 GSI 二进制文件:

然后,将映像刷写到您的设备上。如需详细了解如何刷写 GSI 映像,请参阅刷写 GSI

向我们提供反馈

GSI 映像有助于验证 Android 上的应用。非常感谢您针对映像、工具以及在设备上启用 GSI 的过程提供反馈。

要向我们告知错误和功能请求,请使用专用的问题跟踪器组件