ชุดทดสอบผู้ให้บริการ (VTS) ของ Android 9 รองรับเมธอดรันไทม์สำหรับการใช้การกำหนดค่าอุปกรณ์เพื่อระบุว่าควรข้ามการทดสอบ 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 เครื่องมือในอุปกรณ์ที่แสดงข้อมูลรันไทม์เกี่ยวกับ
บริการ HAL ที่ลงทะเบียนกับ
hwservicemanagerตัวอย่างandroid.hardware.vibrator@1.0::IVibrator/default
lshalยังแสดง HAL ทั้งหมดที่มีการใช้งานแบบ Passthrough (เช่น มีไฟล์-impl.soที่เกี่ยวข้องใน อุปกรณ์) ตัวอย่างandroid.hardware.nfc@1.0::I*/* (/vendor/lib/hw/) android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)
การทดสอบการปฏิบัติตามข้อกำหนด
สำหรับการทดสอบการปฏิบัติตามข้อกำหนด VTS จะใช้ไฟล์ Manifest ของผู้ให้บริการเพื่อกำหนด (และ ทดสอบ) อินสแตนซ์ HAL ทั้งหมดที่อุปกรณ์ให้ไว้ ขั้นตอนการตัดสินใจ
การทดสอบการไม่ปฏิบัติตามข้อกำหนด
สำหรับการทดสอบการไม่ปฏิบัติตามข้อกำหนด VTS จะใช้ไฟล์ Manifest ของผู้ให้บริการและ
lshal เอาต์พุตเพื่อกำหนด (และทดสอบ) HAL ที่ทดลองใช้ซึ่งไม่ได้
อ้างสิทธิ์ในไฟล์ manifest.xml ขั้นตอนการตัดสินใจ
ค้นหาไฟล์ Manifest ของผู้ให้บริการ
VTS จะตรวจสอบไฟล์ manifest.xml ของผู้ให้บริการในตำแหน่งต่อไปนี้ตามลำดับ
/vendor/etc/vintf/manifest.xml+ ไฟล์ Manifest ของ ODM (หากมีการกำหนด HAL เดียวกันในทั้ง 2 ตำแหน่ง ไฟล์ Manifest ของ ODM จะลบล้างไฟล์ใน/vendor/etc/vintf/manifest.xml)/vendor/etc/vintf/manifest.xml- ไฟล์
manifest.xmlของ ODM ซึ่งโหลดจากไฟล์ต่อไปนี้ตามลำดับ/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
เพื่อโหลดและแยกวิเคราะห์ไฟล์ Manifest ของผู้ให้บริการ และใช้ขั้นตอนการตัดสินใจ
ที่อธิบายไว้ในส่วนก่อนหน้า
วิธีใช้ 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)