สถาปัตยกรรม Android

สถาปัตยกรรมระบบ Android ประกอบด้วยส่วนประกอบต่อไปนี้:

ภาพรวมของสถาปัตยกรรมระบบ Android
รูปที่ 1. สถาปัตยกรรมระบบ Android
  • กรอบการสมัคร . กรอบงานแอปพลิเคชันมักใช้โดยนักพัฒนาแอปพลิเคชัน ในฐานะนักพัฒนาฮาร์ดแวร์ คุณควรทราบ API ของนักพัฒนาเนื่องจากแมปโดยตรงไปยังอินเทอร์เฟซ HAL พื้นฐาน และสามารถให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับการนำไดรเวอร์ไปใช้
  • สารยึดเกาะ IPC กลไก Binder Inter-Process Communication (IPC) ช่วยให้เฟรมเวิร์กแอปพลิเคชันสามารถข้ามขอบเขตของกระบวนการและเรียกใช้รหัสบริการระบบ Android ซึ่งช่วยให้ API เฟรมเวิร์กระดับสูงโต้ตอบกับบริการระบบ Android ได้ ในระดับเฟรมเวิร์กของแอปพลิเคชัน การสื่อสารนี้ถูกซ่อนจากนักพัฒนา และสิ่งต่างๆ ดูเหมือนจะ "ใช้ได้"
  • บริการระบบ . บริการของระบบเป็นส่วนประกอบแบบโมดูลาร์ที่เน้น เช่น Window Manager, Search Service หรือ Notification Manager ฟังก์ชันที่เปิดเผยโดย API เฟรมเวิร์กของแอปพลิเคชันจะสื่อสารกับบริการของระบบเพื่อเข้าถึงฮาร์ดแวร์พื้นฐาน Android ประกอบด้วยบริการสองกลุ่ม: ระบบ (เช่น Window Manager และ Notification Manager) และ สื่อ (บริการที่เกี่ยวข้องกับการเล่นและสื่อบันทึก)
  • เลเยอร์นามธรรมของฮาร์ดแวร์ (HAL) HAL กำหนดอินเทอร์เฟซมาตรฐานสำหรับผู้จำหน่ายฮาร์ดแวร์เพื่อนำไปใช้ ซึ่งช่วยให้ Android สามารถไม่เชื่อเรื่องพระเจ้าเกี่ยวกับการใช้งานไดรเวอร์ระดับล่าง การใช้ HAL ช่วยให้คุณใช้งานฟังก์ชันต่างๆ ได้โดยไม่กระทบหรือแก้ไขระบบระดับที่สูงกว่า การใช้งาน HAL ถูกบรรจุลงในโมดูลและโหลดโดยระบบ Android ในเวลาที่เหมาะสม สำหรับรายละเอียด โปรดดูที่ Hardware Abstraction Layer (HAL)
  • ลินุกซ์เคอร์เนล การพัฒนาไดรเวอร์อุปกรณ์คล้ายกับการพัฒนาไดรเวอร์อุปกรณ์ Linux ทั่วไป Android ใช้เวอร์ชันของเคอร์เนล Linux ที่มีการเพิ่มเติมพิเศษบางอย่างเช่น Low Memory Killer (ระบบจัดการหน่วยความจำที่ก้าวร้าวมากขึ้นในการรักษาหน่วยความจำ), ล็อกปลุก (บริการระบบ PowerManager ), ไดรเวอร์ Binder IPC และคุณสมบัติอื่น ๆ ที่สำคัญ สำหรับแพลตฟอร์มฝังตัวสำหรับมือถือ ส่วนเพิ่มเติมเหล่านี้มีไว้สำหรับการทำงานของระบบเป็นหลัก และไม่ส่งผลต่อการพัฒนาไดรเวอร์ คุณสามารถใช้เคอร์เนลเวอร์ชันใดก็ได้ ตราบเท่าที่สนับสนุนคุณลักษณะที่จำเป็น (เช่น ไดรเวอร์ Binder) อย่างไรก็ตาม เราขอแนะนำให้ใช้เคอร์เนล Android เวอร์ชันล่าสุด สำหรับรายละเอียด โปรดดู การ สร้างเคอร์เนล

ภาษานิยามอินเทอร์เฟซ HAL (AIDL/HIDL)

Android 8.0 ได้ออกแบบโครงสร้างระบบปฏิบัติการ Android ใหม่ (ในโครงการที่เรียกว่า Treble ) เพื่อให้ผู้ผลิตอัปเดตอุปกรณ์เป็น Android เวอร์ชันใหม่ได้ง่ายขึ้น เร็วขึ้น และมีค่าใช้จ่ายน้อยลง ในสถาปัตยกรรมใหม่นี้ ภาษาคำจำกัดความของอินเทอร์เฟซ HAL (HIDL ออกเสียงว่า "hide-l") ระบุอินเทอร์เฟซระหว่าง HAL และผู้ใช้ ทำให้สามารถเปลี่ยนกรอบงาน Android ได้โดยไม่ต้องสร้าง HAL ขึ้นใหม่ ใน Android 10 ฟีเจอร์ HIDL ถูกรวมไว้ใน AIDL ตั้งแต่นั้นมา HIDL ถูกเลิกใช้และใช้งานโดยระบบย่อยที่ยังไม่ได้แปลงเป็น AIDL เท่านั้น

