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