AIDL Dili

AIDL dili gevşek bir şekilde Java diline dayanmaktadır. Dosyalar, bir arabirim sözleşmesini ve bu sözleşmede kullanılan çeşitli veri türlerini ve sabitleri 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. Bir paket bildirimi şöyle görünür:

    package my.package;

Java'ya benzer şekilde, AIDL dosyaları paketleriyle eşleşen bir klasör yapısında 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 bkz. AIDL arka uç türleri .

Ek açıklamalar

AIDL dilinin çeşitli bölümleri açıklamaları destekler. Açıklamaların listesi ve uygulanabilecekleri yerler için AIDL açıklamalarına bakın.

ithalat

Diğer arabirimlerde tanımlanan türleri kullanmak için önce yapı sistemine bağımlılıklar eklemelisiniz. Android platform yapılarında .aidl dosyalarının doğrudan srcs altında kullanıldığı cc_* ve java_* Soong modüllerinde, aidl: { include_dirs: ... } alanını kullanarak dizinler ekleyebilirsiniz. aidl_interface kullanarak içe aktarma için buraya bakın.

Bir içe aktarma şöyle görünür:

    import some.package.Foo;  // explicit import

Aynı pakette bir tür içe aktarılırken paket atlanabilir. Bununla birlikte, türler bir paket olmadan belirtildiğinde ve genel ad alanına yerleştirildiğinde (genellikle tüm türler ad alanlı 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

İşte örnek bir AIDL arayüzü:

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

Bir arabirim, bir nesneyi bir dizi yöntemle tanımlar. Yöntemler tek yönlü ( oneway oneway void doFoo() ) veya eşzamanlı olabilir. Bir arabirim tek yönlü (tek yönlü arabirim oneway oneway interface ITeleport {...} ) olarak tanımlanırsa, içindeki tüm yöntemler örtük olarak oneway yönlüdür. 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öntemlerin de seri olarak yürütülmesi garanti edilir (potansiyel olarak farklı iş parçacıklarında olsa da). İş parçacıklarının nasıl kurulacağına ilişkin bir tartışma için bkz. AIDL arka uçları iş parçacığı yönetimi .

Metotların sıfır veya daha fazla argümanı olabilir. Yöntemlere ilişkin argümanlar in , out veya inout olabilir. Bunun argüman türlerini nasıl etkilediğine ilişkin bir tartışma için AIDL arka uçlarının yönlülüğüne bakın.

parsellenebilirler

Arka uca özgü ayrıştırılabilir öğelerin nasıl oluşturulacağına ilişkin bir açıklama için AIDL, özel ayrıştırılabilir öğelerin arka uçlarını kullanır .

Android 10 ve üstü, doğrudan AIDL'de ayrıştırılabilir bildirimleri destekler. Örneğin:

    package my.package;

    import my.package.Boo;

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

Birlikler

Android 12 ve üstü destek birliği bildirimleri. Örneğin:

    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 üstü destek numaralandırma bildirimleri. Örneğin:

    package my.package;

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

İç İçe Tip Bildirimleri

Android 13 ve üstü, iç içe tür bildirimlerini destekler. Örneğin:

    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 arabirimleri, ayrıştırılabilir öğeler ve birleşimler ayrıca aşağıdakiler gibi tamsayı ve dize sabitleri içerebilir:

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

Sabit İfadeler

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

true ve false değişmezleri, boole değerlerini temsil eder. A ile değerler . ancak 3.8 gibi bir son ek olmadan çift değerler olarak kabul edilir. Float değerleri, 2.4f gibi f son ekine sahiptir. l veya L son ekine sahip bir integral değeri, 64 bit uzunluğunda bir değeri belirtir. Aksi takdirde, integral değerleri 8 bit (bayt), 32 bit (int) ve 64 bit (uzun) arasında değeri koruyan en küçük işaretli türü alır. Bu nedenle 256 , int olarak kabul edilir, ancak 255 + 1 , byte 0 olarak taşar. 0x3 gibi onaltılık değerler, önce 32 bit ile 64 bit arasındaki en küçük değeri koruyan işaretsiz tür olarak yorumlanır ve ardından işaretsiz değerler olarak yeniden yorumlanır. Yani, 0xffffffff int değerine -1 sahiptir. Android 13'ten başlayarak, bir byte değerini temsil etmek için 3u8 gibi sabitlere u8 soneki eklenebilir. Bu sonek, 0xffu8 * 3 gibi bir hesaplamanın byte türü ile -3 olarak yorumlanması, oysa 0xff * 3 int türü ile 765 olarak yorumlanması için önemlidir.

Desteklenen operatörler C++ ve Java semantiğine sahiptir. En düşükten en yükseğe öncelik sırasına göre, ikili işleçler || && | ^ & == != < > <= >= << >> + - * / % . Tekli operatörler + - ! ~ .