一、基础篇

1. CTS

       CTS(全称“Compatibility Test Suite”,即“兼容性测试包”)的认证,这是一组用以测试的.apk程序之类的集合,它能够在官网(http://source.android.com/compatibility/downloads.html)上面免费下载,并且测试也非常简单——只是结果非常苛刻。

      CTS的目的就是让Android设备(如:手机)开发商能够开发出兼容性更好的Android设备。

2. GMS

   GMS全称为Google Mobile Service,即谷歌移动服务。GMS是Google开发并推动Android的动力,也是Android系统的灵魂所在。    GMS目前提供有Search、Search by Voice、Gmail、Contact Sync、Calendar Sync、Talk、Maps、Street View、YouTube、Android Market(ICS上更改为Play store)服务。当用户使用谷歌服务的时候,谷歌可以把广告嵌入各种谷歌的服务中,比如:用户在使用谷歌地图的时候,就能发现搜索地名关键字的广告。在使用谷歌移动搜索的时候,不用说,当然也是有广告的。谷歌其实是拿用户的注意力来换取广告主的金钱。而且Android智能手机操作系统其实也就是谷歌把自己的服务主动放到了手机上,进一步巩固自己的市场地位。   依据GMS,谷歌对android手机给予不同程度的授权,把搭载Android系统的手机厂商分为三个级别,   1.免费使用Android操作系统,但不内嵌GMS;   2.内嵌部分GMS服务,但手机不能打上谷歌的商标;

  3.内嵌所有的GMS服务,也可以使用谷歌商标。如果在android手机中内置有谷歌GMS服务的话,是等同被谷歌官方认证过的产品。 

       GMS的认证主要是Google为手机厂商进行认证,所以得到认证的主要厂商如下,而与芯片厂商关系不大。目前在市面上,只有少数的手机厂商通过了GMS认证,比如HTC(宏达国际电子)- 中国台湾

  Samsung Electronics(三星电子)- 韩国   Motorola Mobility(摩托罗拉移动技术)- 美国   Sony Ericsson(索尼爱立信)- 英国   LG Electronics(LG电子)- 韩国   Lumigon (丹麦陆力更手机公司)- 丹麦   ARCHOS(爱可视)- 法国   TOSHIBA(东芝)- 日本   GMS认证并不是想象的那么容易,谷歌要根据厂商的实力和地区因素来考虑是否认证。对于厂商来说,GMS除了获得更多的谷歌服务权限之外,还是拉开品牌区隔度的有效手段,也就是身份证明。由此可见从一个厂商是否通过GMS认证,来简单的判断这个厂商的综合能力。

二、测试篇

      一)基于Android 2.3 CTS测试修改测试结果和调试方法


1.     CTS 测试     用 USB 连接开发板和办公电脑,就可以开始进行 cts 测试了。
测试步骤如下:
1)进入 cts 目录,启动 cts。
localhost bin # pwd
/work/android_src/out/host/linux-x86/bin (cts 可执行程序放在 android 源代码/work/android_src 中的/out/host/linux-x86/bin 路径下。)
localhost bin # ./cts   (启动 cts)
启动开发板会在屏幕上显示下面信息。
Android CTS version 2.2_r1
Device(0123456789ABCDEF) connected (开发板已经连接,说明 USB 已经连接好,可以进行 CTS 测试了)
cts_host > start --plan VM              (启动 cts 的 VM 测试计划)
start test plan VM
==============================================================
Test package: android.core.vm-tests
dot.junit.opcodes.add_double_2addr.JUnit_Test_add_double_2addr#testB1....(pass)
dot.junit.opcodes.add_double_2addr.JUnit_Test_add_double_2addr#testB2...(pass)
dot.junit.opcodes.add_double_2addr.JUnit_Test_add_double_2addr#testB3....(pass)
........................(略)
如果以前跑过 VM 测试,或由于某种原因导致 VM 测试暂停,在下次 cts 测试,会显示如下信息:
localhost bin # ./cts
Android CTS version 2.2_r1
Device(0123456789ABCDEF) connected
cts_host > start --plan VM
cts_host > There are 1 existing session(s) for plan VM.
Create a new session or choose an existing one?
(表示对 VM 重新进行测试)
  Create a new session [0]
