เวอร์ชัน Android 8.0 ย้ายการจัดการคำสั่ง USB ออกจากสคริปต์init
ไปไว้ในเดมอน USB ดั้งเดิมเพื่อให้การกำหนดค่าและความน่าเชื่อถือของโค้ดดีขึ้น สําหรับการกําหนดค่าฟังก์ชันของแก็ดเจ็ต ระบบจะใช้init
สคริปต์ (ทริกเกอร์พร็อพเพอร์ตี้) เพื่อดําเนินการกับแก็ดเจ็ตเฉพาะอุปกรณ์
ในรุ่นก่อนหน้า การกําหนดค่าเฉพาะอุปกรณ์เหล่านี้ทำได้ผ่านสคริปต์ init
เฉพาะอุปกรณ์ (โดยใช้ทริกเกอร์พร็อพเพอร์ตี้) การเปลี่ยนไปใช้การออกแบบเลเยอร์การแยกแยะฮาร์ดแวร์ (HAL) ส่งผลให้การติดตั้งใช้งานมีความเรียบร้อยมากขึ้นและแก้ปัญหาต่อไปนี้ได้
- การดำเนินการต่างๆ เช่น การเขียนไปยังโหนด sysfs ของเคอร์เนลอาจไม่สำเร็จ แต่จะไม่นำไปใช้กับโค้ดเฟรมเวิร์กที่กำหนดทริกเกอร์พร็อพเพอร์ตี้ ด้วยเหตุนี้ เฟรมเวิร์กจึงเข้าใจผิดว่าการดำเนินการสําเร็จ แม้ว่าจะดำเนินการไม่สําเร็จโดยที่ผู้ใช้ไม่รู้ตัว
- สคริปต์
init
ดําเนินการได้จํานวนจำกัด
เวอร์ชัน Android 12 เพิ่มการรองรับ HAL ของอุปกรณ์ต่อพ่วง USB สำหรับรูปแบบการควบคุมเครือข่าย (NCM) และการเรียก API ที่แสดงทั้งหมายเลขเวอร์ชัน HAL และความเร็ว USB ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียก API ที่พร้อมใช้งานผ่าน USB HAL ได้ที่ข้อมูลสรุปแพ็กเกจ android.hardware.usb
HAL และ Treble
มีการใช้สคริปต์ init
สำหรับอุปกรณ์เฉพาะแทนเลเยอร์ HAL เพื่อดำเนินการ USB สำหรับอุปกรณ์เฉพาะ USB (ผ่าน ADB) เป็นอินเทอร์เฟซหลักสำหรับการแก้ไขข้อบกพร่องของระบบ การมี Daemon เนทีฟที่จะทำการกําหนดค่า USB จะช่วยขจัดข้อจํากัดในการพึ่งพาโค้ดเฟรมเวิร์ก ดังนั้น USB จะยังคงทํางานได้แม้ว่าเฟรมเวิร์กจะขัดข้อง
ภายใต้รูปแบบ Treble ที่เปิดตัวใน Android 8.0 ด้วยเช่นกัน HAL ทั้งหมดจะแยกออกจากบริการของระบบและต้องทำงานใน Daemon ของตัวเอง ซึ่งทำให้ไม่ต้องมีเดรัม USB โดยเฉพาะเนื่องจากเลเยอร์ HAL ทำหน้าที่เป็นเดรัม USB ได้อย่างดี
การใช้งาน HAL เริ่มต้นจะดูแลอุปกรณ์ทั้งหมดก่อน Android 8.0 ดังนั้น อุปกรณ์ก่อน Android 8.0 จึงไม่ต้องดำเนินการใดๆ ที่เจาะจงอุปกรณ์ Android 8.0 ใช้อินเทอร์เฟซ HAL เพื่อค้นหาสถานะของพอร์ต USB และเพื่อสลับบทบาทของข้อมูลและบทบาทของพลังงาน
การใช้งาน
ต้องใช้อินเทอร์เฟซ HAL ของ USB ใหม่ในอุปกรณ์ทุกเครื่องที่เปิดตัวใน Android 8.0
การใช้งานเริ่มต้นควรรองรับอุปกรณ์ก่อน Android 8.0 การใช้งานเริ่มต้นก็เพียงพอแล้วหากอุปกรณ์ใช้คลาส dual_role_usb
เพื่อรายงานสถานะพอร์ต Type-C คุณอาจต้องทำการเปลี่ยนแปลงเล็กน้อยในสคริปต์ USB สำหรับอุปกรณ์โดยเฉพาะเพื่อโอนการเป็นเจ้าของโหนด typc-c ไปยังระบบ