เสียงแหลมแยกการใช้งานผู้ขาย (เฉพาะอุปกรณ์ ซอฟต์แวร์ระดับล่างที่เขียนโดยผู้ผลิตซิลิคอน) ออกจากเฟรมเวิร์กระบบปฏิบัติการ Android ผ่านอินเทอร์เฟซใหม่ของผู้จำหน่าย ผู้ขายหรือผู้ผลิต SOC สร้าง HAL เพียงครั้งเดียวและวางไว้ในพาร์ติชั่น /vendor บนอุปกรณ์ กรอบงานในพาร์ติชั่นของตัวเองสามารถแทนที่ด้วยการ อัปเดตแบบ over-the-air (OTA) โดยไม่ต้องคอมไพล์ HAL ใหม่

ความแตกต่างระหว่างสถาปัตยกรรม Android รุ่นเก่าและสถาปัตยกรรมที่ใช้ IDL ปัจจุบันคือการใช้อินเทอร์เฟซของผู้ขาย:

  • ใน Android 7.x และรุ่นก่อนหน้า ไม่มีอินเทอร์เฟซของผู้จำหน่ายที่เป็นทางการ ดังนั้นผู้ผลิตอุปกรณ์ต้องอัปเดตโค้ด Android ส่วนใหญ่เพื่อย้ายอุปกรณ์ไปยัง Android เวอร์ชันใหม่กว่า:

    รูปที่ 2. สภาพแวดล้อมการอัพเดต Android รุ่นเก่า
  • ใน Android 8.0 ขึ้นไป อินเทอร์เฟซผู้ขายที่เสถียรใหม่ช่วยให้เข้าถึงส่วนต่างๆ เฉพาะฮาร์ดแวร์ของ Android ดังนั้นผู้ผลิตอุปกรณ์จึงสามารถส่งมอบ Android รุ่นใหม่ๆ ได้ง่ายๆ เพียงอัปเดตเฟรมเวิร์กระบบปฏิบัติการ Android โดยไม่ต้องทำงานเพิ่มเติมจากผู้ผลิตซิลิคอน:

    รูปที่ 3 สภาพแวดล้อมการอัปเดต Android ปัจจุบัน

อุปกรณ์ใหม่ทั้งหมดที่เปิดตัวพร้อมกับ Android 8.0 ขึ้นไปสามารถใช้ประโยชน์จากสถาปัตยกรรมใหม่ได้ เพื่อให้มั่นใจถึงความเข้ากันได้แบบไปข้างหน้าของการนำไปใช้ของผู้จำหน่าย อินเทอร์เฟซของผู้ขายได้รับการตรวจสอบโดย Vendor Test Suite (VTS) ซึ่งคล้ายกับความ เข้ากันได้ของชุดทดสอบความเข้ากันได้ (CTS) คุณสามารถใช้ VTS เพื่อทำการทดสอบเคอร์เนล HAL และ OS โดยอัตโนมัติในสถาปัตยกรรม Android รุ่นเก่าและปัจจุบัน

ทรัพยากรสถาปัตยกรรม

สำหรับรายละเอียดเกี่ยวกับสถาปัตยกรรม Android โปรดดูส่วนต่อไปนี้:

  • ประเภท HAL อธิบาย Binderized, Passthrough, Same-Process (SP) และ HAL ดั้งเดิม
  • เอ ไอดีแอล. เอกสารเกี่ยวกับ AIDL ไม่ว่าจะใช้โดยทั่วไปหรือเป็นส่วนต่อประสาน HAL
  • HIDL (ทั่วไป) . ประกอบด้วยข้อมูลทั่วไปเกี่ยวกับอินเทอร์เฟซระหว่าง HAL และผู้ใช้
  • HIDL (C++) . มีรายละเอียดสำหรับการสร้างการใช้งาน C++ ของอินเทอร์เฟซ HIDL
  • HIDL (จาวา) . มีรายละเอียดเกี่ยวกับส่วนหน้า Java สำหรับอินเตอร์เฟส HIDL
  • ConfigStore HAL อธิบาย API สำหรับการเข้าถึงรายการการกำหนดค่าแบบอ่านอย่างเดียวที่ใช้ในการกำหนดค่าเฟรมเวิร์ก Android
  • การ ซ้อนทับแผนผังอุปกรณ์ ให้รายละเอียดเกี่ยวกับการใช้การซ้อนทับแผนผังอุปกรณ์ (DTO) ใน Android
  • ชุดพัฒนา Native ของผู้ขาย (VNDK) อธิบายชุดของไลบรารีเฉพาะผู้จำหน่ายสำหรับการนำ HAL ของผู้จำหน่ายไปใช้
  • วัตถุส่วนต่อประสานผู้ขาย (VINTF) อธิบายอ็อบเจ็กต์ที่รวบรวมข้อมูลที่เกี่ยวข้องเกี่ยวกับอุปกรณ์และทำให้ข้อมูลนั้นพร้อมใช้งานผ่าน API ที่สืบค้นได้
  • SELinux สำหรับ Android 8.0 . รายละเอียดการเปลี่ยนแปลงและการปรับแต่ง SELinux

นอกเหนือจากแหล่งข้อมูลในไซต์นี้ สมาชิกของทีม Treble ได้เผยแพร่ Treble: Fast Software Updates โดยการสร้างสมดุลในระบบนิเวศซอฟต์แวร์ที่ใช้งานอยู่ของผู้มีส่วนได้ส่วนเสียทั่วโลก กระดาษนี้ฟรีสำหรับสมาชิก ACM และผู้ที่ไม่ใช่สมาชิกสามารถซื้อหรืออ่านบทคัดย่อได้