设置 CTS

如需运行 CTS,首先请准备物理环境、台式机以及您用来测试的 Android 设备。

物理环境

蓝牙 LE 信标

如果被测设备 (DUT) 支持蓝牙 LE,请在 DUT 周围 5 米内放置至少三个蓝牙 LE 信标,以便进行蓝牙 LE 扫描测试。这些信标不需要进行配置或者发射特定信号,而且类型不限,可以是 iBeacon、Eddystone,甚至可以是模拟 BLE 信标的设备。

超宽带

如果 DUT 支持超宽带 (UWB),则必须将另一个支持 UWB 的设备放置在足够近的位置,并确定其方向,以避免出现天线和无线电盲区。对于距离精确度测试,有特定的放置和方向要求。如需详细了解设置,请参阅 UWB 要求。UWB 测试必须手动运行,在命令行中指定相距一米的两个设备。如需详细了解此测试所需的分片,请参阅本地分片

摄像头

运行相机 CTS 时,请使用正常的照明条件和一个测试图案(如棋盘图案)。根据 DUT 的最小焦距放置测试图案,避免与镜头靠得太近。

让相机传感器对准光线充足的场景,使被测相机传感器达到并维持在 CONTROL_AE_TARGET_FPS_RANGE 中配置的最高目标每秒帧数 (FPS)。这适用于 getCameraIdList 报告的所有相机传感器,因为测试会循环访问列出的所有设备并逐个测评其性能。

如果 DUT 支持外部相机(如 USB 摄像头),请在运行 CTS 时插上外部相机。否则 CTS 测试将失败。

GPS/GNSS

如果 DUT 支持全球定位系统/全球导航卫星系统 (GPS/GNSS) 功能,应该以合适的信号电平向 DUT 提供 GPS/GNSS 信号,以便其接收到相应信号并计算 GPS 位置。GPS 部分必须符合 ICD-GPS-200C 标准。除此之外,GPS/GNSS 信号种类不限(可以是卫星模拟器或者室外 GPS/GNSS 信号中继器),也可以将 DUT 放在距离窗口足够近的位置,使其可以直接接收到足够强的 GPS/GNSS 信号。

Wi-Fi 和 IPv6

CTS 测试需要一个支持 IPv4 和 IPv6 的 Wi-Fi 网络,可以连接到互联网且具有适用于 IPv4 和 IPv6 的有效 DNS,支持 IP 多播,并且可以将 DUT 视为独立客户端。独立客户端是指一种配置,可使 DUT 无法接收该子网上的广播/多网络消息。可以通过 Wi-Fi 接入点 (AP) 配置或通过在未连接其他设备的隔离子网上运行 DUT 来实现独立客户端。

如果您无法访问原生 IPv6 网络、IPv6 运营商网络或 VPN,导致无法通过某些基于 IPv6 的测试,您可以使用 Wi-Fi 接入点和 IPv6 隧道。

为通过 CTS 测试,DUT 需要 Wi-Fi 接口设有 UPBROADCASTMULTICAST 标志。Wi-Fi 接口需要分配有 IPv4 和 IPv6 地址。请使用 adb shell ifconfig 检查 Wi-Fi 接口属性。

对于支持 Wi-Fi STA/STA 并发的设备,需要多个 Wi-Fi 网络(至少 2 个)。为了能够顺利通过 CTS 测试,Wi-Fi 网络必须在具有不同 SSID 的不同频段上运行,或在具有不同 BSSID 的同一 SSID 上运行。

Wi-Fi RTT

Android 包含 Wi-Fi RTT API,用于提供 Wi-Fi 往返时间 (RTT) 功能。此 API 允许设备测量自身与接入点之间的距离(误差在 1 到 2 米内),从而显著提高室内位置信息的准确性。我们推荐两款支持 Wi-Fi RTT 的设备:Google WifiCompulab 的 Fitlet2 接入点(使用 5 GHz 频段,带宽设为 40 MHz)。

接入点应接通电源,但不需要网络连接。接入点无需紧靠测试设备,但建议距离 DUT 不超过 40 英尺。通常,一个接入点就足够了。

台式机设置

注意:CTS 支持 64 位 Linux 计算机。Windows 操作系统或 MacOS 不支持 CTS。

FFMPEG

在主机上安装 ffmpeg 5.1.3 版(或更高版本)的软件包。

主机升级

强烈建议将 CTS 主机 RAM 升级到 128GB,将 HDD 升级到 256GB。这是为了适应 CTS 测试用例数量的增加以及 tradefed 中 Java 堆空间预留的增加。

adb 和 AAPT2

运行 CTS 之前,请确保已安装最新版本的 Android 调试桥 (adb)Android 资源打包工具 (AAPT2),并已将这两个工具的位置信息添加到计算机的系统路径中。

如需安装 adb 和 AAPT2,请从 Android Studio 的 SDK 管理器或从 sdkmanager 命令行工具下载最新的 Android SDK 平台工具Android SDK 构建工具

确保 adbaapt2 位于您的系统路径下。以下命令假定您已将软件包归档下载到主目录中名为 android-sdk 的子目录:

export PATH=$PATH:$HOME/android-sdk/platform-tools:$HOME/android-sdk/build-tools/<tools version number>

适用于 Ubuntu 的 Java 开发套件

安装正确版本的 Java 开发套件 (JDK)

  • 对于 Android 11,请安装 OpenJDK11。
  • 对于 Android 9 和 Android 10,请安装 OpenJDK9。
  • 对于 Android 7.0、7.1、8.0 和 8.1,请安装 OpenJDK8。

如需了解详情,请参阅 JDK 要求

Python 支持设置

按照安装说明为您的平台安装 virtualenv

您可以通过调用 virtualenv -h 验证安装是否成功。

CTS 文件

兼容性测试套件下载页面下载与您设备的 Android 版本以及您设备支持的所有应用二进制接口 (ABI) 相匹配的 CTS 软件包,并将其打开。

下载并打开最新版本的 CTS 媒体文件

设备检测

按照相应步骤设置系统以检测设备

内存限制

您可能需要在 cts-tradefed 脚本中增加测试运行期间可用的最大内存。如需了解详情,请参阅示例 CL

Android 设备设置

用户 build

兼容的设备是指具有 user/release-key 签名 build 的设备。您的设备应运行基于代号、标记和 build 号中已知兼容用户 build(Android 4.0 或更高版本)的系统映像。

初始 API 级别 build 属性

某些 CTS 要求取决于设备最初搭载的 build。例如,如果设备最初搭载的是较低的 build,可能就不需要遵循适用于搭载较高 build 的设备的系统要求。

为确保 CTS 能够读取到这些信息,设备制造商可以定义构建时间属性 ro.product.first_api_level。该属性的值是相应设备在进行商业化发布时所采用的初始 API 级别。

设备造商可以重复使用通用底层实现,将新产品作为同一设备组中现有产品的升级版发布。设备制造商可以选择将现有产品的 API 级别设置为 ro.product.first_api_level,以将升级要求应用到 CTS 和 Treble/VTS。

设备制造商可以在其 device.mk 文件中定义 PRODUCT_SHIPPING_API_LEVEL 以设置此属性,如下例所示:

# PRODUCT_SHIPPING_API_LEVEL sets ro.product.first_api_level to indicate
# the first api level that the device has been commercially launched on.
PRODUCT_SHIPPING_API_LEVEL := 21

Android 9 或更高版本的初始 API 级别

如果设备搭载的是 Android 9 或更高版本,请将属性 ro.product.first_api_level 设置为代号、标记和 build 号中的有效值。

Android 8.x 或更低版本的初始 API 级别

对于搭载 Android 8.x 或更低版本的设备,请为产品的第一个 build 取消设置(移除)ro.product.first_api_level 属性。对于所有后续 build,请将 ro.product.first_api_level 设置为正确的 API 级别值。这样一来,该属性便可以正确标识新产品,并保留关于产品初始 API 级别的信息。如果取消设置此标记,Android 会将 Build.VERSION.SDK_INT 分配给 ro.product.first_api_level

CTS shim 软件包

Android 10 或更高版本包含一种名为 APEX 的软件包格式。如需为 APEX 管理 API 运行 CTS 测试(例如,更新到新版本、报告启用的 APEX 等),您必须将一个 CtsShimApex 软件包预安装在一个 /system 分区内。

APEX Shim 验证测试可以验证 CtsShimApex 的实现。

