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