(表示从上次中断的地方开始继续进行测试)
  Choose a session [1]
(输入 1,从上次中断处继续进行测试)
(VM 如果重新测试过两次及以上,会出现下面的信息,session 值越小,表示上次测试时间离目前时间越远)
Please choose a session from the existed session(s):
  1 [0]
  7 [1]
 (从最早一次开始进行测试)
0
resume test plan VM (session id = 1)
==============================================================
Test package: android.core.vm-tests
dot.junit.opcodes.add_float_2addr.JUnit_Test_add_float_2addr#testN5...(pass)
........................(略)
测试中存在着很多意想不到的情况,会导致 cts 测试中断,可见 cts 功能做得很贴心。上面这点一定要知道,因为它非常重要。
2)测试时注意事项:
    如果测试中出现板子跑死了,需要重新开始测试,只需要把板子重新启动,千万不要通过 Ctrl+C 的方式把正在运行的 cts 中断掉,因为在享受(Ctrl+C)带来快感的
同时,很有可能会导致测试结果毁于一旦。这一点非常重要,我在测试 VM 的时候,就多次遇到这种问题,导致测试进度缓慢,一天也没有把 VM 测试完。
(注:这一点也并不是每次必现的,在测试 Java 部分的时候,一次失败都没有遇到 ,但在测试 VM 的时候却多次出现,搞的我真的很郁闷,看来,以后只能多攒点 RP 了 。
通过(Ctrl+C)中断测试真的很爽,如果测试进度要求很紧的话,还是不用为妙,按板子的 reset 键,对于 cts 测试来说,更迅速点,可以一键搞定问题。)
4.    修改 CTS 测试结果(仅限特殊情况下使用)
    CTS 测试完成,会生成测试报告,存放在下面路径下:
/work/android_src/out/host/linux-x86/cts/android-cts/repository/results
(/work/android_src 是本人电脑上 android 源代码的存放路径)
以一个 CTS 测试结果为例,生成的目录结构如下:
├── 2010.10.19_10.39.00
│ ├── cts_result.css
│ ├── cts_result.xsl
│ ├── logo.gif
│ ├── newrule-green.png
│ └── testResult.xml
├── 2010.10.19_10.39.00.zip
    CTS 测试结果会生成一个按照测试时间命名的 2010.10.19_10.39.00.zip .zip 压缩包,和一个同名的文件夹。可以进入测试结果文件夹中用浏览器打开 testResult.xml 文件,就可以看到 CTS 的测试结果。(注意,测试结果中的 5 个文件一个都不能少,不然用浏览器打不开。)
    CTS 默认情况测试时会把所有的测试选项全部测试一遍,但有时,有些功能由于板子不支持,不需要进行测试,就可以通过下面介绍的方法修改 cts 的测试结果。千
万不要为了有个好看的测试结果而使用 !    以下面这个测试结果为例,介绍下如何把测试结果修改为“notExecuted”。修改之前,一定要记得把需要修改的测试结果备份一下,以防意外。
4.1 把测试结果中的“pass”修改为“notExecuted”
     用 gedit 打开 testResult.xml 文件,通过“Ctrl+F”键查找到需要修改的测试选项testGetDefault,查找结果如下图所示。
修改方法:
把 result="pass"修改为 result="notExecuted"即可。
4.2 把测试结果中的“fail”修改为“notExecuted”
     通过查找,fail 的结果如下图所示。从测试结果可以看到之间的内容为测试失败的堆栈调用顺序,这对于定位故障有很好的参考作用。
修改方法:
1)把测试结果中的 result="pass"修改为 result="notExecuted"。
2)删除的所有内容。
修改后的结果如下:
4.3 修改测试结果的 Summary
    用浏览器打开的测试报告,最上面会有个 TestSummary 一栏,修改了测试报告结果之后,还需要把 Tests Passed、Tests Failed、Tests Timed out、Tests Not Executed 值修改正确,也就是简单的算术加减法,同样在 testResult.xml 文件中修改。
下面是修改之前的 Test Summary。
要把它修改为下面的结果。
修改方法:
查找“Summary”,找到测试结果。把修改上面的内容即可,修改结果如下:
4.4 检验修改是否正确
    用浏览器打开 testResult.xml 文件,如果浏览器打开时有报错,说明有的地方修改不正确了,可以根据错误提示修改过来。
5.     测试单个测试包或用例
     CTS 允许测试单个 package 或 test,这对于重新测试那些没有通过的项目省下了很多时间。以下面的测试结果为例,介绍下测试命令。
5.1 测试单个 packet
上图中 testSendMessages 测试项没有通过,可以把它所在的 package android.telephony.gsm.cts.SmsManagerTest 重新测试一下。测试命令如下。
cts_host > start --plan Java -p android.telephony.gsm.cts.SmsManagerTest
(注:--plan 表示这个 Packet 所在的测试计划,-p 表示所要测试的 packet)
5.2 测试单个 test
如果觉得测试 packet 测试项目太多,也可以对单个测试失败的 testSendMessages 进行测试。测试命令如下。
cts_host > start --plan Java -t android.telephony.gsm.cts.SmsManagerTest#testSendMessages
(注:--plan 表示 test 所在的测试计划,-t 表示具体的 test,android.telephony.gsm.cts.SmsManagerTest#testSendMessages 是由两部分组成,测试的packet 和测试的 test,他们通过#分割开。)
    不管是 packet 测试还是 test 测试,一定要建立一个新的 session,因为新 session中的测试项目都是“NotExecuted”,不然由于之前存在的 session 中的测试包或测试项目可能已经测试过,CTS 就不会再重新进行测试。
6.   总结
    Android 希望建立一个开放性的平台,可以让开发者在这个平台上面开发出具有创新性的移动应用软件,为了保证这些软件可以运行在各种终端设备上,Android 兼容性项目定义了 Android 平台的各种技术细节,并提供了测试工具 CTS。CTS 具有多达 2 万多个的测试用例,可以测试 Android 的各个方面。因此,如果一款应用软件可以通过 CTS 测试,说明它具有相当好的兼容性,按照 Android 官方的说法,这款软件就可以在 Android market 上发布了。希望大家都能够用好这款测试工具。
cts_host > start --plan Performance
start test plan Performance
==============================================================
Test package: android.performance2
android.performance2.cts.AppStartup#testStartup..............................................(timeout)
==============================================================
CTS_INFO >>> Max ADB operations reached. Restarting ADB...
CTS_INFO >>> Restarting device ...
CTS_INFO >>> Restart complete.
==============================================================
Test package: android.performance3
android.performance3.cts.AppStartup#testStartup.......(pass)
CTS_INFO >>> Max ADB operations reached. Restarting ADB...
CTS_INFO >>> Restarting device ...
CTS_INFO >>> Restart complete.
==============================================================
Test package: android.performance4
android.performance4.cts.AppStartup#testStartup......(pass)
CTS_INFO >>> Max ADB operations reached. Restarting ADB...
CTS_INFO >>> Restarting device ...
CTS_INFO >>> Restart complete.
==============================================================
Test package: android.performance5
android.performance5.cts.AppStartup#testStartup...(fail)
Unable to find instrumentation target package: com.android.alarmclock
CTS_INFO >>> Max ADB operations reached. Restarting ADB...
CTS_INFO >>> Restarting device ...
CTS_INFO >>> Restart complete.
==============================================================
Test package: android.performance
android.performance.cts.MultiAppStartupTest#testMultipleApps....(fail)
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.alarmclock/com.android.alarmclock.AlarmClock}; have you declared this activity in your AndroidManifest.xml? at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
at android.app.ContextImpl.startActivity(ContextImpl.java:622)
at android.performance.cts.MultiAppStartupTest.launchActivity(MultiAppStartupTest.java:52)
                (部分略去)
