VTS測試

Android 8.0引入了Project Treble的新特性,它的主要目標(biāo)是將Android模塊化,在這一特性的要求下,就產(chǎn)生了VTS測試。

VTS全稱是Vendor Test Suite,Project Treble中引入Vendor Interface的目的是將Android Framework與HAL分開,并通過VTS測試來對這些Vendor Interface進行測試以確保HAL的向前兼容。

盡管APP層與Framework層在設(shè)計上是分開的,但通過CTS測試,確保了APP與Android Framework之間有一致的調(diào)用接口(API),這使得APP開發(fā)者編寫的同一款程序可以運行在不同系統(tǒng)版本(向前兼容)、不同硬件平臺、不同廠商制造的不同設(shè)備上。

VTS類似CTS,通過對Vendor Interface進行測試,確保同一個版本的Android Framework可以運行在不同HAL上,或不同Android Framework可以運行在同一個HAL上。


2. 環(huán)境配置

2.1 安裝Java 8

sudo apt-get purge openjdk-* icedtea-* icedtea6-*

sudo apt-get update

sudo apt-get install openjdk-8-jdk

2.2 安裝Android需要的工具

sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip liblz4-tool

2.3 拉取AOSP代碼(可選)

repo init -u https://android.googlesource.com/platform/manifest -b android-vts-8.0_r6

repo sync

2.4 安裝VTS需要的工具

sudo apt-get install python-dev

sudo apt-get install python-protobuf

sudo apt-get install protobuf-compiler

sudo apt-get install python-virtualenv

sudo apt-get install python-pip

3. GSI

GSI是Google AOSP System Image的簡稱,在進行VTS測試之前,要使用user版本關(guān)閉verified boot后刷入GSI,VTS測試用的GSI由谷歌釋放,它的命名規(guī)則如下:


如VTS r6版本的GSI鏡像:


其中,安全補丁日期在手機的Settings -> System -> About phone中查看,或者使用命令getprop查看ro.build.version.security_patch屬性,如果刷入的GSI安全補丁日期與手機的安全補丁日期不對應(yīng),會導(dǎo)致keymaster崩潰等問題,系統(tǒng)無法啟動。


A/B或者是A-only分區(qū)可以直接查看源碼中的partition.xml文件,如果system、vendor等分區(qū)的label有”_a”和”_b“的后綴,說明是A/B分區(qū),或者使用命令getprop查看ro.boot.slot_suffix的屬性,如果返回”_a”或者”_b”,也可以說明是A/B分區(qū),否則就是A-only的分區(qū)。


刷入GSI的命令如下:

fastboot –S 256M flash system

fastboot –w

fastboot flash userdata userdata.img

//userdata分區(qū)大小與鏡像文件大小不同時需要使用此命令

在刷入GSI之后,可能會遇到無法啟動的問題,比如:

1. VTS r3之前版本的GSI由于system分區(qū)的根目錄下缺少bt_firmware文件夾,而fstab中要將/dev/block/bootdevice/by-name/bluetooth分區(qū)掛載到bt_firmware下面,因此會導(dǎo)致掛載失敗系統(tǒng)無法啟動,要解決這個問題需要手動創(chuàng)建bt_firmware文件夾,命令如下:

? ? ? adb remount

? ? ? adb shell

? ? ? mkdir bt_firmware

? ? ? chown bluetooth bt_firmware

? ? ? ? chgrp net_bt bt_firmware

? ? ? ? adb reboot

2.? 在刷入GSI以后,開機卡在Android界面,此時插入USB有adb接口,通過logcat查看發(fā)現(xiàn)缺少庫文件導(dǎo)致進程crash,如果跟需要測試的模塊無關(guān),可以先嘗試手動push庫文件看能否啟動,之后根據(jù)進程和缺少的庫文件,可以分為三種情況:

1)? 第一種情況是高通將庫文件編譯到了system目錄下,刷入GSI后vendor進程找不到這些庫文件導(dǎo)致crash,解決方法是修改makefile將需要的庫文件編譯到vendor分區(qū)下,在Android.mk中添加LOCAL_VENDOR_MODULE := true。

2)? 第二種情況是一些本來應(yīng)該在GSI里面的庫文件沒有編譯進去,vendor或者system下的進程找不到這些庫文件導(dǎo)致crash,解決方法只能是測試前手動將庫文件push到system分區(qū)下,而不要添加LOCAL_VENDOR_MODULE := true,等待后續(xù)的VTS版本GSI鏡像解決,為了確認(rèn)錯誤具體是第一種還是第二種情況,需要向高通提case詢問,也可以在https://issuetracker.google.com/issues和https://android-review.googlesource.com/上搜索相關(guān)信息。

3)? 第三種情況是由于我們的修改讓vendor里面的進程依賴了額外的庫文件,而這些依賴的庫文件又在system目錄下,刷入GSI以后消息,導(dǎo)致進程crash,如QL1661項目中,camera的前置閃光燈功能添加了一個system分區(qū)下的進程vendor.android.hardware.light@2.0_vendor,而這個進程又添加到了vendor下android.hardware.light@2.0-service的共享庫,因此當(dāng)刷入GSI以后,android.hardware.light@2.0-service找不到vendor.android.hardware.light@2.0_vendor,導(dǎo)致無法開機。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、VTS簡介 VTS的全稱是 Vendor Test Suite(供應(yīng)商測試套件)。 為何引入VTS測試? 目前...
    Darkt閱讀 33,819評論 15 17
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,166評論 0 3
  • 記錄了android vts測試中遇到的一些常見問題,記錄如下: 一 vts可以單獨跑一個case ,比如 run...
    Little熊貓閱讀 4,127評論 0 0
  • [TOC] 以下內(nèi)容基于Android 8.0 Project Treble Project treble是And...
    Joe_HUST閱讀 3,190評論 0 1
  • 一、文件/文件夾管理 ls 列出當(dāng)前目錄文件(不包括隱含文件)ls -a 列出當(dāng)前目錄文件(包括隱含文件)l...
    路癡千行閱讀 2,620評論 0 5

友情鏈接更多精彩內(nèi)容