android之GMS认证_android

来到了新的公司,才知道做手机是需要做GMS认证的,于是从一个从没有做过GMS认证的小白到一个月做了8个项目的GMS认证。最后,自己都是吐了,每天晚上都是一个人傻傻在加班,更是知道了高通的支持力度让人发抖,无奈的发抖。
下面是我做的一点做GMS认证的笔记,大家可以参考。
其实,我做完GMS认证后,在想,如何让一个人从对一个领域一无所知到能得心应手的处理。想了很久,我想说应该是积累经验的积累,能力的积累,信心的积累。

#GMS综述

GMS认证,一般要求我们提供CTS, XTS, Verify三份测试报告,如下图:

android之GMS认证_Verify_02

Bin: 认证的软件
CTS: CTS的测试报告
GTS: XTS的测试报告
ctsVerifierReports: Verify测试报告

#1.准备资料:

  • GMS认证的视频文件—android-cts-media-1.0.zip
    使用方法一:
    新建test文件夹(内有bbb_full,bbb_short,copy_media.sh,make_zip.sh,README.txt ),手机需拷贝android-cts-media-1.0.zip解压到test目录中(在不支持存储空间的情况下,使用T卡替代)
    使用方法二:
    进入android-cts-media-1.1目录下,执行:
    . /copy_media.sh all,或**./copy_media.sh**
    就可以把视频复制手机上了,非常的方便和快。
  • android-cts文件
    解压android-cts-4.4_r1-linux_x86-arm.zip
  • CtsDeviceadmin.apk
    此apk位于(android-cts\repository\testcases)目录下
  • android-gts文件
    解压gts-2.1_r1.zip
  • CtsVerifier.apk
    ( 解压android-cts-verifier-4.4_r3-linux_x86-arm.zip)

这些资料可以从官网上下载:
http://source.android.com/compatibility/downloads.html(官网)
https://source.android.google.cn/compatibility/cts/run(国内可以直接访问) 也可以是客户提供。

