Android Interface Definition Language (AIDL) adalah alat yang memungkinkan pengguna
mengabstraksi IPC. Mengingat adanya antarmuka (yang ditentukan dalam file .aidl
), berbagai sistem build menggunakan biner aidl
untuk membuat binding C++ atau Java sehingga antarmuka ini dapat digunakan di seluruh proses, terlepas dari runtime atau bitness di sana.
AIDL dapat digunakan di antara proses apa pun di Android: di antara komponen platform atau di antara aplikasi. Namun, API ini tidak pernah digunakan sebagai API untuk aplikasi. AIDL dapat digunakan untuk menerapkan SDK API di platform, misalnya, tetapi platform SDK API tidak pernah berisi API AIDL secara langsung. Untuk dokumentasi tentang cara menggunakan AIDL antar-aplikasi secara langsung, lihat dokumentasi developer Android yang sesuai. Jika AIDL digunakan di antara komponen platform yang diupdate secara terpisah, seperti APEX (mulai di Android 10) atau HAL (mulai di Android 11), sistem pembuatan versi yang dikenal sebagai AIDL Stabil harus digunakan.
Contoh
Berikut adalah contoh antarmuka AIDL:
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
Proses server mendaftarkan antarmuka dan melayani panggilan ke antarmuka tersebut, dan proses klien melakukan panggilan ke antarmuka tersebut. Dalam banyak kasus, proses bertindak sebagai klien dan server karena dapat mereferensikan beberapa antarmuka. Untuk mengetahui detail selengkapnya tentang bahasa AIDL, lihat Bahasa AIDL. Untuk mengetahui detail selengkapnya tentang berbagai runtime yang tersedia untuk menggunakan antarmuka ini, lihat Backend AIDL. Deklarasi jenis ini persis seperti deklarasi class dalam bahasa tertentu, tetapi berfungsi di seluruh proses.
Cara kerjanya
AIDL menggunakan driver kernel binder untuk melakukan panggilan. Saat Anda melakukan panggilan, ID metode dan semua objek dikemas ke dalam buffer dan disalin ke proses jarak jauh tempat thread binder menunggu untuk membaca data. Setelah thread binder menerima data untuk transaksi, thread akan mencari objek stub native dalam proses lokal, dan class ini akan mengekstrak data serta melakukan panggilan pada objek antarmuka lokal. Objek antarmuka lokal ini adalah objek yang dibuat dan didaftarkan oleh proses server. Saat panggilan dilakukan dalam proses yang sama dan backend yang sama, tidak ada objek proxy, sehingga panggilan dilakukan secara langsung tanpa pengemasan atau pembongkaran. Untuk mengetahui informasi selengkapnya, lihat Ringkasan binder.
Berinteraksi dengan layanan di perangkat
Android dilengkapi dengan beberapa perintah untuk memungkinkan interaksi dengan layanan di perangkat. Coba:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing