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