เอกสารนี้อธิบายการแฮชอินเทอร์เฟซ 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
ออกเป็นส่วนต่างๆ: ส่วนแรก เปิดตัวใน Android O ; ส่วนถัดไปจะ เปิดตัวใน Android O 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 ) ต้องแก้ไขไฟล์
ความมั่นคงของเอบีไอ
Application Binary Interface (ABI) รวมถึงการเชื่อมโยงไบนารี/แบบแผนการเรียก/อื่นๆ หาก ABI/API เปลี่ยนแปลง อินเทอร์เฟซจะไม่ทำงานกับ system.img
ทั่วไปที่คอมไพล์ด้วยอินเทอร์เฟซอย่างเป็นทางการอีกต่อไป
ตรวจสอบให้แน่ใจว่าอินเทอร์เฟซได้รับการกำหนดเวอร์ชันและ ABI เสถียรเป็น สิ่งสำคัญ ด้วยเหตุผลหลายประการ:
- ช่วยให้มั่นใจว่าการใช้งานของคุณสามารถผ่าน Vendor Test Suite (VTS) ซึ่งทำให้คุณสามารถดำเนินการ OTA เฉพาะเฟรมเวิร์กได้
- ในฐานะ OEM คุณสามารถจัดเตรียมแพ็คเกจสนับสนุนบอร์ด (BSP) ที่ใช้งานได้ง่ายและเป็นไปตามข้อกำหนด
- ช่วยให้คุณติดตามว่าอินเทอร์เฟซใดบ้างที่สามารถเผยแพร่ได้ พิจารณา
current.txt
แผนผังของไดเร็กทอรีอินเทอร์เฟซที่ช่วยให้คุณเห็นประวัติและสถานะของอินเทอร์เฟซทั้งหมดที่มีให้ในรูทแพ็กเกจ
เมื่อเพิ่มแฮชใหม่สำหรับอินเทอร์เฟซที่มีรายการใน current.txt
อยู่แล้ว ตรวจสอบให้แน่ใจว่าได้เพิ่มเฉพาะแฮชที่แสดงถึงอินเทอร์เฟซที่รักษาความเสถียรของ ABI ตรวจสอบการเปลี่ยนแปลงประเภทต่อไปนี้:
อนุญาตให้เปลี่ยนแปลงได้ |
|
---|---|
ไม่อนุญาตให้เปลี่ยนแปลง |
|