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

 

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测试工具右上角的保存按钮,会提示结果保存位置,连接电脑,将结果拷贝到电脑即可查看。

 

配置CTS测试环境

设置 CTS

物理环境


蓝牙 LE 信标

如果 DUT 支持蓝牙 LE 功能,则应在与 DUT 的距离不超过五米的范围内放置至少三个蓝牙 LE 信标,以进行蓝牙 LE 扫描测试。这些信标可以为任何类型,不需要进行配置或发射任何特定信号,并且可以包括 iBeacon、Eddystone,甚至模拟 BLE 信标的设备。

GPS/GNSS

如果 DUT 支持全球定位系统 (GPS)/全球导航卫星系统 (GNSS) 功能,则应该以合适的信号电平向 DUT 提供 GPS/GNSS 信号(GPS 部分符合 ICD-GPS-200C 标准),以便其接收到相应信号并计算 GPS 位置。GPS/GNSS 信号源的种类不限(可以是卫星模拟器,也可以是室外 GPS/GNSS 信号中继器),只需将 DUT 放在距离窗口足够近的位置以使其可以直接接收到足够强的 GPS/GNSS 信号即可。

WLAN 和 IPv6

CTS 测试需要满足以下要求的 WLAN 网络:支持 IPv6,可以将被测设备 (DUT) 视为隔离客户端,并可以连接到互联网。隔离客户端是一种配置,可使 DUT 无法接收子网络上的广播/多网消息;这种配置可通过 WLAN AP 配置或通过在未连接其他设备的隔离子网络上运行 DUT 来实现。

如果您无法访问原生 IPv6 网络、IPv6 运营商网络或 IPv6 VPN,以致无法通过基于 IPv6 的一些测试,则可以改为使用 WLAN 接入点和 IPv6 隧道。请参阅维基百科 IPv6 隧道代理列表

台式机设置


ADB 和 AAPT

在运行 CTS 之前,请确保您已安装最新版本的 Android 调试桥 (adb) 和 Android 资源打包工具 (AAPT),并将这些工具的位置添加到计算机的系统路径中。

要安装 ADB,请下载适用于您的操作系统的 Android SDK 工具包,打开它,然后按照附带的 README 文件中的说明进行操作。要了解问题排查相关信息,请参阅安装独立 SDK 工具

确保 adb 和 aapt 位于您的系统路径下。以下命令假定您已在主目录中打开了软件包归档文件:


export PATH=$PATH:$HOME/android-sdk-linux/build-tools/<version>

注意:请确保起始路径和目录名称均准确无误。

Java 开发套件 (JDK)

安装正确版本的 Java 开发套件 (JDK)。对于 Android 7.0 –

如需了解详情,请参阅 JDK 要求

CTS 文件

下载并打开与您设备的 Android 版本以及您的设备支持的所有应用二进制接口 (ABI) 相匹配的 CTS 包。

下载并打开最新版本的 CTS 媒体文件

设备检测

请按照相应的步骤设置您的系统以检测设备,例如为 Ubuntu Linux 创建 udev 规则文件。

Android 设备设置


用户版本

兼容的设备被定义为具有 user/release-key 签名版本的设备,因此您的设备应运行基于代号、标签和版本号中已知兼容的用户版本(Android 4.0 及更高版本)的系统映像。

注意:使用 CTS 确认最终系统映像的 Android 兼容性时,您必须在具有用户版本的设备上执行 CTS。

初始 API 级别版本属性

某些 CTS 要求取决于设备最初搭载的版本。例如,如果设备最初搭载的是较低的版本,则不一定需要遵循适用于搭载较高版本的设备的系统要求。

为了保证 CTS 可读取到这些信息,设备制造商可以定义编译时属性:ro.product.first_api_level。该属性的值是对该设备进行商业化发布时所采用的初始 API 级别。

OEM 可以将 PRODUCT_PROPERTY_OVERRIDES 添加到其 device.mk 文件以设置这项属性,具体如以下示例所示:

#ro.product.first_api_level indicates the first api level, device has been commercially launched on.
PRODUCT_PROPERTY_OVERRIDES +=
ro.product.first_api_level=21

CTS Shim 应用

Android 7.0 包含以下预编译的应用(根据此处的源代码编译),这些应用不包含除清单以外的任何代码:

CTS 会使用这些应用来测试特权和权限。要通过测试,您必须将应用预加载到系统映像上的相应目录下,但不能对它们重新签名。

存储空间要求

CTS 媒体压力测试要求将视频剪辑存放在外部存储设备 (/sdcard) 上。大部分剪辑来自 Big Buck Bunny,其版权归 Blender Foundation 所有并采用 Creative Commons Attribution 3.0 许可

所需空间取决于设备支持的最高视频播放分辨率(要查看所需分辨率的平台版本,请参阅兼容性定义文档中的第 5 部分)。请注意,被测设备的视频播放功能将通过 android.media.CamcorderProfile API(针对早期 Android 版本)和 android.media.MediaCodecInfo.CodecCapabilities API(针对 Android 5.0)进行检测。

