设置 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 媒体文件

下载与 Mainline 相关的 CTS 文件(可选)

首次运行 CTS 版本时,CTS 会动态下载一些与 Mainline 相关的 CTS 文件,这会使运行时间至少增加 10 分钟,具体取决于您的网速。

为避免增加这种 CTS 运行时间,您可以先下载与 Mainline 相关的 CTS 文件,然后再运行 CTS 版本,请按照以下说明操作:

  1. 通过运行以下命令获取设备上的 Android API 级别:

    adb shell getprop ro.build.version.sdk
    
  2. 按照 download_mcts.sh 脚本中的说明下载 Mainline CTS 文件。

    下载过程至少需要 10 分钟,具体取决于您的网速。

设备检测

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

内存限制

您可能需要在 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