Android 介面定義語言 (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 會使用繫結器核心驅動程式進行呼叫。撥打電話時,方法 ID 和所有物件都會封裝到緩衝區,並複製到遠端程序,繫結器執行緒會在該處等待讀取資料。繫結器執行緒收到交易資料後,會在本機程序中查閱原生存根物件,而這個類別會解壓縮資料,並在本機介面物件上發出呼叫。這個本機介面物件是伺服器程序建立及註冊的物件。在相同程序和相同後端中進行呼叫時,不會有任何 Proxy 物件,因此呼叫是直接進行,不會有任何封裝或解除封裝作業。詳情請參閱「Binder 總覽」。
與裝置上的服務互動
Android 內建幾項指令,可與裝置上的服務互動。請嘗試:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing