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 + - ! ~
.