AIDL dili

AIDL dili genel olarak Java diline dayanır. Dosyalar, arayüz sözleşmesi ve bu sözleşmede kullanılan çeşitli veri türleri ile sabit değerler.

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ı paketinden yararlanın. 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 bkz. AIDL arka uç türleri.

Ek Açıklamalar

AIDL dilinin birçok bölümü ek açıklamaları destekler. Ek açıklamaların ve bunların uygulanabileceği yerlerin listesi için AIDL ek açıklamaları başlıklı makaleyi inceleyin.

İç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 kullanıldığı cc_* ve java_* Mostg modüllerinde doğrudan Android platformu derlemelerinde srcs altında dizin ekleyebilirsiniz aidl: { include_dirs: ... } alanı kullanılıyor. Şunu kullanarak içe aktarma: aidl_interface, bkz. burada bulabilirsiniz.

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

    import some.package.Foo;  // explicit import

Aynı paketteki bir tür içe aktarılırken paket atlanabilir. Bununla birlikte, Paketin atlanması, belirtilen bir paket olmadan ve genel ad alanına (genellikle tüm türler ad alanına sahip olmalıdır):

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

Türleri tanımlama

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 {
        // Location defined elsewhere
        void teleport(Location baz, float speed);
        String getName();

        // ITeleportCallback defined elsewhere
        void methodWithCallback(ITeleportCallback callback);

        // ITeleportSession defined elsewhere
        ITeleportSession getASubInterface();
    }

Arayüz, bir nesneyi bir dizi yöntemle tanımlar. Yöntemler oneway (oneway void doFoo()) veya eşzamanlı. Bir arayüz oneway (oneway interface ITeleport {...}) olarak tanımlanırsa içindeki tüm yöntemler örtülü 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). Örneğin, hakkında daha fazla bilgi edinmek için AIDL arka uç ileti dizisini inceleyebilirsiniz. yönetimi hakkında daha fazla bilgi edinin.

Binder, birçok arayüz ve bağlayıcı nesnesinin bağlayıcı arayüzleri aracılığıyla paylaşılmasına olanak tanır. AIDL arayüzleri, yöntem çağrıları kapsamında geri çağırmaları sık sık kullanır. son örnekte ITeleportCallback için olduğu gibi. Geri çağırma nesnelerini aynı yönteme veya farklı yöntemlere yapılan çağrılar arasında yeniden kullanabilirsiniz. Arayüz türlerinin yaygın bir başka kullanımı, önceki örnekte ITeleportSession ile gösterildiği gibi alt arayüzlerin veya oturum nesnelerinin yöntemlerden döndürülmesidir. Bu iç içe yerleştirme, farklı API'lerin API'ye göre veya çalışma zamanı durumuna göre. Örneğin bir oturum, sahiplenmeleri gerektiğini fark edebilirsiniz. Arayüzler birden fazla geldikleri istemci veya sunucuya döndüğünde her zaman temel bağlayıcı nesnesinin işaretçi eşitliği.

Yöntemlerde sıfır veya daha fazla bağımsız değişken olabilir. Yöntem bağımsız değişkenleri in, out veya inout olabilir. Bunun bağımsız değişken türlerini nasıl etkilediğine bkz. AIDL arka uçlarının yönü.

Parseller

Arka uca özgü parsellerin nasıl oluşturulacağıyla ilgili açıklama için AIDL arka uçları özel ayrıştırılabilir.

Android 10 ve sonraki sürümlerin destek ayrıştırılabilir tanımları AIDL'de bulabilirsiniz. Bu tür bir paketlenebilir öğeye yapılandırılmış paketlenebilir öğe denir. AIDL derleyicisinde ve derleme sistemimizde yapılandırılmış ve kararlı AIDL'nin nasıl ilişkili olduğu 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,
    }

İç içe yerleştirilmiş tür tanımları

Android 13 ve sonraki sürümler iç içe yerleştirilmiş tür tanımlarını 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, paketlenebilirler ve birleştirmelerde tam sayı ve dize sabitleri de bulunabilir. Örneğin:

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

Sabit ifadeler

AIDL sabitleri, dizi boyutları ve numaralandırıcılar sabit değer kullanılarak belirtilebilir ifade eder. İfadeler, işlemleri iç içe yerleştirmek için parantez kullanabilir. Sabit ifade değerleri, tam sayı veya kayan nokta değerleriyle kullanılabilir.

true ve false değişmez değerleri boole değerlerini temsil eder. . içeren değerler 3.8 gibi son eki olmayan URL'ler çift değer olarak kabul edilir. Kayan değerler f son ekiyle (ör. 2.4f) biter. l veya L son eki içeren bir tam sayı değeri, 64 bit uzunluğunda bir değeri gösterir. Aksi takdirde, integral değerleri 8 bit (bayt), 32 bit (int), ve 64 bit (uzun) olmalıdır. Dolayısıyla 256 bir int olarak kabul edilir, ancak 255 + 1 taşarak byte 0 olur. 0x3 gibi onaltılık değerler, önce 32 bit ile 64 bit arasında değer koruyan en küçük imzalanmamış tür olarak yorumlanır ve ardından imzalanmamış değerler olarak yeniden yorumlanır. Yani, 0xffffffff, int değerine sahip -1. Android 13'ten itibaren u8 soneki, byte değerini temsil etmek için 3u8 gibi sabitlere eklenebilir. Bu son ek, 0xffu8 * 3 gibi bir hesaplamanın byte türüne sahip -3 olarak yorumlanması, 0xff * 3 ise int türüne sahip 765 olarak yorumlanması için önemlidir.

Desteklenen operatörler C++ ve Java semantiklerine sahiptir. İkili operatörler, en düşük öncelikten en yüksek önceliğe doğru || && | ^ & == != < > <= >= << >> + - * / % sıralanır. Birli operatörler + - ! ~.