来到一家新公司,除了解决系统稳定性的系列问题,还主要负责产品的GMS认证方面的工作。在GMS认证的过程中,还是遇到一些困难的,也有一些问题耗时比较久才得以解决。
在Android8.0之后,GMS认证除了CTS,GTS,CTS-verifier还多了VTS,STS。其具体含义可以查询官网。下面来讲解下
主机环境搭建
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
机器环境
相关的测试工具包请向认证机构获取。有最新的就需要用最新的测试包,有一些问题可能和测试包相关。
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测试要正确配置gts-pegatron-public.json文件。在~/.bashrc文件末尾添加
export APE_API_KEY='/home/tim/Software/gms/gts-pegatron.json'(路径要和文件所在一致)
STS
VTS
VTS测试需要替换谷歌的system.img。
比如将system-aosp_arm_a-2018-09-05.img烧入我们系统,烧入的时候选择user版本的软件,将我们的system.img直接替换为谷歌的,选择烧入全部的镜像文件,注意不要只烧入system.img文件,否则会出现进入系统要输入密码的“友好提示”!
总结
在GMS测试中,很难有一次通过的情况,第一遍通常都是有一堆failed项。只能通过多次测试,得到最终结果。对于那些没能测试通过的就必须通过单项测试来解决相应的问题。当遇到公版软件可以通过,而我们的不能过的时候,这就让我们很郁闷。解决的方法:
当解决完一系列问题后,我们公司由于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