Failed to create virtualenv

Ubuntu 16.04 64位,跑VTS时报错,之后无法正常测试,重装python 环境也不行。

03-28 18:47:01 D/RunUtil: Running [virtualenv, /tmp/2dda8284800eb328b87b7161c94104e2-virtualenv1403893971550289422]
03-28 18:47:17 D/RunUtil: [virtualenv, /tmp/2dda8284800eb328b87b7161c94104e2-virtualenv1403893971550289422] command failed. return code 1
03-28 18:47:17 E/VtsPythonVirtualenvPreparer: Failed to create virtualenv with : /tmp/2dda8284800eb328b87b7161c94104e2-virtualenv1403893971550289422.
03-28 18:47:17 E/ModuleDef: TargetSetupError in preparer: com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer
03-28 18:47:17 E/TestInvocation: Unexpected exception when running invocation: java.lang.RuntimeException: com.android.tradefed.targetprep.TargetSetupError: Failed to create virtualenv
03-28 18:47:17 E/TestInvocation: com.android.tradefed.targetprep.TargetSetupError: Failed to create virtualenv
java.lang.RuntimeException: com.android.tradefed.targetprep.TargetSetupError: Failed to create virtualenv
at com.android.compatibility.common.tradefed.testtype.ModuleDef.runPreparerSetup(ModuleDef.java:354)
at com.android.compatibility.common.tradefed.testtype.ModuleDef.runPreparerSetups(ModuleDef.java:288)
at com.android.compatibility.common.tradefed.testtype.ModuleDef.run(ModuleDef.java:250)
at com.android.compatibility.common.tradefed.testtype.CompatibilityTest.run(CompatibilityTest.java:477)
at com.android.tradefed.invoker.TestInvocation.runTests(TestInvocation.java:796)
at com.android.tradefed.invoker.TestInvocation.prepareAndRun(TestInvocation.java:471)
at com.android.tradefed.invoker.TestInvocation.performInvocation(TestInvocation.java:322)
at com.android.tradefed.invoker.TestInvocation.invoke(TestInvocation.java:984)
at com.android.tradefed.command.CommandScheduler$InvocationThread.run(CommandScheduler.java:558)
Caused by: com.android.tradefed.targetprep.TargetSetupError: Failed to create virtualenv
at com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer.startVirtualenv(VtsPythonVirtualenvPreparer.java:281)
at com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer.setUp(VtsPythonVirtualenvPreparer.java:98)
at com.android.compatibility.common.tradefed.testtype.ModuleDef.runPreparerSetup(ModuleDef.java:344)
… 8 more

$pip -V

Traceback (most recent call last):
File “/usr/bin/pip”, line 9, in <module>
from pip import main
File “/usr/lib/python2.7/dist-packages/pip/__init__.py”, line 4, in <module>
import locale
File “/usr/lib/python2.7/locale.py”, line 13, in <module>
import encodings
ImportError: No module named encodings

no permissions (udev requires plugdev group membership)

在 ubuntu 64位機終端上輸入  adb devices

顯示如下的不愉快:

