ภาพรวม AIDL, ภาพรวม AIDL

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

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

ตัวอย่าง

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

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

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

มันทำงานอย่างไร

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

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

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

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