【Android驱动06】GMS兼容性测试CTS --环境搭建、测试执行、结果分析

news2024/12/28 23:49:23

CTS即Compatibility Test Suite意为兼容性测试,是Google推出的Android平台兼容性测试机制。其目的是尽早发现不兼容性,并确保软件在整个开发过程中保持兼容性。只有通过CTS认证的设备才能合法的安装并使用Google market等Google应用。

一,搭建CTS测试环境

1,Linux环境:个人使用Ubuntu 24.04 LTS系统版本。

2,下载 CTS
2.1从 Android 开源项目 (AOSP) 下载 CTS 包。可以通过以下链接访问最新的 CTS 版本:
选择适合你的 Android 版本的 CTS 包并下载。
链接:CTS下载
在这里插入图片描述2.2 解压 CTS 包:

下载完成后,解压下载的 CTS zip 包。

unzip android-cts.zip
cd android-cts

3, 配置adb fastboot

确保 adb 和 fastboot 工具在系统 PATH 中。如果未配置,可以在 ~/.bashrc 或 ~/.bash_profile 中添加以下内容:
下载链接:platform-tools
在这里插入图片描述配置环境变量:

export PATH=$PATH:/path/to/android-sdk/platform-tools

4,JDK环境: Ubuntu 24.04提供了两个主要的Java选项(OpenJDK & Oracle JDK),我们使用apt安装OpenJDK。

# 更新软件源
sudo apt update
# 查找openjdk
sudo apt search openjdk
# 安装openjdk 11(用于cts)
sudo apt install openjdk-11-jdk
# 安装openjdk 21(用于sdkmanager)
sudo apt install openjdk-21-jdk
# 检查java是否安装成功
java -version
javac -version
# 更换版本,注意javac也同步更换,保持一致
sudo update-alternatives --config java
sudo update-alternatives --config javac

配置java环境变量

# 进入该文件进行编辑 
vim .bashrc

# 在文件最后添加以下内容
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export CLASSPATH=.:%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

# wq保存后让新增的环境变量生效
source .bashrc

5, 安装aapt2

aapt2 是在 Android SDK里面
5.1 下载并安装 Android SDK

首先,确保你已经安装了 Android SDK。如果尚未安装,可以从 Android 开发者网站 下载并安装 Android Studio,它会包含 Android SDK。
5.2 找到 aapt2 工具

aapt2 工具通常位于 Android SDK 的 build-tools 目录中。例如,路径可能类似于:

/path/to/Android/sdk/build-tools/<version>/aapt2

5.3 配置环境变量

(1) 编辑你的 shell 配置文件(例如 ~/.bashrc 或 ~/.bash_profile),追加下面配置

export PATH=$PATH:/home/user/Android/Sdk/build-tools/30.0.3

6, 手机的配置要求

  1、确保wifi可访问google服务且稳定,设置VPN,确保IPV6可用。

  2、确保测试设备附近有可用的蓝牙设备。

  3、如果不是刚刷机或者恢复出厂设置的的手机,需要设置Settings > Backup & reset > Factory data reset

  4、语言要设置为英语,Settings > Language & input > Language

  5、要打开位置,Settings > Location > On

  6、Settings > Security > Screen lock > None

  7、Settings > Developer options > USB debugging

  8、Settings > Date & time > Use 24-hour format > Off

  9、Settings > Developer options > Stay Awake > On

10、下载最新的CTS Media Files,拷贝到手机里面,可以单独拷贝某个分辨率的。

    chmod u+x copy_media.sh

  ./copy_media.sh

11、保证手机IMEI号正确

7, Python环境

# 检查系统是否安装python3
python3 --version
# Python虚拟环境相关工具
sudo apt install virtualenv
# virtualenv是否安装成功
virtualenv -h

8, 网络环境
确保PC设备和Android设备均处于外网环境中,并设置JAVA_TOOL_OPTIONS使用代理。

二 , 运行 CTS 测试

1 启动 CTS:

在解压后的 CTS 目录中,运行以下命令启动 CTS 测试:

~/GMSTools/Tools_2024_6_13/CTS/13_r8/android-cts/tools$ ./cts-tradefed

执行后,会出现下述会话框

cts-tf > 

示例:可以在在会话框中执行测试相关case, 执行后一般会等等一段时间会自动停止

 run cts -m CtsAppTestCases -t android.app.cts.SystemFeaturesTest#testSensorFeatures -s 6137577941c14812354

在这里插入图片描述
执行整个CTS的测试:

 run cts --plan CTS

CTS第一遍结束之后,会有很多没有执行的项,需要执行如下命令:

run cts --retry session-id --retry-type NOT_EXECUTED

假如第一次的session-id是0,则命令为

 run cts --retry 0 --retry-type NOT_EXECUTED

继续未完成的cts测试

        执行l r 命令,锁定需要继续跑的session_id : run cts --retry session_id

假如要重跑session-id为0的失败项,则执行: run cts --retry 0