0123456789ABCDEF    no permissions (udev requires plugdev group membership); see [http://developer.android.com/tools/device.html]

這會導致無法測試 CTS 和 GTS。查找 android 官方資料,解決方法如下:

1. 終端 輸入命令: lsusb

  1. Bus 002 Device 003: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse  
  2. Bus 002 Device 002: ID 8087:8000 Intel Corp.  
  3. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
  4. Bus 001 Device 125: ID 0e8d:200a MediaTek Inc.  
  5. Bus 001 Device 002: ID 8087:8008 Intel Corp.  
  6. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
  7. Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
  8. Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  

找到手機對應的那一行,這裡是 

Bus 001 Device 125: ID 0e8d:200a MediaTek Inc.

2. 然後  

vim /etc/udev/rules.d/51-android.rules

添加以下這行到文件中:

  1. SUBSYSTEM==”usb”, ATTR{idVendor}==”0e8d”, MODE=”200a”, GROUP=”plugdev”  

3. 再執行

  1. chmod a+r /etc/udev/rules.d/51-android.rules  

4. 再執行以下命令

  1. adb kill-server  
  2.   
  3. adb devices   

就顯示如下的了:

List of devices attached
0123456789ABCDEF    device

Android8.1(O1)CTS失败项纪录

1、CtsLibcoreTestCases libcore.java.net.SocketTest#testSocketTestAllAddresses

  • 网络问题,需要在IPV6的环境下进行测试

2、CtsLocationTestCases android.location.cts.GnssPseudorangeVerificationTest#testPseudoPosition

  • 在测试之前确保工模下有搜到卫星信号,可以在笔记本上设定cts 环境,然后在户外测试。或者使用室内GPS信号放大器

3、CtsKeystoreTestCases android.keystore.cts.KeyAttestationTest#testEcAttestation

  • 该项测试需要申请google key

4、CtsCarrierApiTestCases
android.carrierapi.cts.CarrierApiTest#testGetIccAuthentication
android.carrierapi.cts.CarrierApiTest#testHasCarrierPrivileges
android.carrierapi.cts.CarrierApiTest#testSendDialerSpecialCode

  • 需要使用特殊sim卡

5、CtsAutoFillServiceTestCases
android.autofillservice.cts.WebViewActivityTest#testAutofillAndSave
android.autofillservice.cts.WebViewActivityTest#testAutofillNoDatasets
android.autofillservice.cts.WebViewActivityTest#testAutofillOneDataset
android.autofillservice.cts.WebViewActivityTest#testSaveOnly

  • 可申请豁免,Google bug id :70815921

6、CtsDeqpTestCases
GLES31.functional.debug.negative_coverage.get_error.vertex_array#draw_elements_base_vertex_invalid_map
GLES31.functional.debug.negative_coverage.get_error.vertex_array#draw_elements_instanced_base_vertex_invalid_map
GLES31.functional.debug.negative_coverage.get_error.vertex_array#draw_range_elements_base_vertex_invalid_map

  • 可申请豁免,Google bug id : 37942569

7、CtsIncidentHostTestCases(cts-on-gsi)
com.android.server.cts.BatteryStatsValidationTest#testWifiDownload
com.android.server.cts.BatteryStatsValidationTest#testWifiUpload

  • 可申请豁免,Google bug id : 69386624

8、CtsAppSecurityHostTestCases(cts-on-gsi)
android.appsecurity.cts.IsolatedSplitsTests#testInstallAllFeatureSplits
android.appsecurity.cts.IsolatedSplitsTests#testInstallAllFeatureSplitsAndConfigSplits
android.appsecurity.cts.IsolatedSplitsTests#testInstallDependentFeatureSplits
android.appsecurity.cts.IsolatedSplitsTests#testInstallDependentFeatureSplitsAndConfigSplits
android.appsecurity.cts.IsolatedSplitsTests#testInstallOneFeatureSplit
android.appsecurity.cts.IsolatedSplitsTests#testInstallOneFeatureSplitAndConfigSplits

  • 可申请豁免,Google bug id : 70697855

android.appsecurity.cts.OverlayHostTest#testInstallingOverlayHasNoEffect

  • 可申请豁免,Google bug id : 71958344

android.appsecurity.cts.UsesLibraryHostTest#testMissingLibrary
android.appsecurity.cts.UsesLibraryHostTest#testUsesLibrary

  • 可申请豁免,Google bug id : 71958671

9、CtsAutoFillServiceTestCases(cts-on-gsi)
android.autofillservice.cts.AttachedContextActivityTest#testAutofill

  • 可申请豁免,Google bug id : 71960322

10、CtsSpeechTestCases(cts-on-gsi)
android.speech.tts.cts.TextToSpeechTest#testSpeak
android.speech.tts.cts.TextToSpeechTest#testSpeakStop
android.speech.tts.cts.TextToSpeechTest#testSynthesizeToFile

  • 可申请豁免,Google bug id : 64204643

11、CtsDeqpTestCases(cts-on-gsi)
EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status#compute
EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status#fragment
EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status#vertex
EGL.functional.robustness.reset_context.shaders.infinite_loop.shared_context_status#vertex_and_fragment

12、CtsDumpsysHostTestCases(cts-on-gsi)
android.dumpsys.cts.ProcessStatsDumpsysTest#testProcstatsOutput

  • 可申请豁免,Google bug id : 72540761

13、CtsPermission2TestCases android.permission2.cts.PrivappPermissionsTest#testPrivappPermissionsEnforcement

 

Android8.1认证新特性与要求

本文主要说明Android8.1过GMS认证的一些新特性和新要求。

新增测试

Android7.x以及之前的版本,如果要过GMS认证,只需要完成CTS测试、GTS测试和CTS Verifier,如果全部通过,将软件送给google授权的实验室即可。

Android8.0以后,除了要完成默认版本的CTS测试、GTS测试和CTS Verifier之外,新增加了两个新的测试。

这两个新的测试需要在替换谷歌提供AOSP的system.img (GSI)的版本上进行,分别是:

新特性与新要求

认证要求

google Key

从Android O开始,必须实现一个硬件支持的密钥库,google要求使用Google key来进行认证。

Google key将以keybox.ml文件的方式提供给OEM厂商,包含以下内容:

  • 请求keybox.ml时由OEM分配的设备唯一设备ID。
  • 一个ECDSA认证密钥,采用PEM格式。
  • 一个RSA认证密钥,采用PEM格式。
 
image.png

如何申请google key

官方说明如下:

OEMs will upload a set of device IDs and download an XML keybox file containing keys for those device IDs

实际操作中可能需要提交相关信息给google授权的GMS实验室,从还实验室获取相关的 google key 文件。

测试相关

CTS测试

1、Cts Media Files

  • 版本要求 CTS Media 1.4 及以上版本
  • Media文件存放位置要求:在Android8.1的测试中,media文件要放在电脑中的/tmp/android-cts-media路径下,测试前不需要将Media文件拷贝到手机中,测试时会自动拷贝。如果/tmp/android-cts-media路径下没有media文件,将会从网上下载,由于文件比较大,比较耗时

 

Android8.x新增cts测试(VTS下测试GSI版本)

Android 8.0之后,由于平台架构的更改,GMS认证增加了新的测试项,包括VTS和针对GSI版本的CTS测试,本文主要介绍Android8.1针对GSI版本的CTS测试,VTS测试可参考Android VTS测试

测试环境配置

1、更换google的GSI
  • 设置中打开 OEM unlocking 选项
  • 设置中打开 USB debugging 选项
  • 长按音量 + 和电源键进入fastboot模式
  • 连接到电脑上,分别执行fastboot flashing unlockfastboot oem unlock
    执行命令后需要选择音量 + 来确认unlock。
  • 执行 fastboot 命令刷入google提供的 system.img (GSI):
    fastboot flash system system.img(需要根据软件版本的信息来选择GSI版本)
  • 重启: fastboot reboot
2、测试前准备
  • cts测试环境配置 : CTS测试配置
  • vts测试环境配置 :
    安装 Python 开发工具包:sudo apt-get install python-dev
    安装协议缓冲区工具(适用于 Python):sudo apt-get install python-protobuf protobuf-compiler
    安装 Python 虚拟环境相关工具:sudo apt-get install python-virtualenv python-pip
  • Media 媒体包:要求 CTS Media 1.4 及以上版本,在Android8.1的测试中,media文件要放在电脑中的/tmp/android-cts-media路径下,测试前不需要将Media文件拷贝到手机中,测试时会自动拷贝。如果/tmp/android-cts-media路径下没有media文件,将会从网上下载,由于文件比较大,比较耗时

运行针对GSI版本的CTS

  • 1、下载并解压vts测试工具包
  • 2、切换到android-vts的位置下:
    $ cd android-vts
  • 3、进入android-vts目录下,运行vts测试的控制台程序
    $ ./android-vts/tools/vts-tradefed
  • 4、运行 cts-on-gsi 测试
    > run cts-on-gsi​​

 

Android GMS认证-CTS/GTS/CTSV

 

GMS认证包括三个部分:CTS、GTS、CTS Verifier;Android8.0以后,增加了两个新的测试,分别是:

VTS 测试 和 cts-on-gsi

CTS是兼容性测试,CTS Verifier是对CTS的补充,主要是通过手动测试来完成。

GTS的全称是Google Mobile Services Test Suite

1、测试工具和测试环境

1)测试工具

      测试工具分为三个部分,CTS工具、GTS工具和CTS Verifier工具

      CTS和CTS Verifier的官方获取路径为:CTS工具下载地址

      GTS的工具要google或者google授权的实验室获取。

