ภาพรวมของ AIDL

Android Interface Definition Language (AIDL) เป็นเครื่องมือที่ทำให้ผู้ใช้สามารถแยก IPC ออกไปได้ เมื่อมีอินเทอร์เฟซ (ที่ระบุในไฟล์ .aidl) ระบบบิลด์ต่างๆ ใช้ไบนารี aidl เพื่อสร้างการเชื่อมโยง C++ หรือ Java เพื่อให้อินเทอร์เฟซนี้ใช้ข้ามกระบวนการได้ไม่ว่ารันไทม์หรือบิตจะเป็นอย่างไร

AIDL สามารถใช้ระหว่างกระบวนการใน Android ระหว่างคอมโพเนนต์ของแพลตฟอร์มหรือระหว่างแอป แต่ไม่ได้ใช้เป็น API สำหรับแอป ตัวอย่างเช่น อาจมีการใช้ AIDL เพื่อใช้งาน SDK API ในแพลตฟอร์ม แต่แพลตฟอร์ม SDK API จะไม่มี AIDL API โดยตรง ดูเอกสารประกอบเกี่ยวกับวิธีใช้ AIDL ระหว่างแอปต่างๆ โดยตรงได้ที่เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ Android ที่เกี่ยวข้อง เมื่อมีการใช้ AIDL ระหว่างคอมโพเนนต์ของแพลตฟอร์มที่อัปเดตแยกกัน เช่น APEXes (เริ่มตั้งแต่ Android 10) หรือ HAL (เริ่มตั้งแต่ Android 11) ต้องใช้ระบบการกำหนดเวอร์ชันที่เรียกว่า AIDL เวอร์ชันเสถียร

ตัวอย่าง

ตัวอย่างอินเทอร์เฟซ AIDL

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

กระบวนการของเซิร์ฟเวอร์จะลงทะเบียนอินเทอร์เฟซและแสดงการเรียกใช้ จากนั้นกระบวนการของไคลเอ็นต์จะเรียกใช้อินเทอร์เฟซเหล่านั้น ในหลายกรณี กระบวนการจะทำหน้าที่เป็นทั้งไคลเอ็นต์และเซิร์ฟเวอร์ เนื่องจากอาจทำการอ้างอิงอินเทอร์เฟซหลายๆ แบบ ดูรายละเอียดเพิ่มเติมเกี่ยวกับภาษา AIDL ได้ที่ภาษา AIDL ดูรายละเอียดเพิ่มเติมเกี่ยวกับรันไทม์ต่างๆ ที่พร้อมใช้งานอินเทอร์เฟซเหล่านี้ได้ที่แบ็กเอนด์ AIDL การประกาศประเภทเหล่านี้เหมือนกับการประกาศของชั้นเรียนในภาษาหนึ่งๆ แต่จะทำงานแบบข้ามกระบวนการ

วิธีการทำงาน

AIDL ใช้ไดรเวอร์ Kernel แบบเยนเดอร์เพื่อโทรออก เมื่อเรียกใช้ ระบบจะใส่ตัวระบุเมธอดและออบเจ็กต์ทั้งหมดลงในบัฟเฟอร์และคัดลอกไปยังกระบวนการระยะไกลที่เทรด Binder รออ่านข้อมูล เมื่อเทรด Binder ได้รับข้อมูลสำหรับธุรกรรม เทรดจะค้นหาออบเจ็กต์ Stub ดั้งเดิมในกระบวนการภายใน และคลาสนี้จะคลายการแพคข้อมูล และเรียกออบเจ็กต์อินเทอร์เฟซภายใน ออบเจ็กต์อินเทอร์เฟซในเครื่องนี้เป็นรายการที่กระบวนการของเซิร์ฟเวอร์สร้างและลงทะเบียน เมื่อเรียกใช้ด้วยกระบวนการเดียวกันและมีแบ็กเอนด์เดียวกัน จะไม่มีออบเจ็กต์พร็อกซีอยู่ ดังนั้นการเรียกใช้จึงโดยตรงโดยไม่มีการแพคข้อมูลหรือคลายการแพคข้อมูล

โต้ตอบกับบริการในอุปกรณ์

Android มีคำสั่งบางอย่างเพื่อให้โต้ตอบกับบริการในอุปกรณ์ได้ โดยคุณสามารถลองทำสิ่งต่อไปนี้

    adb shell dumpsys --help # listing and dumping services
    adb shell service --help # sending commands to services for testing