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ı, pakete karşılık gelen isteğe bağlı bir paketle başlar adları için kullanılır. 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. Şunlar için: ek açıklamaları ve bunların nerelere uygulanabileceğine bakın. AIDL ek açıklamaları.

İçe aktarmalar

Diğer arayüzlerde tanımlanan türleri kullanmak için önce bağımlılıkları geliştirmenizi sağlar. .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ı pakette bir türü içe aktarı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ı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ı. Bir arayüz oneway (oneway interface ITeleport {...}), içerdiği tüm yöntemler dolaylı olarak oneway. Tek yönlü yöntemler eşzamansız olarak gönderilir ve sonuç döndürür. 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.

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. 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 ayrıştırılabilir ürüne, yapılandırılmış ayrıştırılabilir adı verilir. Yapılandırılmış ve istikrarlı AIDL'nin ilişkisi hakkında daha fazla bilgi için AIDL derleyicisi ve derleme sistemimiz için Yapılandırılmış ve kararlı AIDL ile ilgili daha fazla bilgi edinin.

Ö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ıcılar ve birleşimler de tam sayı içerebilir ve dize sabitleridir. Ö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, integral veya kayan noktalı değerlerle 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 ekine sahiptir (ör. 2.4f). l veya L son eki, 64 bit uzunluğundaki bir değeri belirtir. Aksi takdirde, integral değerleri 8 bit (bayt), 32 bit (int), ve 64 bit (uzun) olmalıdır. Dolayısıyla 256, int olarak kabul edilir, ancak 255 + 1 byte 0 değerine taşıyor. İlk olarak 0x3 gibi onaltılık değerler yorumlanır 32 bit ve 64 bit arasında en küçük değeri koruyan imzasız tür olarak sonra da imzalanmamış değerler olarak yeniden yorumlanır. Yani, 0xffffffff, int değerine sahip -1. Android 13'ten itibaren u8 son eki byte değerini temsil etmek için 3u8 gibi sabitlere eklenir. Bu sonek 0xffu8 * 3 gibi bir hesaplamanın -3 olarak yorumlanması açısından önemlidir 0xff * 3, int türünde 765. byte türünde.

Desteklenen operatörler C++ ve Java anlamlarına sahiptir. En düşükten en düşük değere doğru öncelikli olmak üzere ikili operatörler, || && | ^ & == != < > <= >= << >> + - * / % Birli operatörler + - ! ~.