2)测试环境搭建

      电脑的配置要求(电脑为ubuntu14.04、以CTS7.0_R16和GTS5.1_R2为例):

      1、从cts-tradefed脚本中可以看出,运行前首先会检查java、aapt、adb是否可用

          对于cts来说java版本的要求是:1.6, 1.7 or 1.8 is required

      2、从gts-tradefed脚本中可以看出,运行前首先会检查java、adb是否可用

          对于gts来说java版本的要求是:1.8 is required

      3、 保证手机可以连接到测试的ubuntu电脑 

          可以通过’adb devices’来查看手机是否正确连接电脑     

      手机的配置要求

      1、确保wifi可访问google服务且稳定,设置VPN,确保IPV6可用。

      2、确保测试设备附近有可用的蓝牙设备。

      3、如果不是刚刷机或者恢复出厂设置的的手机,需要设置Settings > Backup & reset > Factory data reset

      4、语言要设置为英语,Settings > Language & input > Language

      5、要打开位置,Settings > Location > On

      6、Settings > Security > Screen lock > None

      7、Settings > Developer options > USB debugging

      8、Settings > Date & time > Use 24-hour format > Off

      9、Settings > Developer options > Stay Awake > On

    10、下载最新的CTS Media Files,拷贝到手机里面,可以单独拷贝某个分辨率的。

        chmod u+x copy_media.sh

      ./copy_media.sh

    11、保证手机IMEI号正确

