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) ต้องใช้ระบบการกำหนดเวอร์ชันที่เรียกว่า AIDL ที่เสถียร
ตัวอย่าง
ตัวอย่างอินเทอร์เฟซ AIDL มีดังนี้
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
กระบวนการของเซิร์ฟเวอร์จะลงทะเบียนอินเทอร์เฟซและให้บริการเรียกใช้อินเทอร์เฟซนั้น และกระบวนการของไคลเอ็นต์จะเรียกใช้อินเทอร์เฟซเหล่านั้น ในหลายกรณี กระบวนการจะทำหน้าที่เป็นทั้ง ไคลเอ็นต์และเซิร์ฟเวอร์ เนื่องจากอาจจะอ้างอิงอินเทอร์เฟซหลายอินเทอร์เฟซ ดูรายละเอียดเพิ่มเติมเกี่ยวกับภาษา AIDL ได้ที่ภาษา AIDL สำหรับรายละเอียดเพิ่มเติม เกี่ยวกับรันไทม์ต่างๆ ที่พร้อมใช้งานอินเทอร์เฟซเหล่านี้ โปรดดู แบ็กเอนด์ AIDL การประกาศประเภทเหล่านี้เหมือนกับการประกาศคลาสในภาษาหนึ่งๆ แต่ใช้ได้กับทุกกระบวนการ
วิธีการทำงาน
AIDL ใช้ไดรเวอร์ Kernel แบบเยนเดอร์เพื่อโทรออก เมื่อคุณทำการเรียกใช้ ระบบจะแพ็กตัวระบุเมธอดและออบเจ็กต์ทั้งหมดลงในบัฟเฟอร์และคัดลอกไปยังกระบวนการระยะไกลที่เธรด Binder รออ่านข้อมูล เมื่อแฟ้ม เทรดได้รับข้อมูลสำหรับธุรกรรม เทรดจะค้นหาออบเจ็กต์สตับดั้งเดิม ในกระบวนการภายในระบบ และคลาสนี้จะคลายการแพคข้อมูลและทำการเรียกใน ออบเจ็กต์อินเทอร์เฟซภายในเครื่อง ออบเจ็กต์อินเทอร์เฟซภายในนี้คือออบเจ็กต์ที่กระบวนการของเซิร์ฟเวอร์สร้างขึ้นและลงทะเบียน เมื่อมีการเรียกใช้ในกระบวนการเดียวกันและแบ็กเอนด์เดียวกัน จะไม่มีออบเจ็กต์พร็อกซีอยู่ ดังนั้นการเรียกใช้จึงเป็นแบบโดยตรงโดยไม่ต้องมีการจัดแพ็กหรือแกะแพ็ก
โต้ตอบกับบริการในอุปกรณ์
Android มีคำสั่งบางอย่างที่อนุญาตให้โต้ตอบกับบริการในอุปกรณ์ โดยคุณสามารถลองทำสิ่งต่อไปนี้
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing