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