2、测试命令以及结果查看

1)CTS测试

1、运行CTS脚本

      a、进入cts目录/android-cts/tools

      b、执行sudo ./cts-tradefed

      c、进入后可以执行help或者run cts –help-all查看帮助命令

2、执行CTS测试

      a、执行整个CTS的测试:

            run cts –plan CTS

            如果多台手机一起跑测,可使用下面命令:

          run cts –plan CTS –shards 2 -o -d –skip-system-status-check        com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker

            注:-o = –skip-preconditions ,-d =–skip-device-info, –skip-system-status-check com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker

则可以跳过网络连接检测,这样可以节省不少时间。

      b、CTS第一遍结束之后,会有很多没有执行的项,需要执行如下命令:

            run cts –retry session-id –retry-type NOT_EXECUTED

 
 

            假如第一次的session-id是0,则命令为

            run cts –retry 0 –retry-type NOT_EXECUTED

  c、继续未完成的cts测试

            执行l r 命令,锁定需要继续跑的session_id : run cts –retry session_id

 
 

            假如要重跑session-id为0的失败项,则执行:  run cts –retry 0

3、执行单独模块或者单独测试项

 
 

        a、测试单个模块

            run cts -m <模块名>

        b、测试单个测试项

            run cts -m <模块名> -t <test_name>

4、CTS测试报告及log

        1、测试报告

            路径:文件位于android-cts/results下面

            命名规则:以测试开始执行的日期和时间命名

            查看报告文件:test_result.xml(建议使用火狐浏览器打开)

        2、CTS log

            路径:文件位于android-cts/logs

            命名规则:以测试开始执行的日期和时间命名

2)GTS测试

1、GTS测试手机端配置

        GTS测试的配置和CTS基本上是一致的,但是不需要安装CTS media媒体包。

