首页 > 代码库 > android之GMS认证

android之GMS认证

技术分享

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

经验的积累,能力的积累,信心的积累。

GMS综述

GMS认证。一般要求我们提供CTS。 XTS。 Verify三份測试报告。例如以下图:
技术分享

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

  • CTS:
    CTS(全称“Compatibility Test Suite”。即“兼容性測试包”)的认证,这是一组用以測试的.apk程序之类的集合,它能够在官网(http://source.android.com/compatibility/downloads.html)上面免费下载。CTS的目的就是让Android设备(如:手机)开发商能够开发出兼容性更好的Android设备。
  • GTS:
    GMS全称为Google Mobile Service,即谷歌移动服务。

    GMS是Google开发并推动Android的动力。也是Android系统的灵魂所在。

  • Verify:
    CTS都是指令自己主动測试。可是另一些測试是必须手动完毕的,这个是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(官网)
也能够是客户提供。

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(须要可FQ的网络,由于測试过程中须要连接google的server)
  • 打开蓝牙,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主界面上
  • 运行过程中不要触摸屏幕及button

注意:
- 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. 又一次输入./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—很重要

    id=53">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。然后依照说明一步一步操作就能够了。最后,我们导出报告。


技术分享

注意的事情:

  • 这个測试还是有測试顺序的。一般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,例如以下图所看到的:
    技术分享

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

技术分享

4 Fail项的处理

  • 给高通提case,给MTK提eservice,由于这个一般自己能解的比較少。主要还是要靠高通和MTK来解。
  • 慢慢积累自己的fail项库
  • 慢慢积累自己处理fail项的能力
<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

android之GMS认证