碰到CTS问题我该如何处理?

本文详细介绍了Android的 Compatibility Tests Suite (CTS) 测试,旨在确保设备兼容性和应用程序的顺利运行。内容涵盖CTS的目的,如提升用户体验和应用质量,以及CTS的运行原理。此外,还提供了在本地执行CTS测试的步骤,包括手机和PC的设置,测试命令的执行,以及测试结果的查看和分析方法。文章通过一个实战案例解析了如何处理CTS测试中的错误,并提出了两种问题定位方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是CTS?

CTS测试全称为系统兼容测试(Compatibility Test suite),CTS是为了测试手机是否符合google定义的兼容性规范(Compatibility Definition)。从而基于Android的应用程序能在基于同一个api版本的设备上面运行。通过CTS测试的设备可以获得Android的商标,并且享受Android Market的权限。

1.1CTS测试目的

由于Google系统的开源性,很多手机厂商基于安卓系统做出了深度优化,从而造成了安卓移动终端的碎片化,导致android终端的兼容性差的问题,严重影响用户体验。手机通过CTS测试,使市场得到了一个通用的规范:

1.1.1 让App提供更好的用户体验,用户可以选择更多的适合自己设备的app

1.1.2 让开发者设计更高质量的app

1.1.3 通过CTS的设备可以运行Android market

1.1.4 CTS 是一套单元测试,其目的是尽早发现不兼容性,并确保软件在整个开发过程中保持兼容性。

1.2CTS测试运行原理

在pc端安装CTS测试套件,安装完成后,就可以通过连接到pc端的数据线将测试用例发送至手机上,完成测试用例的执行,并且把执行结果返回给PC端。

二、本地怎么进入CTS状态

2.1手机端设置

打开开发者模式

打开不锁定屏幕的开关 (Don't lock screen → on)

打开直接进入系统的开关 (Skip screen lock → on)

打开USB调试;USB安装;USB调试(安全设置)) (USB debugging → on ; Install via USB → on ; USB debugging (security settings) → on )

选择日志级别为Verbose (Select log level → Verbose)

2.2PC端设置

直接下载Google 原生 CTS工具

下载地址 CTS Release

在android-cts/tools 执行 ./cts-tradefed

进入CTS模式

三、本地跑CTS进行测试

3.1进入CTS模式

运行CTS命令

  • 整模块测试:

run cts -m [模块] -t [测试模块的类]
  • 测试某一个用例:

run cts -m [模块] -t [测试模块的类]#[测试的某一个用例]
  • 示例

run cts -m CtsWindowManagerDeviceTestCases -t android.server.wm.PinnedStackTests#testConfigurationChangeOrderDuringTransition

四、测试结果

4.1CTS log和CTS结果

4.1.1log路径

android-cts/logs/cts命令执行时间点/

4.1.2结果路径

android-cts/results/cts命令执行时间点/

4.2结果查看

4.2.1最直接的结果查看在终端输出,直接从终端查看结果

4.2.2文件夹查看log

4.1 中 logs/cts命令执行时间点/ 路径下查看如下两个文件

device_logcat_testxxxxx.txt 为测试的CTS的adb log输出

host_log_xxxxxx.txt 为测试的CTS的结果输出和终端输出几乎无差别

查看测试结果

浏览器打开4.1 中 results/cts命令执行时间点/test_result.html

 

4.3 感觉log 信息打印不全面/添加log信息

4.3.1开放protolog

如果感觉log显示不全,可以添加log 编译进手机里面进行测试。

也可以使用logging打开protolog开关进行测试(framework)

adb shell dumpsys window logging

adb shell wm logging

4.3.2修改CTS PAK添加log

当测试CTS报错之后,无法暂时无法确定问题原因,可以添加 log进行打印堆栈方便定位问题