2、运行GTS脚本

        a、进入cts目录/android-gts/tools

        b、执行sudo ./gts-tradefed

        c、进入后可以执行help或者run gts –help-all查看帮助命令

3、执行GTS测试

        a、执行整个GTS的测试:

              run gts –plan GTS

        b、GTS第一遍结束之后,如没有执行的项,需要执行如下命令:

              run gts –retry session-id –retry-type NOT_EXECUTED

              假如第一次的session-id是0,则命令为:

              run gts –retry 0 –retry-type NOT_EXECUTED

        c、继续未完成的gts测试

            执行l r 命令,锁定需要继续跑的session_id:

            run gts –retry session_id

            假如要重跑session-id为0的失败项,则执行:

            run gts –retry 0

4、执行单独模块或者单独测试项

        a、测试单个模块 : run gts -m <模块名>

        b、测试单个测试项:run gts -m  <模块名> -t <test_name>

5、GTS测试报告及log

        1、测试报告

            路径:文件位于android-gts/results下面   

            命名规则:以测试开始执行的日期和时间命名

            查看报告文件:test_result.xml(建议使用火狐浏览器打开)

        2、GTS log

            路径:文件位于android-gts/logs

            命名规则:以测试开始执行的日期和时间命名

3)CTS Verifier测试相关

1、测试准备

        1、根目录下安装CtsVerifier.apk、NotificationBot.apk

            adb install -r CtsVerifier.apk         

            adb install -r  NotificationBot.apk

        2、设置里security-Device administrators开启cts verifier

        3、打开手机上的CTS Verifier应用,根据提示测试每一项

2、保存查看结果

        所有测试完成后,点击CTS Verifier测试工具右上角的保存按钮,会提示结果保存位置,连接电脑,将结果拷贝到电脑即可查看。

 

Android Go简述与其GMS认证

什么是 Android Go?

Android Go 是 google 基于 Android8.x之后的系统,提出的一个轻量级操作系统解决方案,可以在低内存的设备上以较好的体验运行Android系统。

Android Go 对手机的配置要求较低,最低为512M的内存,通常会在不超过1GB 内存的设备上运行。Android Go 是谷歌在新兴市场进一步扩展 Android 系统计划的一部分,其较低的价格能够涵盖大部分低端用户。

Android Go版本的一些特性:

  • Android Go不支持平板设备
  • 支持Android Go的芯片厂商有:MTK、展讯、高通
  • Android Go版本优化了速度、内存使用率;减少了apk的大小
  • Android Go版本和普通版本相比,在安全性上面并没有作出妥协
  • 部分功能,如画中画,多窗口等将不再在Android Go版本中提供
  • N版本无法通过OTA升级到Android Go

Android Go的官方网站:https://www.android.com/versions/oreo-8-0/go-edition/


Android Go 的特点

Android Go 包含三个方面的优化 :操作系统,谷歌Play商店,谷歌应用程序,将能更好地运行在入门设备上。

1、更大的可用空间

体积更小的应用程序,更多的可用存储空间,以及多样的内容的存储方式

  • 减少预装应用的数量,安装轻量级的app(占用更少的存储空间),将获取更多的剩余存储空间
  • 创建下载和更新更少的全新应用,不仅可以减少占用的空间,同时显著提高应用的性能
  • google的新应用Files Go,可以帮助快速查找文件,并且过滤不需要的内容
2、更好的性能

通过使用增强型应用程序和一些新应用程序,构建快速流畅的手机体验,可以比以往更快地发送邮件,获取答案,查找路线和玩游戏。

  • Google Go 应用Google Go 可以通过简单的输入轻松快速地找到热门的搜索、网站和应用程序,趋势图像和GIF动画。
  • Google Assistant Go 应用Google Assistant 可以在低于1G的设备上使用,给用户带来轻量化的语音交互体验
  • Gboard 应用自动更正错误、语音输入、多语言打字帮你更轻松的沟通,还提供了GIF动画、表情符号。目前有220语言,是支持语言最多的输入法
