Android Arayüz Tanımlama Dili (AIDL), kullanıcıların IPC'yi soyutlamalarına olanak tanıyan bir araçtır. Bir arayüz (.aidl
dosyasında belirtilir) verildiğinde çeşitli derleme sistemleri, C++ veya Java bağlamalarını oluşturmak için aidl
ikilisini kullanır. Böylece bu arayüz, çalışma zamanından veya bit sayısından bağımsız olarak işlemler arasında kullanılabilir.
AIDL, Android'deki herhangi bir işlem arasında (platform bileşenleri veya uygulamalar arasında) kullanılabilir. Ancak hiçbir zaman uygulamalar için API olarak kullanılmaz. Örneğin, platformda bir SDK API'si uygulamak için AIDL kullanılabilir ancak SDK API yüzeyi hiçbir zaman doğrudan AIDL API'leri içermez. Doğrudan uygulamalar arasında AIDL'nin nasıl kullanılacağıyla ilgili dokümanlar için ilgili Android geliştirici belgelerini inceleyin. APEX'ler (Android 10'dan itibaren) veya HAL'ler (Android 11'den itibaren) gibi ayrı olarak güncellenen platform bileşenleri arasında AIDL kullanıldığında Kararlı AIDL olarak bilinen sürüm oluşturma sistemi kullanılmalıdır.
Örnek
Örnek bir AIDL arayüzü:
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
Sunucu işlemi, arayüzü kaydederek bu arayüze çağrıları sunar. Bir istemci işlemi, bu arayüzlere çağrı yapar. Birçok durumda, bir işlem birden fazla arayüze referans verebileceğinden hem istemci hem de sunucu olarak çalışır. 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ı bölümüne bakın. Bu tür bildirimler, belirli bir dildeki sınıf bildirimi gibidir ancak farklı süreçlerde çalışır.
İşleyiş şekli
AIDL, arama yapmak için bağlayıcı çekirdek sürücüsünü kullanır. Bir çağrı yaptığınızda, bir yöntem tanımlayıcı ve tüm nesneler bir arabelleğe yerleştirilir ve bir bağlayıcı iş parçacığının verileri okumak için beklediği uzak bir işleme kopyalanır. Bir bağlayıcı iş parçacığı bir işleme ait verileri aldıktan sonra, yerel işlemde yerel bir stub nesnesi arar. Bu sınıf, verileri paketten çıkarır ve yerel bir arayüz nesnesine çağrı yapar. Bu yerel arayüz nesnesi, bir sunucu işleminin oluşturduğu ve kaydettiği nesnedir. Aynı işlemde ve aynı arka uçta çağrı yapıldığında proxy nesnesi bulunmaz. Bu nedenle, çağrılar paketlenmeden veya paketten çıkarılmadan doğrudan yapılır.
Cihazdaki hizmetlerle etkileşimde bulunma
Android, cihazda hizmetlerle etkileşimde bulunmaya izin veren birkaç komut içerir. Bunu deneyin:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing