AIDL'ye genel bakış

Android Arayüz Tanımlama Dili (AIDL), kullanıcıların IPC'yi soyutlamasına olanak tanıyan bir araçtır. Çeşitli derleme sistemleri, bir arayüz (.aidl dosyasında belirtilir) verildiğinde aidl ikilisini kullanarak C++ veya Java bağlamaları oluşturur. 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. AIDL'nin uygulamalar arasında doğrudan nasıl kullanılacağıyla ilgili dokümanlar için ilgili Android geliştirici dokümanlarına bakın. APEX'ler (Android 10'dan itibaren) veya HAL'ler (Android 11'den itibaren) gibi ayrı ayrı güncellenen platform bileşenleri arasında AIDL kullanıldığında Sabit AIDL olarak bilinen sürüm 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 bir arayüzü kaydeder ve bu arayüze çağrı gönderir. İstemci işlemi ise bu arayüzlere çağrı gönderir. 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 ortamları hakkında daha fazla bilgi için AIDL arka uçları bölümüne bakın. Bu tür bildirimleri, belirli bir dildeki sınıf bildirimleri gibidir ancak süreçler arasında çalışır.

İşleyiş şekli

AIDL, arama yapmak için binder çekirdek sürücüsünü kullanır. Bir çağrı yaptığınızda, bir yöntem tanımlayıcısı ve tüm nesneler bir arabelleğe paketlenir ve bir bağlayıcı iş parçacığının verileri okumayı beklediği uzak bir sürece 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, sunucu işlemi tarafından oluşturulup kaydedilen 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, cihazdaki hizmetlerle etkileşime geçmeyi sağlayan birkaç komut içerir. Bunu deneyin:

    adb shell dumpsys --help # listing and dumping services
    adb shell service --help # sending commands to services for testing