ro.apex.updatable 要求

  • 如果将 ro.apex.updatable 属性设为 true,必须在所有支持 APEX 软件包管理的设备上安装 CtsShimApex

  • 如果 ro.apex.updatable 属性缺失或未设置,无需在设备上预安装 CtsShimApex

APEX Shim 验证测试可以验证 CtsShimApex 的实现。

CtsShim 预安装和预加载

从 Android 11 开始,CtsShimApex 中会包含两个预构建的应用(通过构建源代码构建),且这些应用中不含除清单以外的任何代码。CTS 会使用这些应用来测试特权和权限。

如果设备不支持 APEX 软件包管理(即,ro.apex.updatable 属性缺失或未设置),或者设备搭载的是版本 10 或更低版本,就必须在系统中单独预安装这两个预构建应用。

如果支持 APEX,相应版本的预安装必须放置在 /system/apex/com.android.apex.cts.shim.apex 中。

如果使用常规预构建应用,则必须将相应版本的 CtsShimCtsShimPriv 分别放置在 /system/app/CtsShimPrebuilt.apk/system/priv-app/CtsShimPrivPrebuilt.apk 中。

下表列出了适用于每个设备版本和架构的预安装和预加载项。

设备版本 预安装
(如果支持 APEX)
预加载
ARM x86 ARM x86
Android 14 android14-arm-release android14-x86-release android14-arm-CtsShim.apk

android14-arm-CtsShimPriv.apk

android14-x86-CtsShim.apk

android14-x86-CtsShimPriv.apk

Android 13 android13-arm-release android13-x86-release android13-arm-CtsShim.apk

android13-arm-CtsShimPriv.apk

android13-x86-CtsShim.apk

android13-x86-CtsShimPriv.apk

Android 12 android12-arm-release android12-x86-release android12-arm-CtsShim.apk

android12-arm-CtsShimPriv.apk

android12-x86-CtsShim.apk

android12-x86-CtsShimPriv.apk

Android 11 android11-arm-release android11-x86-release android11-arm-CtsShim.apk

android11-arm-CtsShimPriv.apk

android11-x86-CtsShim.apk

android11-x86-CtsShimPriv.apk

Android 10 android10-release android10-arm-CtsShim.apk

android10-arm-CtsShimPriv.apk

android10-x86-CtsShim.apk

android10-x86-CtsShimPriv.apk

Android 9、O 和 O-MR1 不适用 不适用 arm-CtsShim.apk

arm-CtsShimPriv.apk

x86-CtsShim.apk

x86-CtsShimPriv.apk

必须将这些应用预加载到系统映像上的相应目录下,但不能对应用重新签名,这样才能通过测试。

示例小程序

Android 9 引入了 Open Mobile API。如果设备基于多个安全元件生成报告,为了验证 Open Mobile API 的行为,CTS 会添加相应的测试用例。使用这些测试用例时,需要在 DUT 的嵌入式安全元件 (eSE) 或 DUT 所使用的 SIM 卡中进行一次示例小程序安装。可以在 AOSP 中找到相关的 eSE 示例小程序SIM 示例小程序

如需详细了解 Open Mobile API 测试用例和访问控制测试用例,请参阅安全元件的 CTS 测试

存储空间要求

CTS 媒体压力测试要求将视频剪辑存放在外部存储空间 (/sdcard) 中。大部分剪辑来自 Big Buck Bunny,剪辑版权归 Blender Foundation 所有并采用知识共享署名 3.0 许可

所需空间取决于设备支持的最大视频播放分辨率。如需了解所需分辨率的平台版本,请参阅 Android 兼容性定义文档第 5 节。

以下是按最大视频播放分辨率列出的存储空间要求:

  • 480x360:98 MB
  • 720x480:193 MB
  • 1280x720: 606 MB
  • 1920x1080:1863 MB

屏幕和存储空间

  • 没有嵌入式屏幕的设备一律需要连接到屏幕。
  • 如果设备具有存储卡插槽,请插入空的 SD 卡。请使用支持超高速 (UHS) 总线且具有 SDHC 或 SDXC 容量的 SD 卡,或速度不低于 Class 10 的 SD 卡,以确保设备能通过 CTS 测试。

  • 如果设备有 SIM 卡插槽,请在每个插槽中插入一张已激活的 SIM 卡。如果设备支持短信,必须填充每个 SIM 卡的号码字段。对于搭载 Android 12 或更高版本的设备,所有 SIM 卡都必须支持存储缩位拨号 (ADN) 号码。具有电信专用文件 (DFTelecom) 的 GSM 和 USIM 卡满足此要求。