#2.手机端准备

  • Need insert empty SD card
  • Insert valid SIM card
  • 设置手机语言为英语:进入Settings–Language&input–Language设为English(UnitedStates)
  • 输入法默认使用android输入法,Settings–Language&input–Default—English(US)
  • 手机软件需是User版本(请用adb remount命令查看),需写IMEI(请按*#06#查看)、MAC码(settings–about phon–statu–wlan mac address)
  • 去掉锁屏(Settings --Security --Screen lock–none )
  • 设置屏幕超时为最长时间30分钟(Settings–Display–Sleep–30minutes)
  • 进入Settings–Date & time–取消Automatic date&time勾选,取消Automatic time zone 勾选, Select time zone,选择GMT-8:00 Pacific Time (注:当实行夏令时后,Pacific Tim会变成GMT-7:00)
  • 打开developer options,Settings–About phone–快速点击Build number 7次
  • Settings–developer options–stay awake and usb debugging allow mock locations 勾选
  • 打开WIFI并连接AP(需要可翻墙的网络,因为测试过程中需要连接google的服务器)
  • 打开蓝牙,Settings–Bluetooth
  • 打开GPS,Settings—Location—开启
  • 打开数据连接,下拉状态栏—选中Data on
  • 安装CtsDeviceadmin.apk
    可以复制到sd卡上再安装,也可以使用命令安装:adb install ‘/home/android/CTS_hexiaoming/hexiaoming/CtsDeviceAdmin.apk’
  • 将test文件夹复制到sd卡上,也可以使用命令:
    adb push ‘/home/android/CTS_hexiaoming/hexiaoming/test’ /sdcard/test
    (或者进入到android-cts-media-1.1目录下,执行:
    . /copy_media.sh all,或**./copy_media.sh**)
  • Settings—Security–Device administrators–勾选上 device administrators列表前三个选项,最后一个不勾选
  • 运行时让屏幕是home主界面上
  • 运行过程中不要触摸屏幕及按钮

注意:

  • While a device is running tests, it must not be used for any other tasks
  • Before start CTS, device at the home screen
  • Do not press any keys on the device while CTS is running
  • Make sure the AP is usability and connectedly.
  • Make sure USB cable is stability

#3.PC端:(Ubuntu系统)
##3.1 CTS测试
android-cts文件(解压)

  1. 用USB线连接Linux PC
    2.打开终端,进入android-cts/tools目录,输入./cts-tradefed.终端显示:

    (如果没有这行,说明设备没有和PC连通)
    3.输入run cts–plan CTS,开始测试CTS
    4.测试完成后会自动生成xml报表,在anroid-cts/repository/results目录中(testResult.xml).
    5.LOG信息在目录下:(android-cts\repository\logs)

一般情况,CTS测试一次不能全部通过,那么如何只测试Fail项了?

  1. 手动修改testResult.xml,使用gedit打开该文件(gedit testResult.xml)。
  2. 选择查找搜索failed项,替换为notExecuted,然后保存,如图:
  3. android之GMS认证_GTS_03

  4. 重新输入./cts-tradefedcts-tf-> run cts–continue-session session_id
    PS: session_id可以通过在CTS命令行里输入l r查看到。比如输入l r查看到的session_id为0那就应该在CTS的命令行输入 run cts --continue-session 0这样就会只会继续测试那些之前fail的项而不会去测试那些已经pass的项

我们如何修改报告
对于有的测试项,我们没有环境,过不了。但是我们可以确定此项可以pass,那么我们可以直接修改报告:
我们在改报告的时候,参考要修改的测试项的前一个pass项和后一个pass项,对应修改就可以了,非常的简单。修改后,我们再让其重新跑一下,生成新的测试报告就可以。

如果,我们单独跑包或类:
To run a test package:
'run cts --package ’
run cts -p android.os
To run a test class:
'run cts --class ’
run cts -c android.app.cts.SystemFeaturesTest -m testSensorFeatures
run cts -c android.os.cts.Asyn

查看更多cts命令信息:
‘run cts --help’
l p------------查看有那些功能
l packages------查看有那些包

注意事项:
1.CTS 4.0的命令和CTS 2.3/2.3完全不同,所以在进入CTS后,先输入help看看命令的格式和意思。
2.正常测试一次CTS4.0,需要6-9小时。所以,测试时请接上电源,并尽量在晚上测试,不会影响设备的使用
3.CTS是自动化测试,测试过程中不需要人的干预。如果在上班时间,每1-2小时观察下即可
4.CTS4.0在测试过程中断开、终止都不会生成测试报告,所以,测试前要保证USB连接稳定和平台设置
5.CTS执行run cts–plan CTS时,会搜索android-cts/repository/results中的历史报表文件夹。如果文件有很多,启动速度会非常慢。所以,请定期清理results文件夹中的历史报表(直接删除报表文件夹即可)

常见问题:

  1. 有时,复制会导致一些权限问题,这时,我们可以运行sudo chmod 0777 filename来提高权限。
  2. CTS测试 快速入门----MTK—非常重要
    https://onlinesso.mediatek.com/_layouts/15/mol/topic/ext/Topic.aspx?id=53

##3.2 XTS测试:
android-gts文件(解压gts-2.1_r1.zip)
XTS测试和CTS是一样的,只是要把命令稍微对应的改一下就可以了:
run xts–plan XTS
run xts–continue-session session_id
run xts -p android.os
run xts -c android.app.cts.SystemFeaturesTest -m testSensorFeatures

##3.3 手动测试 CTS-verifier:

CtsVerifier.apk----( 解压android-cts-verifier-4.4_r3-linux_x86-arm.zip)

这个是手动测试,我们只需要安装此apk,然后按照说明一步一步操作就可以了。最后,我们导出报告。

android之GMS认证_GTS_04

注意的事情:

  • 这个测试还是有测试顺序的,一般Policy Serialization Test 这个测试项最后一个测试,因为此项会导致后面的Keyguard Password Verification项过不了。我们可以一开始就测试Keyguard Password Verification,最后一个测试Policy Serialization Test。
  • Camera的测试项,我们要一个一个测试,不能直接按pass直接过,就是因为测试的报告里有这些测试项的详细信息。
  • 在测试Accelerometer Measurement Tests项前,我们在settings—Sound—Default notification sound选择一个默认值,否则有可能因为此没有设置,apk会crash,此项过不了。
  • Streaming Video Quality Verifier测试项中,RTSP的三项,有wifi的话可以过,但是HTTP PROGRESSIVE的三项是过不了的。也就是说Streaming Video Quality Verifier测试项是过不了的,这是正常的现象。
  • USB Accessory Test有时候执行命令,是没有效果,这个有可能是电脑的原因,换台电脑多试几次。
    USB Accessory Test in CTS Verifier, Please follow up below steps to test this item:
  1. Install CTSVerifier.apk to the phone device.
  2. Add “18d1:2d01” device to /etc/udev/rules.d/51-android.rules, and restart
    About add “18d1:2d01” device to /etc/udev/rules.d/51-android.rules,
    Please hlep to refer SOP part of “Setup CTS Environment (3/4)”
    Ubuntu 10.4
    New a udev configuration file for the usb and change the mode
    sudo touch /etc/udev/rules.d/51-android.rules
    sudo chmod a+rw /etc/udev/rules.d/51-android.rules
    Add the below string in 51-android-rules to setup the USB
    SUBSYSTEM==“usb”, ATTRS{idVendor}“0bb4”, ATTRS{idProduct}“0c03”, MODE="0666“
    Restart the udev service to update the configuration
    sudo restart udev
    Restart the Ubuntu
    After connecting the Android device to the PC, type lsusb and you should see the below string if the connection is success:
    example:
    Bus 002 Device 002: ID 0bb4:0c03 High Tech Computer Corp.
  3. Connect the phone to a linux pc, with adb enabled
  4. Run cts-usb-accessory on linux PC, wait until “Found android device in accessory mode (18d1:2d01)
  5. Device will pop a prompt to cts-verifier, start the CTS Verifier and run USB Accessory test.
  6. make sure no other devices connnect to the PC.
  • Bluetooth Test测试项,比较需要时间和耐心,要慢慢来操作。特别是BLE Client Test测试项更是如此。我们测试此项时,可以先记下mac地址(可以写一些简单的mac地址,如(11:11:11:11:11:11) mac地址要区分大小写,这个也要注意),这是因为此项一般要测好多次才能pass,每次都要求从头开始,每次都要输入mac地址。根据测试经验,一般4.BLE Reliable Write 这个才是此测试能否通过的关键,我一般是4.BLE Reliable Write在倒数第二步来测试,并且多输入几次信息(请不要每次只输入一个字母),直到另一部手机的Waiting on reliable write from client测试项显示绿色,才最后执行8.BLE Client Disconnect就可以通过此项测试。
  • data backup test测试项:
    首先在cts verifier中随便进行一项测试,打开设置中的备份和恢复,点击 generate test data->ok
      adb shell bmgr enable true
      adb shell bmgr transport android/com.android.internal.backup.LocalTransport
      adb shell bmgr run
      adb uninstall com.android.cts.verifier
      adb install F:\CTS4.0\CTS4.0.3_r2\apk4.0.3_r2\CtsVerifier_4.0.3_r1.apk
  • 测试完,我们使用adb push命令将测试报告导出就可以了。
    adb pull /sdcard/ctsVerifierReports /home/android/tmp

##3.4 测试结果的一些注意:

  • 测试结果表头的问题,在文档中要求CTS和GTS中的设备信息的Build Fingerprint中的签名文件类型是release-key,也就是说,我们测试的软件版本的签名要使用release-key,如下图所示:
  • android之GMS认证_GMS_05

  • 在文档中要求GTS项的测试结果中的Properties属性应该包括ro.com.google.gmsversion、ro.com.google.clientidbase,并且有的客户对ro.com.google.clientidbase的名字是有要求的。如下图,就缺少ro.com.google.clientidbase的项。

android之GMS认证_GTS_06

#4 Fail项的处理

  • 给高通提case,给MTK提eservice,因为这个一般自己能解的比较少,主要还是要靠高通和MTK来解。
  • 慢慢积累自己的fail项库
  • 慢慢积累自己处理fail项的能力