Android P环境下运行CTS失败,求助排查AssertionError问题
Android P CTS执行AssertionError排查方案
你遇到的这个错误是CTS在测试准备阶段触发的断言失败,核心原因是Instrumentation测试初始化时返回了未明确的Binder调用异常。下面是几个实用的排查步骤,你可以逐一尝试:
1. 先确认基础环境和命令正确性
- 首先检查你的CTS启动命令:你输入的
./android-cts/tools/cts-tradefed cts-tf > run cts存在语法问题,正确的启动命令应该是:
先修正命令重新执行,排除命令输入错误导致的异常。./android-cts/tools/cts-tradefed run cts - 验证设备状态:确保设备已经开启开发者模式、USB调试,并且解锁了Bootloader和OEM解锁;同时重启设备和CTS主机,清除临时的资源占用冲突。
- 确认CTS包完整性:你使用的是
android-cts-9.0_r10,版本匹配Android P,但如果包下载过程中损坏也会出问题,建议重新校验MD5或者重新下载完整包。
2. 深入分析日志文件
日志已经自动保存了三个关键文件到/home/sam/Downloads/android-cts-9.0_r10-linux_x86-arm/android-cts/logs/2020.02.19_15.21.35/inv_1420379781159145465/目录:
- 优先解压查看
device_logcat_test_*.txt.gz:搜索Binder.execTransact相关上下文,大概率能找到更具体的错误细节——比如SELinux权限拒绝(avc: denied)、系统服务崩溃、权限不足等,这些都是Android P上Binder调用失败的常见原因。 - 同时查看
host_log_*.txt.gz,确认CTS主机端是否有资源调用失败的提示。
3. 手动测试Instrumentation初始化
错误发生在ApkInstrumentationPreparer.instrument阶段,说明CTS无法正常启动测试的Instrumentation。你可以手动尝试运行单个测试的Instrumentation来复现问题:
adb shell am instrument -w [CTS测试包名]/android.support.test.runner.AndroidJUnitRunner
替换命令里的[CTS测试包名]为日志中对应的测试包(比如从InstrumentationTest.java关联的包),执行后能获取更直接的报错信息,定位具体是哪个测试或服务出了问题。
4. 排查定制ROM的系统修改
如果你的设备是定制ROM,很可能是系统层面的修改导致Binder调用异常:
- 检查是否禁用了某些系统核心服务,或者修改了权限策略(比如SELinux规则);
- 对比原生Android P的系统行为,确认是否有定制化限制影响了CTS的Instrumentation调用。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