开发者 UICC

如需运行 CTS 运营商 API 测试,设备需要使用具备 CTS 运营商权限的 SIM 卡,该 SIM 卡满足准备 UICC 中规定的要求。

Android 设备配置

  1. 将设备恢复出厂设置:依次点击设置 > 备份和重置 > 恢复出厂设置

  2. 将设备的语言设置为英语(美国):依次点击设置 > 语言和输入法 > 语言

  3. 如果设备支持自定义默认字体,请将默认 sans-serif 字体系列设置为 Roboto(AOSP build 中使用的默认 sans-serif 字体系列)。

  4. 如果设备有 GPS 或 Wi-Fi/移动网络功能,请开启位置信息设置:依次点击设置 > 位置 > 开启

  5. 连接到满足以下要求的 Wi-Fi 网络:支持 IPv6、可以将 DUT 视为独立客户端(请参阅上文的物理环境部分),并可连接到互联网。连接网络的操作方式为:依次点击设置 > Wi-Fi

  6. 确保设备未设置锁屏图案或密码:依次点击设置 > 安全 > 屏幕锁定 > 无

  7. 在设备上启用 USB 调试:依次点击设置 > 开发者选项 > USB 调试

  8. 将时间设置为 12 小时制:依次点击设置 > 日期和时间 > 使用 24 小时制 > 关闭

  9. 将设备设置为不锁定屏幕:依次点击设置 > 开发者选项 > 不锁定屏幕 > 开启

  10. 仅在 Android 5.x 和 4.4.x 上,可以将设备设置为允许模拟位置:依次点击设置 > 开发者选项 > 允许模拟位置 > 开启

  11. Android 4.2 或更高版本中,关闭通过 USB 验证应用功能:依次点击设置 > 开发者选项 > 通过 USB 验证应用 > 关闭

  12. Android 13 或更高版本中,将设备设置为允许运行 Mock Modem 服务:依次点击设置 > 开发者选项 > 允许运行 Mock Modem 服务 > 开启

  13. 启动浏览器并关闭任何启动/设置屏幕。

  14. 使用 USB 数据线连接将要用于测试设备的台式机。

  15. 在运行 CTS 之前,使用用户可访问(非隐藏)的设置将 Roboto2 设置为 Sans Serif 字体。

文件安装

在设备上安装并配置帮助程序应用。

  1. 请根据您的 CTS 版本设置设备:

    • 对于 CTS 2.1 R2 - 4.2 R4 的版本,请通过以下命令设置您的设备(或模拟器),以便执行无障碍功能测试:adb install -r android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk

      在设备上启用委托:依次点击设置 > 无障碍 > 无障碍 > 委托无障碍服务

    • 对于 CTS 6.x 或更低版本,在声明 android.software.device_admin 的设备上,使用以下命令将设备设置为运行设备管理测试:adb install -r android-cts/repository/testcases/CtsDeviceAdmin.apk`

      依次点击设置 > 安全 > 选择设备管理器,然后启用两个 android.deviceadmin.cts.CtsDeviceAdminReceiver* 设备管理器。确保 android.deviceadmin.cts.CtsDeviceAdminDeactivatedReceiver 和任何其他预加载的设备管理器均保持停用状态。

  2. 按照以下步骤将 CTS 媒体文件复制到设备上:

    1. 导航 (cd) 到下载并解压缩媒体文件的目标路径。
    2. 更改文件权限:chmod u+x copy_media.sh

    3. 复制必要的文件:

      • 如需复制分辨率最高为 720x480 的剪辑,请运行以下命令:

        ./copy_media.sh 720x480
        
      • 如果您不确定最大分辨率,请复制所有文件:

        ./copy_media.sh all
        
      • 如果 adb 下有多个设备,请在末尾添加特定设备的序列号选项 (-s)。例如,如需将分辨率最高为 720x480 的文件复制到序列号为 1234567 的设备,请运行以下命令:

        ./copy_media.sh 720x480 -s 1234567