概述
来到一家新公司,除了解决系统稳定性的系列问题,还主要负责产品的GMS认证方面的工作。在GMS认证的过程中,还是遇到一些困难的,也有一些问题耗时比较久才得以解决。
在Android8.0之后,GMS认证除了CTS,GTS,CTS-verifier还多了VTS,STS。其具体含义可以查询官网。下面来讲解下
主机环境搭建
- 请安装64位的ubuntu版本
- 环境配置
Ubuntu下可以加载到~/.bashrc或者编辑以下内容到文件中如env,测试前source env
export JAVA_HOME=/home/你的用户名/Software/jdk1.8.0_77
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export PATH=/home/你的用户名/Software/android-sdk-linux/tools:$PATH
export PATH=/home/你的用户名/Software/android-sdk-linux/platform-tools:$PATH
export PATH=/home/你的用户名/Software/android-sdk-linux/build-tools/19.0.0:$PATH
android-sdk-linux.tar.gz可以从网上下载
注意请确保android-sdk-linux/build-tools/19.0.0目录下有appt程序,否则会报相应的提示错误,若出现请相应修改对应的路径即可。
如果出现aapt不可用,请安装c++兼容库:
sudo apt-get install lib32stdc++6 lib32z1
2. 安装Python开发包
$ sudo apt-get install python-dev
3. 安装 Protocol Buffer工具
$ sudo apt-get install python-protobuf
$ sudo apt-get install protobuf-compiler
4. 安装 Python 虚拟环境相关工具
$ sudo apt-get install python-virtualenv
If you use python3, you can try this:
$ sudo apt install virtualenv
$ sudo apt-get install python-pip
机器环境
- 由于集成了GMS包,烧写结束后第一次启动会比较慢,请耐心等待,开机启动后完成GMS
- Setup Wizard中的设置,设置默认语言为United States English,wifi部分请先跳过,时区可选择+8上海,设置用户信息,进入Home主界面;
- 确保机器按以下配置,Settings->Wi-Fi连接wifi,连接vpn网络环境,主机也要连接vpn;
- 开始测试CTS GTS之前,切记不要登录GMS账号,否则会有fail
- 测试GTS前,请烧写Key,请仔细阅读第六章第1节,否则会有fail,具体项参见第八章。
- Settings->Security->Screenlock选择None;
- 如果产品(如laptop类产品)带物理键盘,Languages & input->Physical
- keyboard->Show virtual keyboard,勾选该选项;
- 连续点击Settings->About tablet(phone)->Build
- Number,使被隐藏的Developer Options显示出来;
- Settings->Developeroptions->Stayawake,勾选该选项;
- Settings->Developeroptions->Force GPU rendering,不要勾选该选项;
- Settings->Location打开定位服务;
- Settings->Display->Sleep设置成最长时间,将亮度调节到最暗(测试时间较长节省电量);
- 测试CTS,首先需要打开一次Chrome,并把欢迎界面点掉,确保测试 Chrome
- 的时候不会让弹出的账号登陆窗口影响了测试的进行。
- 拷贝媒体资源文件,需使用android-cts-media-version新版的媒体资源包。
- 执行媒体包下的脚本source copy_media.sh&& source copy_image.sh拷贝媒体文件。
- Settings->Security->Unknownsources不勾选;
- 查看Sensor校准状态,校准状态永久有效,如果该机器做过校准则不需要再做。测VTS前务必要确认校准状态,查看方法:cat
- /sys/class/sensor_class/accel_calibration,如果有值打印,类似accel calibration: -604, 131,535,则说明校准成功。未校准的机器将其水平静止放置,输入命令echo 1 >/sys/class/sensor_class/accel_calibration即可校准,校准后请确认是否校准成功;
- 物理竖屏的机器要竖屏放置,物理横屏的机器横屏放置;
- 通过音量键调整设备音量适中,不要设置为最大音量;
- 开始测试前,请保证设备满电状态;
- 启动浏览器,并清除任何浏览器启动界面、设置界面或是登陆账户界面;
- 确保相机不被遮挡,相机对着对比度高,容易对焦的物体,同时确保有足够的亮度。
- 运行测试设备时,不得用于任何其他任务,必须放在一个固定位置,避免触发sensor;
- 每次重新测试,都要将机器进行如上配置。
相关的测试工具包请向认证机构获取。有最新的就需要用最新的测试包,有一些问题可能和测试包相关。
CTS
Cts常用命令:
命令是死的,人是活的,命令时有更新,具体请用run cts –help-all查看当前版本的测试命令!
Cts一般都用多台机器同时测试,以数量换时间。
run cts –o --shards 3 -s SN1 -s SN2 –s SN3 ...
-o 可以跳过下载android-cts-media-version媒体资源包,对于已经拷贝过媒体资源的机器就很有用。
--shards 3 表示用三台机器同时测试
SN1,SN2,SN3要换成机器里面的具体SN号
l d命令查看当前挂载了多少台设备
l r命令查看可以查看session id
对于CTS测试一遍大多数情况是过不了的,需要多次测试。
run cts –o –r session id --retry-type NOT_EXECUTED/FAILED --shards 3 -s SN1 -s SN2 –s SN3 ...
每轮测试完后都会生成测试报告,通过 l r命令可以查看具体的session id,以便通过上述命令再次进行测试
--retry-type指的是进行未测试项的测试还是Fail项的测试
当然也可以用子项plan测试那些未通过的测试项。步骤如下:
- 添加fail子项plan:
help add查看
add subplan --session xx -n plan_name --result-type type
- 按新建的子项plan测试:
run cts -o -a arm64-v8a --skip-all-system-status-check --subplan xxxx
其中subplan可以通过l p命令查看
还有更多详细命令还请执行run cts –help-all查阅
单测报告必须执行命令:run cts -m CtsSystemCurrentApiSignatureTestCases -t android.signature.cts.api.SignatureTest#testSignature
GTS
- 在进行gts测试时最好把机器格式化,重新弄下机器的环境。不要再进行完cts测试继续执行gts测试,否则可能会有一些测试项过不了
- gts的命令和cts类似,基本上可以通用。若出现不能执行的情况,还请执行run gts –help-all自行查阅。
- gts测试请确保主机已经连接VPN,并且可以连上谷歌
- gts测试工具还请用最新的进行测试,可能会遇到一些最新的工具包可以过,旧版本的死活过不了的情况。
- android8.0之后gts有些测试项需要烧写谷歌的keybox才能过。
Gts测试要正确配置gts-pegatron-public.json文件。在~/.bashrc文件末尾添加
export APE_API_KEY='/home/tim/Software/gms/gts-pegatron.json'(路径要和文件所在一致)
STS
- STS请用最新的STS测试工具测试。
- STS测试请用userdebug的软件测试
- STS测试关闭wifi否则会有失败项
- STS测试工具解压需要密码:sts
- 测试命令 run sts
VTS
VTS测试需要替换谷歌的system.img。
比如将system-aosp_arm_a-2018-09-05.img烧入我们系统,烧入的时候选择user版本的软件,将我们的system.img直接替换为谷歌的,选择烧入全部的镜像文件,注意不要只烧入system.img文件,否则会出现进入系统要输入密码的“友好提示”!
- VTS测试请确保机器有连接VPN
- VTS分为两部份测试,对应有两个测试命令,run vts 和run cts-on-gsi
总结
在GMS测试中,很难有一次通过的情况,第一遍通常都是有一堆failed项。只能通过多次测试,得到最终结果。对于那些没能测试通过的就必须通过单项测试来解决相应的问题。当遇到公版软件可以通过,而我们的不能过的时候,这就让我们很郁闷。解决的方法:
- 测试整个模块看是否通过
- 横屏单项测试看是否通过
- 看竖屏单项测试是否通过
- 机器格式化之后,重新测试那一项
- 测试的过程中也遇到过单项测试死活不过,run –retry也不能过,但整个模块测试可以通过,出现这个情况就说明是测试包的问题了,很无耐此时我们只能重新测试
- 分析测试Log,从log找到解决方案
- 查看cts目录下的代码,分析其测试流程
当解决完一系列问题后,我们公司由于VPN网络太差和没有IPV6环境,导致一些测试项测试不过:
1.CTS
CtsLibcoreTestCases_libcore.java.net.SocketTest#testSocketTestAllAddresses
CtsNetTestCases_android.net.cts.DnsTest#testDnsWorks
这两个文件都需要IPV6的网络环境测试,只要3PL那边能过就可以
2.GTS
GtsExoPlayerTestCases
com.google.android.exoplayer.gts.DashTest#testH265Adaptive
GtsMediaTestCases
com.google.android.media.gts.WidevineH264PlaybackTests#testClearWith1080P30
com.google.android.media.gts.WidevineH264PlaybackTests#testClearWithUHD30
com.google.android.media.gts.WidevineH264PlaybackTests#testL3With1080P30
com.google.android.media.gts.WidevineH264PlaybackTests#testL3WithUHD30
com.google.android.media.gts.WidevineHEVCPlaybackTests#testClearWithUHD30
com.google.android.media.gts.WidevineHEVCPlaybackTests#testL3WithUHD30
com.google.android.media.gts.WidevineHLSPlaybackTests#testL3With360P30
这些问题与VPN网络的好坏有关,有时可以过有时过不了,保证3PL那边能过就行
GMS认证有关网站
谷歌可以查到的CTS-bug
https://issuetracker.google.com/issues/111853144
认证有关资料的网站:
https://ressrc.com/category/android/gms/
STS有关patch这里有:
https://source.android.com/security/bulletin/2016-08-01
https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=e758417e7c31b975c862aa55d0ceef28f3cc9104
VTS测试相关介绍:
https://codelabs.developers.google.com/codelabs/android-vts-8/#0
CTS官网:
https://source.android.com/compatibility/cts?hl=zh-cn
vts官网:
https://source.android.com/compatibility/vts/systems?hl=zh-cn
CtsVerifier源码(当然Android源码里面也有):
https://android.googlesource.com/platform/cts/+/7542792/apps/CtsVerifier
最后
以上就是傻傻雪碧为你收集整理的GMS认证总结的全部内容,希望文章能够帮你解决GMS认证总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复