3、节省流量

通过一个内置的数据管理器和更多的选项来对流量进行检测和管理,而不仅仅是控制流量的使用。

  • Data Saver默认是打开的,可即时节省流量。 用来控制哪些应用程序可以使用您的流量,何时可以使用
  • Peer-to-Peer Sharing
    随时随地分享您最喜爱的内容。 通过Files Go去分享视频,不会消耗流量。
  • Chrome 浏览器
    Chrome浏览器配备了自己的流量节省程序,默认是打开的,它限制后台数据,并帮助您节省多达60%的移动数据。

4、系统安全

Android Go在用户安全方面也没有妥协,具有和Android Oreo相同的关键安全服务,带有Google Play Protect内置的移动安全功能,可保护应用程序和数据的安全

  • 每天有超过20亿台设备受到保护,扫描程序针对移动数据使用进行了优化,因此不会浪费您的流量。
  • 内置查找我的设备功能如果设备丢失或被盗,只需从其他设备登录到您的Google帐户,即可追踪,设置密码或清除密码。
  • 扫描所有安装的应用
    可以扫描所有应用的安装,无论从何处下载,无论是否连接到网络。
5、其他
  • 专门为 Android Go推出的 Google Play 应用商店,该版本的应用商店可以收到 Google 专门为Android Go设备推荐的轻量化应用,尤其是那些不吃内存、不抢空间、节省流量的应用。
    play-store-apps_1x.png
  • 为了配合 Android Go,Google 推出了一系列新应用:<Google Go>、 <Google Assistant Go>、<Gboard>、<Google Play>、<Chrome>、<YouTube Go>、<Google Maps Go>、<Gmail Go>、<Files Go>

这些应用的特征都是占用空间小,速度流畅,就是所谓的轻量化。以Google Go为例,与之前版本相比它最多消耗 40% 的流量,安装包大小不超过 5MB,使用体验更快也更加简单。


Android Go的GMS认证

这里暂时只列出Android Go版本以GMS Express plus方式过认证的部分要求:

  • Google Search 搜索:要预装Google search Go的版本,默认在default Home screen 且为唯一的搜索apk。
  • Google Assistant 语音助手:要预装Assistant Go的版本,要成为设备上唯一的语音助手。
  • Mail 信件:要预装Gmail Go的版本,Gmail是设备上唯一的信件app。
  • Calendar 日历:要预装Google Calendar的一般版本,是设备上唯一的日历应用
  • keyboard 输入键盘:要预装Gboard Go的版本,是设备上唯一的输入键盘app。
  • Gallery 相册:预装 Google Photos一般版本,没有特殊要求。
  • SMS Messaging: 预装Android Messages一般版本,要求为设备上唯一的短信app,且位置要在Hotseat上
  • Browser浏览器 : 预装Chrome Browser一般版本,作为默认浏览器,且摆放在Hotseat位置。
  • Video Conferencing:预装Google Duo的一般版本,没有要求。
  • Google Feed: 预装google Feed,没有特殊要求。
  • Youtube: 预装一般版本或者Go版本,依据Go的Geo-table表格来判断,放在首页上。
  • Google Map :预装Google Maps go版本,只能在大于512M的设备上加入。
  • Files Go: 要求预装 Files Go,要求为设备上唯一的文件管理应用。

注意点:
1、Youtube&Youtube Go 依据Geo-table放置在主页面上

2、Messaging和Chrome需要放置在hotseat,其中Chrome要设置为默认浏览器

3、其他的按照一般GMS配置

4、Android Go不能出俄罗斯市场。

 

Android VTS测试

1、VTS简介

VTS的全称是 Vendor Test Suite(供应商测试套件)。

为何引入VTS测试?

目前Android的系统升级是很麻烦的,为了能更快的将设备升级到新的Android版本,Android O 开始新引入了 Project Treble,Project Treble 适用于搭载 Android O 及后续版本的所有新设备。

