Android 9 供應商測試套件 (VTS) 支援執行階段方法,可使用裝置設定來識別應為該裝置目標略過哪些 VTS 測試。
VTS 測試彈性
自 Android 8.0 起,凡是搭載 Android 8.0 以上版本的裝置,都必須通過 VTS 測試。不過,並非所有 VTS 測試都適用於所有裝置目標。例如:
- 如果特定裝置不支援測試 HAL (例如 IR),VTS 就不需要在該裝置目標上執行該 HAL 的測試。
- 如果多部裝置共用相同的 SoC 和供應商映像檔,但硬體功能不同,VTS 必須判斷是否應為特定裝置目標執行或略過測試。
VTS 測試類型
VTS 包含下列測試類型:
- 相容性測試可確保架構與供應商分割區相容。如果裝置搭載 Android 8.0 以上版本,就必須執行並通過這些測試。
- 不符規定測試可協助供應商提升產品品質 (效能/模糊測試等)。供應商可選擇是否要進行這些測試。
測試是否為相容性測試,取決於測試所屬的方案。使用 VTS 計畫執行的測試視為相容性測試。
判斷支援的 HAL
VTS 可以使用下列檔案,判斷裝置目標是否支援特定 HAL:
/system/compatibility_matrix.xml
。聲明架構所需的 HAL 執行個體。範例如下:<hal format="hidl" optional="true"> <name>android.hardware.vibrator</name> <version>1.0-1</version> <interface> <name>IVibrator</name> <instance>default</instance> </interface> </hal>
optional
屬性會指出架構是否嚴格要求 HAL。- 檔案可能包含相同 HAL 的多個項目 (名稱相同),但版本和介面不同。
- 檔案可能包含相同項目的多個
version
設定,表示架構可搭配不同版本運作。 version1.0-1
表示架構可搭配最低版本 1.0 使用,且不需要高於 1.1 的版本。
- 裝置
manifest.xml
。聲明供應商提供的 HAL 執行個體。範例如下:<hal format="hidl"> <name>android.hardware.vibrator</name> <transport>hwbinder</transport> <version>1.2</version> <interface> <name>IVibrator</name> <instance>default</instance> </interface> </hal>
- 檔案可能包含相同 HAL 的多個項目 (名稱相同),但版本和介面不同。
- 如果檔案只包含單一項目的
version
設定,version1.2
表示供應商支援 1.0 至 1.2 的所有版本。
- lshal。裝置上的工具,可顯示向
hwservicemanager
註冊的 HAL 服務相關執行階段資訊。範例如下:android.hardware.vibrator@1.0::IVibrator/default
lshal
也會顯示所有具有直通實作項目的 HAL (也就是裝置上具有對應的-impl.so
檔案)。範例如下:android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/) android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)
法規遵循測試
在相容性測試中,VTS 會依據供應商資訊清單,判斷 (並測試) 裝置提供的所有 HAL 執行個體。決策流程:
不符規定測試
對於不符規範的測試,VTS 會依據供應商資訊清單和 lshal
輸出內容,判斷 (並測試) manifest.xml
檔案中未聲明的實驗性 HAL。決策流程:
找出供應商資訊清單
VTS 會依下列順序,在下列位置檢查供應商 manifest.xml
檔案:
/vendor/etc/vintf/manifest.xml
+ ODM 資訊清單 (如果兩處都定義了相同的 HAL,ODM 資訊清單會覆寫/vendor/etc/vintf/manifest.xml
中的 HAL)/vendor/etc/vintf/manifest.xml
- ODM
manifest.xml
檔案,依下列順序從下列檔案載入:/odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml
/odm/etc/vintf/manifest.xml
/odm/etc/manifest_$(ro.boot.product.hardware.sku).xml
/odm/etc/manifest.xml
/vendor/manifest.xml
VTS 可測試性檢查工具
vts_testibility_checker
是與 VTS 一併封裝的二進位檔,VTS 測試架構會在執行階段使用這個檔案,判斷特定 HAL 測試是否可測試。這個函式庫會根據 libvintf
載入及剖析供應商資訊清單檔案,並實作上一節所述的決策流程。
如何使用「vts_testability_check
」:
- 如要進行法規遵循測試:
vts_testability_check -c -b <bitness> <hal@version>
- 如要進行不符規定測試:
vts_testability_check -b <bitness> <hal@version>
vts_testability_check
的輸出內容會使用下列 JSON 格式:
{testable: <True/False> Instances: <list of instance names of HAL service>}
判斷存取的 HAL
如要判斷 VTS 測試存取哪些 HAL,請確保每個 HAL 測試都使用 VtsHalHidlTargetTestEnvBase
範本,註冊測試中存取的 HAL。VTS 測試架構接著會在預先處理測試時,擷取已註冊的 HAL。
如要進行法規遵循測試,也可以查看/system/etc/vintf/manifest.xml
。如果在此定義 HAL,VTS 應會測試該 HAL。(如果是系統提供的 HAL 服務 (例如 graphics.composer/vr
),HAL 會在 /system/manifest.xml
中宣告)。