AIDL dili

AIDL dili genel olarak Java diline dayanır. Dosyalar, bir arayüz sözleşmesinin yanı sıra bu sözleşmede kullanılan çeşitli veri türleri ve sabit değerleri belirtir.

Paket

Her AIDL dosyası, çeşitli arka uçlardaki paket adlarına karşılık gelen isteğe bağlı bir paketle başlar. Paket beyanı aşağıdaki gibi görünür:

    package my.package;

Java'ya benzer şekilde, AIDL dosyaları paketleriyle eşleşen bir klasör yapısı içinde olmalıdır. my.package paketine sahip dosyalar, my/package/ klasöründe olmalıdır.

Türler

AIDL dosyalarında, türlerin belirtilebileceği birçok yer vardır. AIDL dilinde desteklenen türlerin tam listesi için AIDL arka uç türleri bölümüne bakın.

Ek Açıklamalar

AIDL dilinin birçok bölümü ek açıklamaları destekler. Ek açıklamaların listesi ve nerelere uygulanabileceği için AIDL ek açıklamalarına bakın.

İçe aktarmalar

Diğer arayüzlerde tanımlanan türleri kullanmak için önce derleme sistemine bağımlılık eklemeniz gerekir. .aidl dosyalarının Android platformu derlemelerinde doğrudan srcs altında kullanıldığı cc_* ve java_* Shortg modüllerinde aidl: { include_dirs: ... } alanını kullanarak dizin ekleyebilirsiniz. aidl_interface kullanarak içe aktarma işlemleri için buraya göz atın.

İçe aktarma işlemi şu şekilde görünür:

    import some.package.Foo;  // explicit import

Aynı pakette bir türü içe aktarırken paket atlanabilir. Bununla birlikte, paketin çıkarılması, türler paket olmadan belirtildiğinde ve genel ad alanına konulduğunda belirsiz içe aktarma hatalarına neden olabilir (genellikle tüm türler ad alanı olmalıdır):

    import Foo;  // same as my.package.Foo

Türleri tanımlayın

AIDL dosyaları genellikle arayüz olarak kullanılan türleri tanımlar.

Arayüzler

Aşağıda örnek bir AIDL arayüzü verilmiştir:

    interface ITeleport {
        void teleport(Location baz, float speed);
        String getName();
    }

Bir arayüz, bir nesneyi bir dizi yöntemle tanımlar. Yöntemler oneway (oneway void doFoo()) veya eşzamanlı olabilir. Bir arayüz oneway (oneway interface ITeleport {...}) olarak tanımlanırsa içerisindeki tüm yöntemler dolaylı olarak oneway olur. Tek yönlü yöntemler eşzamansız olarak gönderilir ve sonuç döndüremez. Aynı iş parçacığından aynı bağlayıcıya giden tek yönlü yöntemler de seri olarak yürütülür (ancak farklı iş parçacıklarında olabilir). İleti dizilerinin nasıl ayarlanacağıyla ilgili bir tartışma için AIDL arka uçları iş parçacığı yönetimini inceleyin.

Yöntemlerde sıfır veya daha fazla bağımsız değişken olabilir. Yöntemlerin bağımsız değişkenleri in, out veya inout olabilir. Bunun bağımsız değişken türlerini nasıl etkilediği hakkında bir açıklama için AIDL arka uçları yönü konusuna bakın.

Parseller

Arka uca özgü parsellerin nasıl oluşturulacağıyla ilgili açıklama için AIDL arka uçları özel paketleri başlıklı makaleyi inceleyin.

Android 10 ve sonraki sürümler doğrudan AIDL'de ayrıştırılabilir tanımları destekler. Bu tür ayrıştırılabilir ürüne, yapılandırılmış ayrıştırılabilir adı verilir. Yapılandırılmış ve kararlı AIDL'nin AIDL derleyici ve derleme sistemimizle ilişkisi hakkında daha fazla bilgi için Yapılandırılmış ve kararlı AIDL başlıklı makaleyi inceleyin.

Örnek:

    package my.package;

    import my.package.Boo;

    parcelable Baz {
        @utf8InCpp String name = "baz";
        Boo boo;
    }

Birlikler

Android 12 ve sonraki sürümler sendika beyanlarını destekler. Örnek:

    package my.package;

    import my.package.FooSettings;
    import my.package.BarSettings;

    union Settings {
        FooSettings fooSettings;
        BarSettings barSettings;
        @utf8InCpp String str;
        int number;
    }

Numaralandırmalar

Android 11 ve sonraki sürümleri destek sıralama bildirimleri. Örnek:

    package my.package;

    enum Boo {
        A = 1 * 4,
        B = 3,
    }

İç İçe Yerleştirilmiş Tür Bildirimleri

Android 13 ve sonraki sürümler, iç içe yerleştirilmiş tür bildirimlerini destekler. Örnek:

    package my.package;

    import my.package.Baz;

    interface IFoo {
        void doFoo(Baz.Nested nested);  // defined in my/package/Baz.aidl
        void doBar(Bar bar);            // defined below

        parcelable Bar { ... }          // nested type definition
    }

Sabitler

Özel AIDL arayüzleri, ayrıştırılabilirler ve birleşimler de aşağıdakiler gibi tam sayı ve dize sabitleri içerebilir:

    const @utf8InCpp String HAPPY = ":)";
    const String SAD = ":(";
    const byte BYTE_ME = 1;
    const int ANSWER = 6 * 7;

Sabit ifadeler

AIDL sabitleri, dizi boyutları ve numaralayıcılar sabit ifadeler kullanılarak belirtilebilir. İfadeler, işlemleri iç içe yerleştirmek için parantez kullanabilir. Sabit ifade değerleri, integral veya kayan noktalı değerlerle kullanılabilir.

true ve false değişmez değerleri boole değerlerini temsil eder. . içeren ancak 3.8 gibi son eki olmayan değerler, çift değer olarak kabul edilir. Kayan noktalı değerlerin f son eki (ör. 2.4f) bulunur. l veya L son ekine sahip integral değer, 64 bit uzunluğundaki bir değeri ifade eder. Aksi takdirde, integral değerleri 8 bit (bayt), 32 bit (int) ve 64 bit (uzun) arasında en küçük değeri koruyan imzalı türü alır. Yani 256, int olarak kabul edilir ancak 255 + 1, byte 0 değerine taşar. 0x3 gibi onaltılık değerler, önce 32 bit ile 64 bit arasında en küçük değeri koruyan imzasız tür olarak yorumlanır ve ardından imzasız değerler olarak yeniden yorumlanır. Yani, 0xffffffff, int değerine (-1) sahip. Android 13'ten itibaren u8 son eki, byte değerini temsil etmek için 3u8 gibi sabitlere eklenebilir. Bu sonek, 0xffu8 * 3 gibi bir hesaplamanın -3 byte türünde 0xff * 3 olarak yorumlanması için int türünde 765 olması açısından önemlidir.

Desteklenen operatörler C++ ve Java anlamlarına sahiptir. İkili operatörler, en düşük öncelikliden en yüksek önceliğe sahip olacak şekilde || && | ^ & == != < > <= >= << >> + - * / % şeklindedir. Birli operatörler + - ! ~.