2, 执行单独模块或者单独测试项
a、测试单个模块

        run cts -m <模块名>

b、测试单个测试项

        run cts -m <模块名> -t <test_name>

三,CTS测试报告及log

1、测试报告

        路径:文件位于android-cts/results下面

        命名规则:以测试开始执行的日期和时间命名

        查看报告文件:test_result.xml(建议使用火狐浏览器打开)

2、CTS log

        路径:文件位于android-cts/logs

        命名规则:以测试开始执行的日期和时间命名

3、 测试结果输出:

测试完成后,CTS 会生成一个结果目录,包含测试结果的详细报告。默认情况下,结果存储在 android-cts/results 目录下。

分析结果:
打开生成的结果文件(通常是一个 HTML 文件),查看测试结果和失败的测试用例。根据需要进行故障排除和修复。
在这里插入图片描述
四,cts测试常用命令

CTS测试常用命令包括:‌

查看帮忙信息:‌使用help命令可以显示帮助信息。‌

退出终端:‌使用exit命令可以正常退出CTS控制台。‌

运行测试计划:‌使用run cts --plan test_plan_name命令可以运行特定的测试计划。‌例如,‌run cts --plan CTS将运行所有的测试计划。‌

运行测试包:‌使用run cts --package/-p package_name命令可以运行特定的CTS测试包。‌

运行测试类和/或方法:‌使用run cts --class/-c class_name [–method/-m method_name]命令可以运行特定的测试类或方法。‌

在指定设备上运行测试:‌使用run cts [options] --serial/-s device_ID命令可以在指定的设备上运行CTS测试。‌

并行运行测试:‌使用run cts [options] --shards number_of_shards命令可以在多个设备上并行运行CTS测试。‌

继续未完成的测试:‌使用run cts --continue-session session_ID命令可以在先前未完成的测试报告上继续运行测试。‌

列出设备和他们的状态:‌使用l/listd/devices命令可以列出所有连接的设备及其状态。‌

列出CTS测试包:‌使用l/listpackages命令可以列出所有的CTS测试包。‌

列出CTS测试方案:‌使用l/listp/plans命令可以列出所有的CTS测试方案。‌

查看测试结果:‌使用l/listr/results命令可以列出当前库中的CTS测试结果。‌

这些命令提供了在CTS测试中进行各种操作的可能性,‌从查看帮助信息到运行特定的测试,‌以及管理测试结果等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode 二叉树专题——java实现

1. 二叉树中序遍历 给一棵树&#xff0c;输出中序遍历。 树已经给你建好了&#xff0c;按照一下形式&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* Tree…

花10分钟写个漂亮的后端API接口模板!

你好&#xff0c;我是田哥 在这微服务架构盛行的黄金时段&#xff0c;加上越来越多的前后端分离&#xff0c;导致后端API接口规范变得越来越重要了。 比如&#xff1a;统一返回参数形式、统一返回码、统一异常处理、集成swagger等。 目的主要是规范后端项目代码&#xff0c;以及…

数据恢复大师免费版落伍了吗?2024年4大创新恢复工具对比评测

在这个数字时代&#xff0c;要是突然发现电脑里的珍贵照片、视频或者重要文件不见了&#xff0c;那种感觉就像失去了什么重要的东西&#xff0c;让人焦虑又无助。市面上虽然有很多数据恢复软件&#xff0c;但不是所有软件都能满足我们的需求&#xff0c;尤其是那些既免费又好用…

一键解析:由于找不到xinput1_3.dll,无法继续执行代码的问题,有效修复xinput1_3.dll文件

xinput1_3.dll是一个重要的动态链接库文件&#xff0c;它是DirectX软件包的一部分&#xff0c;主要负责处理游戏和多媒体应用程序中的输入功能。当用户尝试启动某些游戏或应用程序时&#xff0c;可能会遇到一个错误提示&#xff0c;指出“由于找不到xinput1_3.dll&#xff0c;无…

开源AI智能名片拓客小程序在企业品牌快速打造中的应用探索

摘要&#xff1a;在数字化浪潮席卷全球的今天&#xff0c;企业品牌的建设与传播已不再局限于传统的广告与营销手段。开源AI智能名片拓客小程序作为一种创新的数字营销工具&#xff0c;凭借其智能化、个性化及高效化的特点&#xff0c;正逐步成为企业品牌快速打造与提升市场影响…

游戏类型有哪些?游戏分类详细解说(一)

这篇文章是来源于游戏工委牵头制定的团体标准&#xff1a;《网络游戏分类》&#xff08;音数协 2023年1月&#xff0c;征求意见稿&#xff09;。 音数协游戏工委是游戏行业自律组织&#xff0c;在其牵头组织下&#xff0c;腾讯、网易、盛趣、索尼、完美世界、巨人网络等单位共…

MTK6983/MT6983天玑9000芯片详细性能参数_MTK联发科5G方案定制

联发科MT6983旗舰5G移动平台处理器集成了蓝牙、FM、WLAN 和 GPS 模块&#xff0c;是一个高度集成的基带平台&#xff0c;集成了调制解调器和应用处理子系统&#xff0c;可支持 LTE/LTE-A/NR 和 C2K 智能手机应用。 该芯片集成了四个 Arm Matterhorn (ELP) 内核、四个 Arm Klein…

Java | Leetcode Java题解之第304题二维区域和检索-矩阵不可变

题目&#xff1a; 题解&#xff1a; class NumMatrix {int[][] sums;public NumMatrix(int[][] matrix) {int m matrix.length;if (m > 0) {int n matrix[0].length;sums new int[m 1][n 1];for (int i 0; i < m; i) {for (int j 0; j < n; j) {sums[i 1][j …

视图库对接系列(GA-T 1400)二十二、视图库对接系列(级联)校时

背景 校时接口一般用的比较少&#xff0c;一般用的话就注册上级成功之后会发送 一个校时&#xff0c;告诉服务端目前客户端的时间情况。 实现 这个实现的话&#xff0c;我们再注册的时候就已经实现了&#xff0c;注册成功就会发送一次校时 先看抓包 具体实现代码 service接…

【转型必看】Java到AI,程序员的逆袭秘籍,转行人工智能不再是梦!

随着技术的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域&#xff0c;如Java&#xff0c;转向人工智能领域&#xff0c;今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…

「JavaEE」Spring IoC 1:Bean 的存储

&#x1f387;个人主页 &#x1f387;所属专栏&#xff1a;Spring &#x1f387;欢迎点赞收藏加关注哦&#xff01; IoC 简介 IoC 全称 Inversion of Control&#xff0c;即控制反转 控制反转是指控制权反转&#xff1a;获得依赖对象的过程被反转了 传统开发模式中&…

38 Debian如何配置Keepalived+LVS+NFS实现高可用负载均衡

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置Keepalived+LVS+NFS实现高可用负载均衡 《傅老师Debian知识库系列之38》——原创 ==前言== 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成;…

C# Unity 面向对象补全计划 之 初识继承方法与多态

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝 1.继承方法 C# & Unity 面向对象补全计划 之 继承&#xff08;字段与属性&…

什么是五力分析?5分钟带你了解它在企业财务经营中的应用与价值!

如今&#xff0c;随着全球化进程的不断加速&#xff0c;市场环境复杂多变&#xff0c;市场竞争日益激烈&#xff0c;财务经营已经成为了企业应对复杂市场环境、保持自身竞争力的关键。体系化的五力分析平台能够为企业提供一套全面的解决方案&#xff0c;帮助企业在盈利能力、偿…

重生奇迹MU 多准备几套装备才能玩得更好

一、时装必须是要准备一套的 我相信每个玩家都非常注重时装&#xff0c;无论是哪个职业&#xff0c;都希望在平常场合下穿上时髦惊艳的服装。在勇者大陆中&#xff0c;这种操作很常见&#xff0c;几乎所有玩家都需要准备一套。 在游戏中&#xff0c;需要具备一套适合的装备才…

Java实现数据库图片上传(包含从数据库拿图片传递前端渲染)-图文详解

目录 1、前言&#xff1a; 2、数据库搭建 &#xff1a; 建表语句&#xff1a; 3、后端实现&#xff0c;将图片存储进数据库&#xff1a; 思想&#xff1a; 找到图片位置&#xff08;如下图操作&#xff09; 图片转为Fileinputstream流的工具类&#xff08;可直接copy&#…

【C++】模板的特化

文章目录 概念函数模板特化类模板特化全特化偏特化 概念 通常情况下&#xff0c;使用模板可以实现一些与类型无关的代码&#xff0c;但是有一些类型需要特殊处理&#xff0c;否则可能会得到一些错误的结果。 比如&#xff0c;在比较两个数的大小时&#xff0c;如果传入两个变量…

RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐

RAGAI工作流Agent&#xff1a;LLM框架该如何选择&#xff0c;全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐 1.MaxKB MaxKB Max Knowledge Base&#xff0c;是一款基于 LLM 大语言模型的开源知识库问答系统&#xff0c;旨在成为企业的最强大脑。它能够帮…

MySQL:存储引擎相关命令、性能比较

目录 存储引擎 概念 类型 示例 数据库文件 MylSAM .frm .MYD .MYI InnoDB .frm .ibd .opt 查看指定表的存储引擎类型 查看系统支持的存储引擎 修改存储引擎 通过配置文件指定存储引擎 使用alter修改 创建表的同时指定存储引擎 使用set命令临时指定存储引擎…

java入门-API学习

package API;//告诉编译器&#xff0c;编译之后应该放到哪个包里import API.try3.test3; import API.try3.test5; import itcast.test2;import java.util.Random; import java.util.Scanner;//导包 public class Introduce {public static void main(String[] args) {//别忘记写…