以下是按最大视频播放分辨率列出的存储空间要求:

  • 480×360:98 MB
  • 720×480:193 MB
  • 1280×720:606 MB
  • 1920×1080:1863 MB

屏幕和存储空间

  1. 任何没有嵌入式屏幕的设备一律需要连接到屏幕。
  2. 如果设备具有存储卡插槽,请插入空的 SD 卡。请使用支持超高速 (UHS) 总线且具有 SDHC 或 SDXC 容量的 SD 卡,或使用至少具有 Class 10 速度的 SD 卡,以确保设备能够通过 CTS。

    警告:CTS 可能会修改/清空插入设备的 SD 卡上的数据。

  3. 如果设备具有 SIM 卡插槽,请将激活的 SIM 卡插入每个插槽。如果设备支持短信,则应填充每个 SIM 卡的号码字段。

开发者 UICC

为了执行 CTS 运营商 API 测试,该设备需要使用运营商授权的 SIM 卡。请参阅准备 UICC

Android 设备配置


  1. 将设备恢复出厂设置:设置 > 备份和重置 > 恢复出厂设置

    警告:这将清空设备中的所有用户数据。

  2. 将设备的语言设置为英语(美国):设置 > 语言和输入法 > 语言
  3. 如果设备具有 GPS 或 WLAN/移动网络功能,则打开位置信息设置:设置 > 位置信息 > 开启
  4. 连接到满足以下要求的 WLAN 网络:支持 IPv6,可以将被测设备 (DUT) 视为隔离的客户端(请参阅上文的物理环境部分),并可以连接到互联网:设置 > WLAN
  5. 确保设备上未设置锁定图案或密码:设置 > 安全 > 屏幕锁定 > 无
  6. 在设备上启用 USB 调试设置 > 开发者选项 > USB 调试

    注意:在 Android 4.2 及更高版本中,默认情况下会隐藏开发者选项。要显示这些选项,请依次转到设置 > 关于手机,然后点按版本号七次。返回上一屏幕以查找开发者选项。要查看其他详细信息,请参阅启用设备上的开发者选项

  7. 确保将时间设置为 12 小时格式:设置 > 日期和时间 > 使用 24 小时制 > 关闭
  8. 依次选择:设置 > 开发者选项 > 不锁定屏幕 > 开启
  9. 依次选择:设置 > 开发者选项 > 允许模拟位置 > 开启

    注意:此模拟位置设置仅适用于 Android 5.x 和 4.4.x。

  10. 依次选择:设置 > 开发者选项 > 通过 USB 验证应用 > 关闭

    注意:此验证应用步骤在 Android 4.2 中为必需步骤。

  11. 启动浏览器并关闭任何启动/设置屏幕。
  12. 使用 USB 数据线连接用于测试设备的台式机

    注意:将运行 Android 4.2.2 或更高版本的设备连接到计算机时,系统会显示一个对话框,询问您是否接受允许通过此计算机进行调试的 RSA 密钥。选择“允许 USB 调试”。

  13. 在设备上安装和配置帮助程序应用。

    注意:对于 CTS 版本 2.1 R2 至 4.2 R4,请通过以下命令设置您的设备(或模拟器),以便执行无障碍测试:
    adb install -r android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk
    在设备上,依次启用:设置 > 无障碍 > 无障碍 > Delegating Accessibility Service

    注意:对于 7.0 之前的 CTS 版本,请在声明 android.software.device_admin 的设备上,使用以下命令设置您的设备,以便执行设备管理测试:
    adb install -r android-cts/repository/testcases/CtsDeviceAdmin.apk

    依次选择“设置”>“安全”>“设备管理器”,然后启用两个 android.deviceadmin.cts.CtsDeviceAdminReceiver* 设备管理器。确保 android.deviceadmin.cts.CtsDeviceAdminDeactivatedReceiver 和任何其他预加载的设备管理器均保持停用状态。

  14. 将 CTS 媒体文件复制到设备上,如下所示:

    注意:对于 CTS 2.3 R12 及更高版本,如果设备支持视频编解码器,则必须将 CTS 媒体文件复制到设备上。

    • 导航 (cd) 到下载并解压缩媒体文件的目标路径。
    • 更改文件权限:chmod u+x copy_media.sh
    • 运行 copy_media.sh
      • 要复制分辨率不超过 720×480 的剪辑,请运行:./copy_media.sh 720x480
      • 如果您不确定最大分辨率,请尝试运行 ./copy_media.sh all,以便复制所有文件。
      • 如果 adb 下有多个设备,请将 -s(序列号)选项添加到末尾。例如,要将分辨率不超过 720×480 的文件复制到序列号为 1234567 的设备,请运行:./copy_media.sh 720x480 -s 1234567