CTS/GTS问题分析7 | weiinter105

以前没有完整记录过cts框架造成的问题,以这个问题记录分析方法

问题初探

测试命令: run cts-on-gsi -m CtsMediaTestCases

在host log中报错如下;


 

在device log中报错:

 

其实看到这里很明显就可以看出是google的问题了,不是case问题就是框架的问题,如果着急的时候可以直接反馈,无需走到我这里来判断

问题分析

如果确定是case问题还是框架问题呢,首先将v3和v4的CtsMediaTestCases.apk这个测试apk都拉出来反编译即可,必要时借助010-Editor改一下魔数头,首先将apk反编成jar包,先了解case中出错位置大致逻辑

对比了下case这里没有修改,那么就是框架问题了。这里出错的逻辑在AndroidJUnitRunner.java中,没有源码,否则这个问题就非常好办了;没有源码我们只能通过smali来加log,有点麻烦;先将出错栈理出来

 

发现最关键的一步没有反编出来,只有字节码,无法很方便的判断,只能结合smali来梳理逻辑了

 

validatePackage报错,根据堆栈,得到的packagename是"android.media.cts.DecoderTest#testH265HDR10StaticMetadata "

那么为什么会报这个呢,在validatePackage中通过smali给没有源码的地方加log,发现只有报错时会有加的log,说明只有报错时才会执行validatePackage,这个信息很关键

在parseFromFile中搜索validatePackage发现只有一处调用,梳理逻辑,以下是关键信息

 

换句话说调用isClassOrMethod返回false导致的问题

 

"android.media.cts.DecoderTest#testH265HDR10StaticMetadata "没有通过正则表达式,进入了validatePackage逻辑,自然报错

那么这个"android.media.cts.DecoderTest#testH265HDR10StaticMetadata "是在哪赋值的呢,在框架中vts-tradefed.jar

见vts-tradefed.jar,其中的cts-on-gsi-exclude.xml,果然多了一个空格

问题修复与验证

https://partnerissuetracker.corp.google.com/u/1/issues/116722365

https://android-review.googlesource.com/c/platform/test/vts/+/773225

发现带以上change编包,放到9.0R4的tools文件夹里替换,居然不可用,google这里经常有这种问题,其框架工具不知道用哪个版本编的,这个也是可以与google沟通的一个点 Constance Wu 吴晓丹

当然我们可以本地解,让编出来的vts-tradefed.jar可用,但是幸运的是这里不需要这么麻烦,因为我们解析的是从excludes.txt里面解析出的错误结果

我们新建两个文件includes1.txt (同includes.txt), excludes1.txt (将excludes.txt中多余空格去掉)

然后

 

case正常运行,说明change绝对可以生效

总结

google的case放出来绝对没有测试啊;而且虽然是框架问题,其实逻辑还在case里面

作者: RESSRC

个人资源站

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据