AIDL 語言大致上以 Java 語言為基礎。檔案會指定 此合約中使用的介面合約以及各種資料類型和常數。
套件
每個 AIDL 檔案都以與 套件相對應的選用套件開頭 不同後端中的名稱套件宣告如下所示:
package my.package;
AIDL 檔案所在的資料夾結構必須與 Java 檔案類似
套件。套件為 my.package
的檔案必須位於 my/package/
資料夾中。
類型
在 AIDL 檔案中,有許多位置可以指定類型。 如需 AIDL 語言所支援類型的確切清單,請參閱 AIDL 後端類型。
註解
AIDL 語言中的幾個部分支援註解。如需 註解以及可以套用的位置 AIDL 註解。
匯入
如要使用其他介面中定義的類型,您必須先在
建構系統在 cc_*
和 java_*
Soong 模組中,使用 .aidl
檔案
您可以直接在 Android 平台版本的 srcs
底下新增目錄
使用 aidl: { include_dirs: ... }
欄位使用
aidl_interface
,請參閱
這裡。
匯入作業如下所示:
import some.package.Foo; // explicit import
在同一個套件匯入類型時,可省略該套件。不過 省略套件時,當型別 並放入全域命名空間 (通常是所有類型) 應為命名空間):
import Foo; // same as my.package.Foo
定義類型
AIDL 檔案一般會定義用來做為介面的類型。
介面
以下是 AIDL 介面範例:
interface ITeleport {
void teleport(Location baz, float speed);
String getName();
}
介面會透過一系列方法定義物件。方法可以是
oneway
(oneway void doFoo()
) 或同步。如果介面定義為
oneway
(oneway interface ITeleport {...}
),則其中的所有方法
隱含 oneway
。單向方法以非同步方式分派
就會傳回結果從同一執行緒到相同繫結器的單向方法
依序執行 (但可能在不同的執行緒上)。換
有關如何設定執行緒的討論,請參閱 AIDL 後端執行緒
管理
方法可以有零個或多個引數。您可以
in
、out
或 inout
。有關這對引數類型的影響,
看
AIDL 後端方向。
Parcelable
如需有關如何建立後端專屬 parcelable 的說明, AIDL 後端 parcelables。
Android 10 以上版本支援可包裝的定義 直接寫入 AIDL這種類型的 parcelable 稱為結構化 parcelable。 如要進一步瞭解結構化和穩定的 AIDL 與 請參閱結構化與穩定版 AIDL:
例如:
package my.package;
import my.package.Boo;
parcelable Baz {
@utf8InCpp String name = "baz";
Boo boo;
}
聯合工會
Android 12 以上版本支援聯集宣告。 例如:
package my.package;
import my.package.FooSettings;
import my.package.BarSettings;
union Settings {
FooSettings fooSettings;
BarSettings barSettings;
@utf8InCpp String str;
int number;
}
列舉
Android 11 以上版本支援列舉宣告。 例如:
package my.package;
enum Boo {
A = 1 * 4,
B = 3,
}
巢狀類型宣告
Android 13 以上版本支援巢狀類型宣告。 例如:
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
}
常數
自訂 AIDL 介面、 parcelable 和 union 也可包含整數 和字串常數,例如:
const @utf8InCpp String HAPPY = ":)";
const String SAD = ":(";
const byte BYTE_ME = 1;
const int ANSWER = 6 * 7;
常數運算式
您可以使用常數指定 AIDL 常數、陣列大小和列舉值 運算式。運算式可以使用括號為運算建立巢狀結構。常數 運算式值可以與積分或浮點值搭配使用,
true
和 false
常值代表布林值。帶有 .
但值
不含後置字串 (例如 3.8
) 會視為雙值。浮點值
值的後置字串為 f
,例如 2.4f
。具有 l
或
L
後置字串表示 64 位元長值。否則,積分值會
介於 8 位元 (位元組)、32 位元 (int) 之間的最小含值正負號類型,
和 64 位元 (長)。因此,256
會視為 int
,但 255 + 1
溢位為 byte
0
。系統會先解譯 0x3
這類十六進位值
做為 32 位元和 64 位元之間的最小值保留類型
然後重新解讀為無正負號值因此,0xffffffff
的 int
值是
-1
。從 Android 13 開始,後置字串 u8
可以是
加到常數 (例如 3u8
) 以表示 byte
值。這個後置字串為
重要的是,因此計算結果 (例如 0xffu8 * 3
) 會解讀為 -3
類型為 byte
,0xff * 3
為 765
,類型為 int
。
支援的運算子具有 C++ 和 Java 語意。從最低到
優先度最高,二進位運算子為
|| && | ^ & == != < > <= >= << >> + - * / %
。一元運算子為 + - ! ~
。