Test summary:   pass=2   fail=2   timeOut=1   notExecuted=0   Total=5


Time: 599.253s


2)CTS测试步骤 

前言:CTS2.3测试方法几乎和CTS2.2相同,只有平台准备工作有差别。目前CTS2.3最新版本是r9,可以从android官网上下载。

第一:平台准备工作

第二:新建CTS测试任务

第三:继续以前未完成的CTS测试任务

第四:关于CTS测试报告

第五:逐个对Fail的测试项进行测试

第六:批量测试Fail和Timeout case

第七:注意事项 


第一部分:平台准备工作

1.进入settings->Privacy->Factorydata reset,对平台进行reset一次(如果是自己的设备,就不要reset了,否则蛋疼……)
2.平台安装CtsDelegatingAccessibilityService.apk、CtsDeviceAdmin.apk 和 CtsPerformanceTestCases.apk。 (这3个apk都可以在cts测试包 repository/testcases文件夹中找到)
3.进入settings->Wireless& networks,连接AP (AP需要连外网,最好链接VPN),打开Bluetooth、GPS(如果有的话)
4.进入settings->display->screentimeout,设为never timeout,如果没有这个选项,则设为30 minutes
5.进入settings->display,勾选auto-rotatescreen
6.进入Settings -> Location & security -> Select device administrators,勾选所有选项(android.deviceadmin.cts.*)
7.进入settings->applications, 不要勾选Unknown sources选项
8.进入settings->applications->development,勾选USBdebugging, stay awake和allow mock locations三项
9.进入settings->accessibility,勾选accessibility和CtsDelegatingAccessibilityService两项
10.进入settings->language& keyboard->select lanuage,设为English(United States)
11.平台插入一张TF卡(最好是空卡)
12.平台接电源(手机一般通过USB充电,没有外接电源。Pad有外接电源)


第二部分:新建CTS测试任务(每次输入后加回车)

1.平台用USB线连接LinuxPC(连通后平台左上方会显示usb和debug icon)
2.打开终端
3.输入sudosu -
      输入root密码
4.输入cd ../..
      输入 cd/home/linux/cts/android-cts-2.3_r9-x86/android-cts/tools  (这个路径只是例子,各位需要输入实际路径)
      输入 ./startcts
      终端显示   Android CTS version 2.3_r9  
           Device(HT9CVP823190) connected  (如果没有这行,说明设备没有和PC联通)
           cts_host >          
5.输入start --plan CTS
      终端显示  There are 2 existing session(s) for plan CTS.
           Create a new session or choose anexisting one?
                 Create a new session [0]   (建立一个新测试任务)
                 Choose a session       [1]  (选择以前没有完成的测试任务)
6.输入数字 "0",开始CTS测试

第三部分:继续以前未完成的CTS测试任务(每次输入后加回车)

1.平台用USB线连接LinuxPC(连通后平台左上方会显示usb和debug icon)
2.打开终端
3.输入sudosu -
      输入root密码
4.输入cd ../..
      输入 cd/home/linux/cts/android-cts-2.3_r9-x86/android-cts/tools
      输入 ./startcts
      终端显示   Android CTS version 2.3_r9           Device(HT9CVP823190) connected    (如果没有这行,说明设备没有和PC联通)
           cts_host >
5.输入ls -r
      终端显示
   List of all results:                                                                                
   Session   Test result   Pass      Fail      Timeout    Omitted    NotExecuted   Start time                           End time                     Test plan name
        1                                851       10          0           0             12713              2011.05.17 16:24:06         2011.05.17 16:23:49      CTS
        3                                8584     47          1           0             4942                2011.05.19 15:03:25         2011.05.19 15:03:08      CTS

   (根据start time和Endtime时间,确定你要的任务的session编号)
6.输入start --plan CTS
      终端显示  There are 2 existing session(s) for plan CTS.
           Create a new session or choose anexisting one?
                 Create a new session [0]   (建立一个新测试任务)
                 Choose a session       [1]   (选择以前没有完成的测试任务)
