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