CTS FAIL(一)
首先简单介绍下CTS:全称Compatibility Test Suite,通过CTS测试,来检测android apk与android系统的兼容性。
最近公司release一版新的Image,但在新Image上跑CTS后出现了和Audio有关的测试FAIL项(testVolume),因为是第一次看CTS的问题,所以简单的整理了关于该FAIL项的解决过程,方便以后的复习。
在跑完testVolume项的CTS测试FAIL时,在命令窗口显示的错误信息如下:

根据提示的信息,定位到该测试项对应的AudioManagerTest.java文件的第335行。为了方便分析,如下code是AudioManagerTest.java文件中testVolume函数的部分代码,其中红色HIghline的就是FAIL项提示的第335行。
public void testVolume() throws Exception {
int[] streams = { AudioManager.STREAM_ALARM,
AudioManager.STREAM_MUSIC,
AudioManager.STREAM_VOICE_CALL,
AudioManager.STREAM_RING };
mAudioManager.adjustVolume(ADJUST_RAISE, 0);
mAudioManager.adjustSuggestedStreamVolume(
ADJUST_LOWER, USE_DEFAULT_STREAM_TYPE, 0);
int maxMusicVolume = mAudioManager.getStreamMaxVolume(STREAM_MUSIC);
for (int i = 0; i < streams.length; i++) {
// set ringer mode to back normal to not interfere with volume tests
mAudioManager.setRingerMode(RINGER_MODE_NORMAL);
int maxVolume = mAudioManager.getStreamMaxVolume(streams[i]);
mAudioManager.setStreamVolume(streams[i], 1, 0);
if (mUseFixedVolume) {
assertEquals(maxVolume, mAudioManager.getStreamVolume(streams[i]));
continue;
}
assertEquals(1, mAudioManager.getStreamVolume(streams[i]));
... ...
}
}
根据maxVolume = mAudioManager.getStreamMaxVolume(stream[i]),可以知道maxVolume是用来记录stream[i]的MAX_STREAM_VOLUME,这个值可以在AudioService.java中获得。当for循环中的i = 0时,stream[i] = AudioManager.STREAM_ALARM。而STREAM_ALARM的MAX_STREAM_VOLUME为7,即maxVolume = 7。
mAudioManager.getStreamVolume(stream[i])的值可以通过Souce Insight追到AudioService.java文件中,且值为(mIndex + 5)/10。因为CTS测试都是在系统恢复出厂设置后测试的,所以此处的mIndex应该对应于stream[i]的默认音量。音频流的默认音量可以在AudioManager.java中得到。STREAM_ALARM的默认音量为5,带入到(mIndex + 5)/10可以求得mAudioManager.getStreamVolume(stream[i]) = 1。
正是由于maxVolume和mAudioManager.getStreamVolume(stream[i]) 这两个值不等,所以会提示有AssertionFailedError:expected:<7>but was:<1>的错误。这说明CTS测试已经进入if(mUseFixedVolume)语句中,但是搜索配置文件config.xml发现config_useFixedVolume = false,这与测试结果正好相反。这里就有疑惑为什们这边的mUseFixedVolume与配置文件中的值不一样呢?当前mUseFixedVolume的值又是什么呢?为了解决这个疑惑,将CTS测试用例apk反编译得到
this.mUseFixedVolume = this.mContext.getResources().getBoolean();
进入out/target/common/obj/APPS/framework-res_intermediates/public_source.xml中发现编译结束后config_useFixedVolume对应的ID却为0x01110057,转化为十进制的值为17891415。原来mUseFixedVolume得到的值是配置文件中ID为17891414的值,查询该值大小为true,满足CTS结果。
解决办法:将config_useFixedVolume在config.xml中向前移动一位,以满足编译结果ID为17891414。修改后,测试PASS。
CTS FAIL(一)的更多相关文章
- CTS/GTS 常见问题解答
1.android.security.cts.PackageSignatureTest测试fail(MTK平台) 原因:由于用的是google default key而导致的fail,需要自己定义re ...
- Android CTS 结果 testResult.xml 修改 fail 项 为 notExecuted 项 分析
这两天一直在搞 Android 4.1 CTS ,每次完整跑完一遍后总有几百项 failed,用编辑器手动改为 notExecuted 项后重新跑,有很多项第二次都跑过了. 但是发现直接修改也带来很多 ...
- Android CTS測试Fail项改动总结(四)
Android5.1上的測试 1.android.security.cts.SELinuxDomainTest# testInitDomain fail 打印的log junit.framework. ...
- Android CTS - Cannot run program "aapt"/ Fail to run aapt on .../apk installed but AaptParser failed
今天同事碰到cts的一些问题,跑到某个apk的时候,就提示如下错误: Cannot run program "aapt": error=2. No such file or dir ...
- Android 4.0.3 CTS 测试
Android-CTS 4.0.3测试基本配置 1. Download CTS CTS的获取方式有两种: 1.1.由Google提供 1.1.1.打开浏览器输入连接: http://source.an ...
- android 兼容性测试 CTS 测试过程(实践测试验证通过)
source: http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明 ...
- 如何debug android cts
启动和关闭ADB服务(adb start-server和adbkill-server) 经作者测试,模拟器在运行一段时间后,adb服务有可能(在Windows进程中可以找到这个服务,该服务用来为模拟器 ...
- 【转】CTS tests 4.2_r4
原文网址:http://www.xuebuyuan.com/1722006.html Precondition: 1.Get android sdk 2.Set adb to environment ...
- 【转】android cts failed items
原文网址:http://blog.csdn.net/linsa0517/article/details/19031479 Fail的一些修改 1.直接设置问题 estUnknownSourcesO ...
随机推荐
- PHP开发者常犯的10个MySQL错误
原文出处: kaiyuanba 欢迎分享原创到伯乐头条 数据库是WEB大多数应用开发的基础.如果你是用PHP,那么大多数据库用的是MYSQL也是LAMP架构的重要部分. PHP看起来很简单,一个初 ...
- C#ShowCursor光标的显示与隐藏
使用using System.Runtime.InteropServices; [DllImport("user32.dll" , EntryPoint = "Sho ...
- Check if KeyValuePair exists with LINQ's FirstOrDefault
http://stackoverflow.com/questions/793897/check-if-keyvaluepair-exists-with-linqs-firstordefault 问题: ...
- 沉浸式学 Git
沉浸式学 Git cover — contents — about 目录 设置 再谈设置 创建项目 检查状态 做更改 暂存更改 暂存与提交 提交更改 更改而非文件 历史 别名 获得旧版本 给版本打标签 ...
- poj 3264 Balanced Lineup (RMQ算法 模板题)
RMQ支持操作: Query(L, R): 计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...
- bzoj2878
又是环套树dp,这次不是我擅长的类型 首先考虑树上的暴力,肯定是穷举起点然后以起点为根dp 我们用g[i]表示以点i为期望走的路径总长,答案就是1/n*Σ(g[i]/d[i]) (d[i]表示点度数) ...
- UVa 1152 4 Values whose Sum is 0
题意:给出n,四个集合a,b,c,d每个集合分别有n个数,分别从a,b,c,d中选取一个数相加,问使得a+b+c+d=0的选法有多少种 看的紫书,先试着用hash写了一下, 是用hash[]记录下来a ...
- GCC 编译优化指南
转自: http://www.jinbuguo.com/linux/optimize_guide.html GCC 编译优化指南 作者:金步国[www.jinbuguo.com] 版权声明 本文作者是 ...
- 在PC上收发短信--Pidgin短信(Linux Pidgin插件)
Pidgin短信是Pidgin/empathy的一个插件.当手机收到短信进,电脑上面有提示:可以在电脑上发手机短信.让你时刻保持在电脑屏幕上,也不会错过短信.目前只支持安卓,wifi连接方式. 功能 ...
- Source Insight中文乱码
搜索都是c++的代码,本来想下一个Vc,想了下,决定下个eclipse for C++,anyway,n次n久时间下载失败后,我接受了推荐,先下了个Source Insight来看代码.然后问题就出现 ...