7.输入数字 "1"
      终端显示  Please choose a session from the existedsession(s):
           1 [0] 
           3 [1]
   (左边的数字是session的编号,右边方括号内的数字是session对应的选择用的数字)
8.例如,我们选择session 3
      输入数字 "1"
      终端显示 resume test plan CTS(session id = 3)
         ==============================================================
          ……

   (此时CTS程序开始测试session3未完成的测试)

第四部分:关于CTS测试报告

1.CTS测试报告是自动生成一个xml报表,并自动填写的,不需要测试人员干预
2.当一个CTS测试任务开始时,会在android-cts-2.3_r9-x86/android-cts/repository/results中,为这个任务建立一个存放测试报告的文件夹和压缩包,文件名以任务开始的日期和时间命名。
   例如:2011.05.12_13.00.03,2011.05.12_13.00.03.zip
3.CTS测试任务完成后,打开这个文件夹中的testResult.xml(用firefox或IE浏览器打开),查看报表是否完全。
4.确认报表后,将整个文件夹复制出来,然后压缩后发给相关人员

第五部分:逐个对Fail的测试项进行测试(根据经验,有些Fail case测试第二遍会Pass)

1.前提条件是要保留之前的CTS测试报告文件夹,如果没有则无法重新测试
2.平台用USB线连接LinuxPC    (连通后平台左上方会显示usb和debugicon)
3.打开终端
4.输入sudosu -
      输入root密码
5.输入cd ../..
      输入 cd/home/linux/cts/android-cts-2.3_r9-x86/android-cts/tools
      输入 ./startcts
      终端显示   Android CTS version 2.3_r9
           Device(HT9CVP823190) connected    (如果没有这行,说明设备没有和PC联通)
           cts_host >
6.输入ls -r
      终端显示
   List of all results:
   Session    Test result   Pass      Fail      Timeout    Omitted    NotExecuted   Start time                           End time                     Test plan name
        1                                851       10          0           0             12713              2011.05.17 16:24:06         2011.05.17 16:23:49      CTS
        3                                8584     47          1           0             4942                2011.05.19 15:03:25         2011.05.19 15:03:08      CTS
   (根据start time和Endtime时间,确定你要的任务的session编号)
7.输入ls-r fail -s #     (#表示 session编号,列出这个session中fail的项目)
      终端显示  Result of session 3
          Result        Case name
         ==============================================================
          fail             android.accessibilityservice.cts.AccessibilityEndToEndTest#testTypeViewSelectedAccessibilityEvent
          fail             android.accessibilityservice.cts.AccessibilityEndToEndTest#testTypeViewClickedAccessibilityEvent
          fail             android.accessibilityservice.cts.AccessibilityEndToEndTest#testTypeViewLongClickedAccessibilityEvent
          ……
8.start --plan CTS -t XXXX#YYYY(XXXX#YYYY是指 Casename)
      例如: start --plan CTS -tandroid.accessibilityservice.cts.AccessibilityEndToEndTest#testTypeViewSelectedAccessibilityEvent
      终端显示  Please choose a session from the existedsession(s):
            1 [0]
            3 [1]
9.输入数字"1",开始测试这个项目
10.测试完成后,可以接着测试下一项,直到全部完成。CTS会自动在测试报表中,将新的测试结果替换以前的测试结果。

第六部分:批量测试Fail和Timeout case (警告:这操作是为了方便测试,决不能用此方法篡改测试结果去欺骗他人)

