ชุดเครื่องมือทดสอบของผู้ให้บริการ (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 ทั้งหมดที่มีการใช้งานการผ่าน (นั่นคือมีไฟล์-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 ที่เข้าถึง
หากต้องการดูว่า HAL ใดที่การทดสอบ VTS เข้าถึง ให้ตรวจสอบว่าแต่ละการทดสอบ HAL ใช้เทมเพลต VtsHalHidlTargetTestEnvBase
เพื่อลงทะเบียน HAL ที่เข้าถึงในการทดสอบ จากนั้นเฟรมเวิร์กการทดสอบ VTS จะดึงข้อมูล HAL ที่ลงทะเบียนไว้เมื่อประมวลผลข้อมูลก่อนการทดสอบ
สําหรับการทดสอบการปฏิบัติตามข้อกําหนด คุณสามารถตรวจสอบ
/system/etc/vintf/manifest.xml
หากมีการกําหนด HAL ไว้ที่นี่ VTS ควรทดสอบ HAL (สำหรับบริการ HAL ที่ระบบมีให้ (เช่น graphics.composer/vr
) ระบบจะประกาศ HAL ใน /system/manifest.xml
)