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 รออ่านข้อมูล เมื่อ Binder เทรดดําเนินการได้รับข้อมูลสําหรับธุรกรรม เทรดดําเนินการจะค้นหาออบเจ็กต์สแต็บเนทีฟในกระบวนการภายใน และคลาสนี้จะแตกไฟล์ข้อมูลและเรียกใช้ออบเจ็กต์อินเทอร์เฟซภายใน ออบเจ็กต์อินเทอร์เฟซในเครื่องนี้เป็นรายการที่กระบวนการของเซิร์ฟเวอร์สร้างและลงทะเบียน เมื่อเรียกใช้ด้วยกระบวนการเดียวกันและมีแบ็กเอนด์เดียวกัน จะไม่มีออบเจ็กต์พร็อกซีอยู่ ดังนั้นการเรียกใช้จึงโดยตรงโดยไม่มีการแพคข้อมูลหรือคลายการแพคข้อมูล
โต้ตอบกับบริการในอุปกรณ์
Android มีคำสั่ง 2-3 รายการที่อนุญาตให้โต้ตอบกับบริการในอุปกรณ์ โดยคุณสามารถลองทำสิ่งต่อไปนี้
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing