เอกสารนี้อธิบายการแฮชอินเทอร์เฟซ HIDL ซึ่งเป็นกลไกป้องกันการเปลี่ยนแปลงอินเทอร์เฟซโดยไม่ตั้งใจ และตรวจสอบการเปลี่ยนแปลงอินเทอร์เฟซอย่างละเอียด ต้องใช้กลไกนี้เนื่องจากอินเทอร์เฟซ HIDL มีเวอร์ชัน ซึ่งหมายความว่าหลังจากเผยแพร่อินเทอร์เฟซแล้ว จะต้องไม่มีการเปลี่ยนแปลงใดๆ ยกเว้นในลักษณะที่เก็บ Application Binary Interface (ABI) ไว้ (เช่น การแก้ไขความคิดเห็น)
เลย์เอาต์
ไดเรกทอรีรูทของแพ็กเกจทุกไดเรกทอรี (เช่น android.hardware
ที่แมปกับ
hardware/interfaces
หรือ vendor.foo
ที่แมปกับ
vendor/foo/hardware/interfaces
) ต้องมีไฟล์ current.txt
ที่แสดงรายการไฟล์อินเทอร์เฟซ HIDL ที่เผยแพร่ทั้งหมด
# current.txt files support comments starting with a '#' character # this file, for instance, would be vendor/foo/hardware/interfaces/current.txt # Each line has a SHA-256 hash followed by the name of an interface. # They have been shortened in this doc for brevity but they are # 64 characters in length in an actual current.txt file. d4ed2f0e...995f9ec4 vendor.awesome.foo@1.0::IFoo # comments can also go here # types.hal files are also noted in current.txt files c84da9f5...f8ea2648 vendor.awesome.foo@1.0::types # Multiple hashes can be in the file for the same interface. This can be used # to note how ABI sustaining changes were made to the interface. # For instance, here is another hash for IFoo: # Fixes type where "FooCallback" was misspelled in comment on "FooStruct" 822998d7...74d63b8c vendor.awesome.foo@1.0::IFoo
หมายเหตุ: Google จะแยกไฟล์ HIDL current.txt
ออกเป็นส่วนต่างๆ เพื่อช่วยในการติดตามว่าแฮชแต่ละรายการมาจากที่ใด โดยส่วนที่ 1 คือเผยแพร่ใน Android 8 ส่วนถัดไปคือเผยแพร่ใน Android 8 MR1 เราขอแนะนําอย่างยิ่งให้ใช้เลย์เอาต์ที่คล้ายกันในไฟล์ current.txt
แฮชด้วย hidl-gen
คุณสามารถเพิ่มแฮชลงในไฟล์ current.txt
ด้วยตนเองหรือใช้ hidl-gen
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างคำสั่งที่คุณสามารถใช้กับ hidl-gen
เพื่อจัดการไฟล์ current.txt
(มีการย่อแฮช)
hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::types
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::typeshidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::INfc
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfchidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types 07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallbackhidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0 >> vendor/awesome/hardware/interfaces/current.txt
คำเตือน: อย่าแทนที่แฮชสำหรับอินเทอร์เฟซที่เผยแพร่ก่อนหน้านี้ เมื่อเปลี่ยนอินเทอร์เฟซดังกล่าว ให้เพิ่มแฮชใหม่ลงท้ายไฟล์ current.txt
ดูรายละเอียดได้ที่ความเสถียรของ ABI
ไลบรารีคําจํากัดความอินเทอร์เฟซทุกรายการที่ hidl-gen
สร้างขึ้นจะมีแฮช ซึ่งเรียกดูได้โดยเรียกใช้ IBase::getHashChain
เมื่อ hidl-gen
คอมไพล์อินเทอร์เฟซ ระบบจะตรวจสอบไฟล์ current.txt
ในไดเรกทอรีรูทของแพ็กเกจ HAL เพื่อดูว่า HAL มีการเปลี่ยนแปลงหรือไม่ โดยทำดังนี้
- หากไม่พบแฮชสําหรับ HAL ระบบจะถือว่าอินเทอร์เฟซนั้นยังไม่เผยแพร่ (อยู่ระหว่างการพัฒนา) และดำเนินการคอมไพล์ต่อ
- หากพบแฮช ระบบจะตรวจสอบแฮชกับอินเทอร์เฟซปัจจุบัน ดังนี้
- หากอินเทอร์เฟซตรงกับแฮช ระบบจะดำเนินการคอมไพล์ต่อ
- หากอินเทอร์เฟซไม่ตรงกับแฮช ระบบจะหยุดการคอมไพล์เนื่องจากมีการเปลี่ยนแปลงอินเทอร์เฟซที่เผยแพร่ก่อนหน้านี้
- สำหรับการเปลี่ยนแปลงที่รักษา ABI (ดูความเสถียรของ ABI) ไฟล์
current.txt
ต้องได้รับการแก้ไขก่อนการคอมไพล์จึงจะดำเนินการต่อได้ - การเปลี่ยนแปลงอื่นๆ ทั้งหมดควรทำในการอัปเกรดอินเทอร์เฟซเป็นเวอร์ชันย่อยหรือเวอร์ชันหลัก
- สำหรับการเปลี่ยนแปลงที่รักษา ABI (ดูความเสถียรของ ABI) ไฟล์
ความเสถียรของ ABI
ABI ประกอบด้วยการลิงก์แบบไบนารี/รูปแบบการเรียกใช้/ฯลฯ หาก ABI หรือ API มีการเปลี่ยนแปลง อินเทอร์เฟซจะไม่ทำงานกับ system.img
ทั่วไปที่คอมไพล์ด้วยอินเทอร์เฟซอย่างเป็นทางการอีกต่อไป
การตรวจสอบว่าอินเทอร์เฟซมีเวอร์ชันและ ABI ทำงานได้อย่างเสถียรนั้นสำคัญอย่างยิ่งด้วยเหตุผลหลายประการ ดังนี้
- การดำเนินการนี้ช่วยให้มั่นใจได้ว่าการติดตั้งใช้งานจะผ่านชุดทดสอบของผู้ให้บริการ (VTS) ซึ่งจะช่วยให้คุณดำเนินการ OTA เฉพาะเฟรมเวิร์กได้
- ในฐานะ OEM คุณจะจัดหา Board Support Package (BSP) ที่ใช้งานง่ายและเป็นไปตามข้อกำหนดได้
- ซึ่งจะช่วยให้คุณติดตามได้ว่าอินเทอร์เฟซใดบ้างที่เผยแพร่ได้ ลองพิจารณา
current.txt
แผนที่ของไดเรกทอรีอินเทอร์เฟซที่ช่วยให้คุณดูประวัติและสถานะของอินเทอร์เฟซทั้งหมดที่ระบุไว้ในรูทของแพ็กเกจได้
เมื่อเพิ่มแฮชใหม่สำหรับอินเทอร์เฟซที่มีรายการใน current.txt
อยู่แล้ว โปรดตรวจสอบว่าได้เพิ่มเฉพาะแฮชที่แสดงถึงอินเทอร์เฟซที่รักษาเสถียรภาพของ ABI ตรวจสอบการเปลี่ยนแปลงประเภทต่อไปนี้
อนุญาตการเปลี่ยนแปลง |
|
---|---|
ไม่อนุญาตให้เปลี่ยนแปลง |
|