Android 7.x 及更早版本中没有正式的Vendor层接口,因此每次更新系统都相对耗时和困难:

 
treble_blog_before.png

Android O 之后,Treble 提供了稳定的Vendor层接口,供设备制造商访问 Android 代码中特定于硬件的部分,这样就可以只更新框架层,减少升级系统带来的成本和困难:

 
treble_blog_after.png

为了确保Vendor层实现的前向兼容性,新的Vendor层接口会由供应商测试套件 (VTS) 进行验证,该套件类似于兼容性测试套件 (CTS)

2、VTS测试流程

1)替换谷歌system.img

VTS测试要求刷入谷歌提供AOSP的system.img (GSI)。在user版本中,如果直接使用flash tool单独烧录GSI时,会导致无法开机。

之所以会出现这种问题,是由于在user/userdebug版本中,dm-verity是使能的,替换GSI后导致dm-verity不能通过。 如果要解决这个问题,就需要进行unlock操作,并且要用fastboot来刷入刷入谷歌提供的system.img .

具体操作如下:
    1. 在设置中打开 OEM unlocking 选项
    1. 在设置中打开 USB debugging 选项
    1. 长按音量 + 和电源键进入fastboot模式
    1. 连接到电脑上,分别执行fastboot flashing unlockfastboot oem unlock
      执行命令后需要选择音量 + 来确认unlock。
    1. 执行 fastboot 命令刷入google提供的 system.img (GSI):
      fastboot flash system system.img(需要根据软件版本的信息来选择GSI版本)
    1. 重启: fastboot reboot

2)VTS测试

Running VTS
主机端设置
  • 首先设置基本测试环境 GMS测试环境.
  • VTS测试环境配置:
    安装 Python 开发工具包:sudo apt-get install python-dev
    安装协议缓冲区工具(适用于 Python):sudo apt-get install python-protobuf protobuf-compiler
    安装 Python 虚拟环境相关工具:sudo apt-get install python-virtualenv python-pip
  • 下载并解压VTS测试工具
手机端设置
  • 擦除设备上的用户数据(即运行fastboot -w)。
  • 刷入谷歌提供的system.img (GSI),使用与设备的ABI相对应的GSI,是否支持A / B更新以及设备的security_patch_level:
    ABI A/B Non A/B security_patch_level
    Arm64 aosp_arm64_ab aosp_arm64_a Uses the format: [year][month][date]
    Arm32 aosp_arm_ab aosp_arm_a Uses the format: [year][month][date]
    x86_64 aosp_x86_64_ab aosp_x86_64_a Uses the format: [year][month][date]
    x86_32 aosp_x86_32_ab aosp_x86_32_a Uses the format: [year][month][date]
  • Android 8.x的设备不需要安装SIM卡,但是Android P及更高版本的设备将需要SIM卡进行VTS测试。
  • 确保手机可以连接到IPV6的wifi网络,如果设备具有GPS / Wi-Fi / Cellular功能,则必须重置设备并打开位置设置。
  • 通过usb将手机连接到电脑上,通过 adb shell 来保证可以正确的连接。
运行VTS测试
  • 打开终端命令行
  • 切换到android-vts路径下$ cd *installation-path*/android-vts/tools
  • 通过下面的命令来进入到vts的控制台$ .vts-tradefed
  • 运行vts的测试命令> run vts
VTS常用命令
  • 列出所有跑测结果> l r
  • 列出所有检测到或已知的设备> l d
  • 单跑某一个模块> run vts -m <模块名>
  • 单跑某个测试项> run vts -m <模块名> -t <测试项名>
  • 可用选项> run vts -s <device_id> --logcat-on-failure --screenshot-on-failure --shard-count <shards>‘-s <device_id>’:可指定运行测试的设备
    ‘–logcat-on-failure’:当测试失败时捕获logcat
    ‘–screenshot-on-failure’:当测试失败时截取屏幕截图
    ‘–shard-count <shards>’:用多个设备上同时跑测,可节省时间
  • 更多的命令可通过 help all 来查看: