Mulai 27 Maret 2025, sebaiknya gunakan android-latest-release
, bukan aosp-main
, untuk mem-build dan berkontribusi pada AOSP. Untuk mengetahui informasi selengkapnya, lihat Perubahan pada AOSP.
Ringkasan AIDL
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
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
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-30 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-07-30 UTC."],[],[],null,["# AIDL overview\n\nThe Android Interface Definition Language (AIDL) is a tool that lets users\nabstract away IPC. Given an interface (specified in a `.aidl`\nfile), various build systems use the `aidl` binary to construct C++ or Java\nbindings so that this interface can be used across processes, regardless of the\nruntime or bitness there.\n\nAIDL can be used between any process in Android: between platform components\nor between apps. However, it is never used as an API for apps. AIDL may be used\nto implement an SDK API in the platform, for example, but the SDK API surface\nnever contains AIDL APIs directly. For documentation about how to use AIDL\nbetween apps directly, see corresponding\n[Android developers\ndocumentation](https://developer.android.com/guide/components/aidl).\nWhen AIDL is used between platform components that are updated separately, such\nas APEXes (starting in Android 10) or HALs (starting in\nAndroid 11), the versioning system known as\n[Stable AIDL](/docs/core/architecture/aidl/stable-aidl) must be used.\n\nExample\n-------\n\nHere is an example AIDL interface: \n\n package my.package;\n\n import my.package.Baz; // defined elsewhere\n\n interface IFoo {\n void doFoo(Baz baz);\n }\n\nA *server* process registers an interface and serves calls to it, and a *client*\nprocess makes calls to those interfaces. In many cases, a process acts as both a\nclient and a server since it may be referencing multiple interfaces. For more\ndetails about the AIDL language, see\n[AIDL language](/docs/core/architecture/aidl/aidl-language). For more details\nabout the various runtimes available to use these interfaces, see\n[AIDL backends](/docs/core/architecture/aidl/aidl-backends). These type\ndeclarations are exactly like a class declaration in a given language, but they\nwork across processes.\n\nHow it works\n------------\n\nAIDL uses the binder kernel driver to make calls. When you make a call, a\nmethod identifier and all of the objects are packed onto a buffer and copied to\na remote process where a binder thread waits to read the data. Once a binder\nthread receives data for a transaction, the thread looks up a native stub object\nin the local process, and this class unpacks the data and makes a call on a\nlocal interface object. This local interface object is the one a server process\ncreates and registers. When calls are made in the same process and the same\nbackend, no proxy objects exist, and so calls are direct without any\npacking or unpacking. For further information, see the\n[Binder overview](/docs/core/architecture/ipc/binder-overview).\n\nInteract with services on the device\n------------------------------------\n\nAndroid comes with a few commands to allow interacting with services on the\ndevice. Try: \n\n adb shell dumpsys --help # listing and dumping services\n adb shell service --help # sending commands to services for testing"]]