CTS测试CASE全部在 源码的 cts目录下,修改的时候需要导入CTS目录

  • 编译CTS 测试 APK

  1. 查找离修改文件最近的Android.bp

  2. 查找 android_test 便签里面的name信息

  3. ninja/make 编译 name

  4. 将编译好的 CtsWindowManagerDeviceTestCases.apk 放置 qcts/google/cts/cts-12.0_R4/android-cts/testcases 文件夹下,并进行替换。

  5. 然后用qts测试CTS,查看log输入

示例:

如下图的修改添加堆栈信息

  • 执行 ninja/make CtsWindowManagerDeviceTestCases -j16

  • 将编译好的 CtsWindowManagerDeviceTestCases.apk 放置 qcts/google/cts/cts-12.0_R4/android-cts/testcases 文件夹下,并进行替换。
  • 然后用qts测试CTS,查看log输入。

 

 

五、实战案例解析

运行

run cts -m CtsWindowManagerDeviceTestCases -t

android.server.wm.KeyguardLockedTests#testDismissKeyguardActivity_method_cancelled

报错如下:

java.lang.AssertionError: FAILED because unsatisfied: onDismissCancelled of ComponentInfo{android.server.wm.app/android.server.wm.app.DismissKeyguardMethodActivity}

1.报错为testDismissKeyguardActivity_method_cancelled 报错首先找到 testDismissKeyguardActivity_method_cancelled 所在的测试用例查看所测试的项目。

cts/tests/framework/base/windowmanager/src/android/server/wm/KeyguardLockedTests.java#196

2.发现测试用例使用的是 DISMISS_KEYGUARD_METHOD_ACTIVITYDISMISS_KEYGUARD_METHOD_ACTIVITY 是指向的 DismissKeyguardMethodActivity

cts/tests/framework/base/windowmanager/app/src/android/server/wm/app/Components.java#40

3直接找到DismissKeyguardMethodActivity ,查看其内部的实现

cts/tests/framework/base/windowmanager/app/src/android/server/wm/app/DismissKeyguardMethodActivity.java

还有部分权限

cts/tests/framework/base/windowmanager/app/AndroidManifest.xml#299
​
public class DismissKeyguardMethodActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getSystemService(KeyguardManager.class).requestDismissKeyguard(this,

new KeyguardDismissLoggerCallback(this, DISMISS_KEYGUARD_METHOD_ACTIVITY));

}

}

将关键代码摘出来 然后单独写成APK,运行在PASS和非PASS的手机上,对比界面和log信息哪里异常。

六、CTS处理方法

6.1 正面分析方法(耗时较长)

代码正面分析有利于理解测试用例的逻辑,可以增加对业务逻辑的理解,增长自己的知识储备。

需要对比Pixel的log定位置问题。

竞品机器反编译代码对比。

6.2 二分法(适合项目紧急,新报的问题)

查看Bug上报的时间,然后选取上报时间前一个星期的版本进行测试,如果PASS 则进行二分法定位到某天提交的代码导致。

如果一个星期前FAIL,则刷取一个月前的版本测试,如果测试PASS,则用二分法继续定位到某天提交的代码导致。

定位到某天之后可以查看自己刷取包的起包时间,将时间范围缩小到最小。

如果未定位到需要正面分析。

无论是那种方法定位到的问题,都要深入分析rootcase的原因。

原文查看

<think>嗯,用户这次问的是RS485通信中RTS和CTS信号的功能和区别。这个问题其实挺专业的,涉及到串口通信的硬件流控制机制。从用户引用的资料来看,ta应该已经查阅过一些技术文档,但可能对这两个信号的实际应用场景还有困惑。 用户可能是个嵌入式工程师或者自动化领域的技术人员,正在调试RS485通信设备时遇到了流控制问题。ta的深层需求应该是想理解如何正确配置这些信号线来避免数据丢失。考虑到RS485常用于工业环境,信号稳定性对ta的工作应该很重要。 我注意到引用材料里提到一个关键点:RTS/CTS最初是为半双工调制解调器设计的协调机制,后来被"误用"为流控制标准。这个历史背景很重要,需要解释清楚。另外RS485本身是差分信号传输,和RS232的单端信号不同,但流控制机制是相通的。 在组织回答时,应该先明确基本定义,然后对比它们在RS485中的特殊应用。特别要强调半双工场景下RTS作为发送使能信号的特殊用法——这和全双工通信中的流控制功能完全不同,容易造成混淆。用户提供的第二个引用提到DTR/DSR,虽然问题没问,但可以简要提下区别,因为实际设备上这些信号可能共存。 工业现场常见的误用案例值得单独说明,比如把RTS当电源控制线的情况。最后用表格总结会很清晰,但要注意移动端的显示效果。相关问题的设计要覆盖配置实践和故障排查,这对工程师最实用。 对了,用户引用的资料年份较早,需要确认下最新标准是否有变化。查证后确认RS485的流控制规范这些年基本没变,可以放心参考。</think>在RS485通信中,RTS(Request To Send)和CTS(Clear To Send)是硬件流控制信号,主要用于协调设备间的数据传输时序,避免数据丢失。以下是具体作用及区别: --- ### **1. RTS (Request To Send)** - **作用**: 发送方通过拉高RTS信号**请求发送权限**,表示自身已准备好发送数据。 **在RS485半双工模式下**,RTS还承担**方向控制**功能: - 拉高RTS:使能发送器(禁用接收器),允许设备驱动总线发送数据。 - 拉低RTS:使能接收器(禁用发送器),释放总线控制权[^1][^2]。 - **典型场景**: 设备A需发送数据时,先拉高自身RTS信号,等待设备B的CTS响应。 --- ### **2. CTS (Clear To Send)** - **作用**: 接收方通过拉高CTS信号**授权发送**,表示自身已准备好接收数据。 发送方检测到CTS有效后,才会开始传输数据[^1][^2]。 - **典型场景**: 设备B收到A的RTS请求后,若接收缓冲区空闲,则拉高CTS;若繁忙则保持CTS无效,直到可接收数据。 --- ### **3. 核心区别** | **信号** | **发起方** | **目的** | **RS485特殊作用** | |----------|------------|-----------------------------------|-------------------------| | **RTS** | 发送端 | 请求发送权限 | 半双工方向控制 | | **CTS** | 接收端 | 授权发送,避免接收方溢出 | 无额外功能 | --- ### **4. 工作流程示例** ```mermaid sequenceDiagram participant A as 设备A(发送方) participant B as 设备B(接收方) A->>A: 拉高RTS(请求发送) A->>B: 检测CTS状态 B-->>A: 若就绪则拉高CTS A->>B: 发送数据 B-->>A: 数据接收完成后拉低CTS A->>A: 拉低RTS释放总线 ``` > **关键点**: > - **半双工方向控制**:RS485需通过RTS切换收发状态,避免总线冲突[^1]。 > - **硬件流控制意义**:CTS防止接收方缓冲区溢出,RTS避免发送方占用总线导致冲突[^2]。 > - **常见误区**: > RTS/CTS最初设计用于调制解调器协调(非流控制),后被“借用”为流控制标准[^2]。 --- ### **5. 实际应用注意事项** - **布线要求**: RTS/CTS需独立信号线(非数据线),全双工系统可能省略CTS,依赖协议层流控(如XON/XOFF)。 - **配置要点**: 半双工RS485收发器(如MAX485)的`DE`(发送使能)和`/RE`(接收使能)引脚通常直接由RTS控制。 - **典型问题**: 若未启用硬件流控或RTS方向控制配置错误,会导致数据冲突或丢失,尤其在长距离通信中。 --- **相关问题** 1. RS485半双工通信中如何正确配置RTS引脚实现方向切换? 2. 硬件流控(RTS/CTS)与软件流控(XON/XOFF)在RS485中的适用场景有何不同? 3. 当CTS信号持续无效时,应如何排查RS485通信故障? 4. RS485与RS232的RTS/CTS工作机制有何本质区别? [^1]: RTS用于发送请求和半双工方向控制,CTS用于接收授权 [^2]: RTS/CTS最初为调制解调器设计,后被扩展为流控制标准
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值