27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main
yerine android-latest-release
kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
AIDL'ye genel bakış
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Android Arayüz Tanımlama Dili (AIDL), kullanıcıların IPC'yi soyutlamasına olanak tanıyan bir araçtır. Bir arayüz (.aidl
dosyasında belirtilir) verildiğinde, çeşitli derleme sistemleri aidl
ikilisini kullanarak C++ veya Java bağlamaları oluşturur. Böylece bu arayüz, çalışma zamanı veya bit sayısı ne olursa olsun süreçler arasında kullanılabilir.
AIDL, Android'deki herhangi bir işlem arasında (platform bileşenleri veya uygulamalar arasında) kullanılabilir. Ancak uygulamalar için API olarak hiçbir zaman kullanılmaz. AIDL, platformda bir SDK API'si uygulamak için kullanılabilir ancak SDK API yüzeyi hiçbir zaman doğrudan AIDL API'leri içermez. Uygulamalar arasında doğrudan AIDL'nin nasıl kullanılacağıyla ilgili dokümanlar için ilgili Android geliştirici belgelerine bakın.
Ayrı ayrı güncellenen platform bileşenleri (ör. APEX'ler (Android 10'dan itibaren) veya HAL'ler (Android 11'den itibaren)) arasında AIDL kullanıldığında Stable AIDL olarak bilinen sürüm oluşturma sistemi kullanılmalıdır.
Örnek
Aşağıda bir AIDL arayüzü örneği verilmiştir:
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
Bir sunucu süreci, bir arayüzü kaydeder ve bu arayüze yapılan çağrıları karşılar. Bir istemci süreci ise bu arayüzlere çağrı yapar. Çoğu durumda, bir işlem birden fazla arayüze başvurabileceğinden hem istemci hem de sunucu olarak hareket eder. AIDL dili hakkında daha fazla bilgi için AIDL dili başlıklı makaleyi inceleyin. Bu arayüzleri kullanmak için kullanılabilen çeşitli çalışma zamanları hakkında daha fazla bilgi edinmek için AIDL arka uçları başlıklı makaleye bakın. Bu tür bildirimleri, belirli bir dildeki sınıf bildirimlerine benzer ancak bunlar süreçler arasında çalışır.
İşleyiş şekli
AIDL, arama yapmak için bağlayıcı çekirdek sürücüsünü kullanır. Arama yaptığınızda bir yöntem tanımlayıcısı ve tüm nesneler bir arabelleğe yerleştirilip verileri okumak için bir bağlayıcı iş parçacığının beklediği uzak bir işleme kopyalanır. Bir bağlayıcı iş parçacığı bir işlem için veri aldığında, iş parçacığı yerel süreçte yerel bir saplama nesnesi arar ve bu sınıf verileri açıp yerel bir arayüz nesnesinde çağrı yapar. Bu yerel arayüz nesnesi, bir sunucu işlemi tarafından oluşturulan ve kaydedilen nesnedir. Aramalar aynı süreçte ve aynı arka uçta yapıldığında proxy nesneleri olmaz. Bu nedenle aramalar, paketleme veya paket açma işlemi olmadan doğrudan yapılır. Daha fazla bilgi için Binder'a genel bakış başlıklı makaleyi inceleyin.
Cihazdaki hizmetlerle etkileşimde bulunma
Android, cihazdaki hizmetlerle etkileşime izin veren birkaç komutla birlikte gelir. Bunu deneyin:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-30 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 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"]]