说明:有时测试后产生上百个甚至更多的Fail和Timeout case,一个个测试需要很多时间,而且Timeout case无法用第五部分的方法测试。但是,CTS会自动测试未测试的Case,就是"notExecuted case"。我们可以利用这一点,将测试结果中的Fail和Timeout case的状态改成"notExecuted",启动CTS选择"Choose a session",自动批量测试这些Case。
1.这个操作会修改测试报告的数据,所以之前一定要备份之前的CTS测试报告文件夹
2.打开终端(用鼠标在窗口操作更方便)
3.进入home/linux/cts/android-cts-2.3_r9-x86/android-cts/repositoy/results。在results文件夹内,按测试时间找到你要的测试结果文件夹,负责到桌面
4.在桌面进入这个文件夹,右击testresult.xml,选择open with-> text editor,以文本方式打开文件
5. 在打开后的testresult.xml文本文件中,点击search->replace,寻找所有的 "result="timeout" 和 "result="fail" 位置,并替换成 result="notExecuted"
    例如:修改前
   
   
   
     修改后
     
   
   
    修改后先保存结果。如果对修改结果有怀疑,可以不保存并退出,再次打开修改。
6.修改Case状态后,还要修改测试报告的统计数据   
     
   将failed和timeout归零,notExeuted数据等于修改过的fail和timeout总数
   修改后先保存结果。
7.将修改后的"testresult.xml"连同另外4个文件替换掉android-cts-2.3_r9-x86/android-cts/repositoy/results中的文件。另外,原/repositoy/results文件夹和文件都有权限设置,所以在替换文件前,打开终端登录root帐号,用chmod命令修改权限。(具体操作在此不再描述)
8.打开终端
9.输入sudo su -
      输入root密码
10.输入cd ../..
      输入 cd/home/linux/cts/android-cts-2.3_r9-x86/android-cts/tools
      输入 ./startcts
      终端显示   Android CTS version 2.3_r9           Device(HT9CVP823190) connected    (如果没有这行,说明设备没有和PC联通)
           cts_host >
11.输入ls -r
      终端显示
   List of all results:                                                                               
   Session   Test result   Pass      Fail      Timeout    Omitted    NotExecuted   Start time                           End time                     Test plan name
        1                                851       10          0           0             12713              2011.05.17 16:24:06         2011.05.17 16:23:49      CTS
        3                                8584     47          1           0             4942                2011.05.19 15:03:25         2011.05.19 15:03:08      CTS
   (根据start time和Endtime时间,确定你要的任务的session编号)
12.输入start --plan CTS
      终端显示  There are 2 existing session(s) for plan CTS.
           Create a new session or choose anexisting one?
                 Create a new session [0]   (建立一个新测试任务)
                 Choose a session       [1]   (选择以前没有完成的测试任务)
13.输入数字 "1"
      终端显示  Please choose a session from the existedsession(s):
           1 [0] 
           3 [1]
   (左边的数字是session的编号,右边方括号内的数字是session对应的选择用的数字)
14.例如,我们选择session 3
      输入数字 "1"
      终端显示 resume test plan CTS(session id = 3)
         ==============================================================

          ……

   (此时CTS程序开始测试session3 notExecuted的Case)

第七部分:注意事项:

1.CTS要求测试平台的硬件和Android内置APK功能完好
2.CTS每次执行start –plan CTS时,CTS会搜索android-cts-2.2_r4-x86/android-cts/repository/results中的历史报表文件夹。如果文件有很多,启动速度会非常慢。所以,请定期清理results文件夹中的历史报表(直接删除报表文件夹即可)
关于CTS中android.permission.cts.DebuggableTest# testNoDebuggable Fail
这个一般只是出错的应用的AndroidManifest.xml中有个字段值不对。
Android:debuggable
Whether or not the application can be debugged, even when running on a device in user mode — "true" if it can be, and "false" if not. The default value is "false".

Fail的一些修改:


1、直接设置问题

estUnknownSourcesOffByDefault

fail

junit.framework.AssertionFailedError: Deviceshould not ship with 'Unknown Sources' enabled by default.expected:<0> butwas:<1> atandroid.provider.cts.Settings_SecureTest.testUnknownSourcesOffByDefault(Settings_SecureTest.java:183)
这种fail最好解决,直接按照字面理解就OK,UnKnownSource没有点掉。

2、permission
-- testSensorFeatures

fail

junit.framework.AssertionFailedError:PackageManager#hasSystemFeature(android.hardware.sensor.accelerometer)returns true but SensorManager#getSensorList(1) shows sensors []expected: butwas: atandroid.app.cts.SystemFeaturesTest.assertFeatureForSensor(SystemFeaturesTest.java:300)

一般情况修改 - > frameworks/base/data/etc/*.xml 文件,例如
android.hardware.camera.xml,platform.xml等文件,这边的文件定义了设备具有的一些权限。

3、由测试而引起的非测试项出错
-- testRecordingHint

fail

java.lang.RuntimeException: start failed. atandroid.media.MediaRecorder.start(Native Method)

这种情况要根据Logcat去查看RuntimeException的具体错误。通常可以先不改,因为很难查错。

4、网络问题
-- test_isReachable

fail

java.net.UnknownHostException: Unable to resolvehost "www.google.com": No address associated with hostname atjava.net.InetAddress.lookupHostByName(InetAddress.java:426)

这类问题是由于国内的网络无法访问国外网站导致的,最好的办法就在公司搭建一个VPN,链接出去。

5、系统文件权限
-- testAllFilesInSysAreNotWritable

fail

junit.framework.AssertionFailedError: Foundwritable:

[/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_power,/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_en_file,/sys/devices/platform/malata_ts.0/tsclass/tsclass0/ts_Calibrate] atandroid.permission.cts.FileSystemPermissionTest.
testAllFilesInSysAreNotWritable(FileSystemPermissionTest.java:364)

-- testNoSetuidTcpdump

fail

junit.framework.AssertionFailedError at
android.security.cts.BannedFilesTest.
assertNotSetugid(BannedFilesTest.java:59)
这些问题是系统文件权限的问题,解决方法比较土,就是全局搜索该文件,查看那些对该文件操作的脚本,然后修改即可。

上面两个fail的解决方法是:

a.   修改kernel/drivers/input/touchscreen/malata_ts.c
__ATTR(ts_power, 0777, NULL,ts_set_point),
__ATTR(ts_en_file, 0777, NULL,ts_set_point),
__ATTR(ts_ Calibrate, 0777,NULL, ts_set_point),
b.   修改system/core/include/private/android-filesystem-config.h
{ 06755, ADD_ROOT, ADD_ROOT,“system/xbin/tcpdump”}

6、这种情况最多的。
-- testFocusDistances

fail

junit.framework.ComparisonFailure:expected: butwas: at
android.hardware.cts.CameraTest.testFocusDistancesByCamera
(CameraTest.java:1386)

对于这个fail的原因是CTS对摄像头测试时,对摄像头进行参数设置,然后在读取参数后,参数出错。
这种情况要找到CameraTest源码,通常在source/cts/...下面,我们编译时没有编译到这里,仅查看代码,例如找到CameraTest.java,打开后找到1386行,行数一般情况下不会有出入,除非source下面的cts版本和下载的cts版本不一致才会找不到,找到testFocusDistancesByCamera,然后根据代码查看具体的测试,然后在找camera的源代码,使用Log跟踪,当然这个测试一定要结合做该模块的人一起改才行,不然很容易引起其他问题。

其中camera CTS测试代码在:
source/cts/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
摄像头设置的相关代码在:Source/device/Samsung/exynos4/libcamera/下面,有SecCameraHWInterface_zoom.cpp、SecCameraHWInterface_zoom.h、SecCamera_zoom.cpp、SecCamera_zoom.h
找到之后通过修改后测试再修改后再测试直到CTS PASS。

(对于摄像头,应注意是几个摄像头,不然测试可能会对两个一起测试,这样就算一个摄像头调好了,能PASS了,另外一个过不了也是FAIL的。


三、CTS Verifier 测试

一、准备

1、平台reset。
2、连接。
3、安装CtsVerifier.apk
4、Setting-->Security-->Device administrators-->enable CTS Verifier
5、将cts-usb-accessory文件copy到linux系统的PC上,虚拟机linux也可以。
6、usb线连接PC和平台。

二、测试
1、Audio Quality Verifier
 1)点击Calibrate,并按音量键调整音量,移动平台,使得音量提示:Volume OK。稳定后固定平台,并点击Done。
 2)选择Sound level check项测试。测试完成后,右边会出现测试结果:Pass或Fail。
 3)点击Run All测试全部case或选择测试某一项,但如果2)测试的结果是Fail,就必须在测试之前重复1),校准音量。
 4)点击result查看测试结果。
 5)点击Clear可以清除前面的测试结果。
 6)全部case测试完成后,如果有全部pass,点击左下角pass,否则,点解右下角fail。
2、Policy Sterilization Test
 1)根据提示点击Generate Policy。
 2)点击Apply Policy
 3)提示Reboot your device and return to this CTS Verifier test。点击OK,并手动重启平台。
 4)再次进入CTS Verifier,进入Policy Sterilization Test项,如果全部项变绿,点击左下角pass,否则,选右下角fail。
3、Screen Lock Test
 1)进入setting-->Security-->Screen lock-->Password 设置密码。
 2)点击Screen Lock Test进入测试,点击屏幕中间的灰色Force Lock图标。
 3)平台关平进入待机模式。按power键wake up,输入密码。提示成功。即可点击左下角pass。
4、Hardware/Software Feature Summary
   点解Hardware/Software Feature Summary直接进入测试,查看是否有红色感叹号,若有,点击fail,没有,选择pass。
5、USB Accessory Test
 1)平台连接PC。
 2)在linux PC上面的命令行运行脚本USB-Accessory-Test:./USB-Accessory-Test或
sh USB-Accessory-Test。
 3)若平台USB Accessory Test测试界面看到SENT MESSAGES和 RECEIVED MESSAGE两栏都有10条收发信息。即可选择左下角pass,否则选fail。
6、Bluetooth Test
7、Data Backup Test
    点击Data Backup Test进入备份测试,点击Generate Test Data跳出提示,1.确定setting里面Backup & reset中backup被勾选。
8、SUID File Scanner
   点击SUID File Scanner,跳出提示,点击ok开始扫描测试。测试完成后,如果提示:No unauthorized suid file detected!点击OK。并选择点击左下角Pass。
9、Accelerometer Test
    点击Accelerometer Test进入测试,旋转平台到各个方向,看三角形角尖是否一直朝下,且不出现抖动,偏移等现象。如果有角尖不指向下方,或出现抖动,偏移角度等现象,均选择右下角fail。
10、Streaming Video Quality Verifier
进入测试后有三项测试。分别点击三个在线视频,查看是否播放画面流畅,声音清晰,若出现打盹,卡,音画不同步,等异常现象,即fail。三项测试完成后,全部pass,则选择左下角pass,否则fail。

三、测试报告
测试全部测试完成后,按下menu键,会出现提示栏,选择最有测export按钮导出测试报告,点击Turn on USB storage,即可在PC上看到ctsVerifierReports文件夹,测试报告就保存在该文件夹内。

更多相关文章

  1. tcping测试服务器TCP端口
  2. unity3d android真机测试的2种方法
  3. Android(安卓)PopupWindow输入框弹起时被PopupWindow中的edit被
  4. “The project cannot be built until build path errors are re
  5. 构建Windows版的Android(安卓)SDK
  6. Android(安卓)mvparms 踩坑
  7. Android开发中的单元测试-初级教程(01)
  8. Android(安卓)解决输入法遮挡布局控件的问题
  9. android 通过jdbc访问mysql数据库--(含android studio 配置)通过测

随机推荐

  1. Android(安卓)IPC 通讯机制源码分析
  2. 安卓入门.RelativeLayout相对布局1
  3. android实战
  4. android实现页面下方的Tab效果
  5. android xml 解析 修改
  6. android 中文 api (64) —— Scroller
  7. Android(安卓)- adb : logcat / shell /
  8. fastboot 详解
  9. Android(安卓)MD5加密算法
  10. Android(安卓)UnitTest