2021-11-17 AIDL

AIDL 概覽

Android 接口定義語(yǔ)言 (AIDL) 是一款可供用戶用來(lái)抽象化 IPC 的工具很魂。以在 .aidl 文件中指定的接口為例焙糟,各種構(gòu)建系統(tǒng)都會(huì)使用 aidl 二進(jìn)制文件構(gòu)造 C++ 或 Java 綁定斩跌,以便跨進(jìn)程使用該接口(無(wú)論其運(yùn)行時(shí)環(huán)境或位數(shù)如何)挽唉。

AIDL 可以在 Android 中的任何進(jìn)程之間使用:在平臺(tái)組件之間使用或在應(yīng)用之間使用均可雪标。但是篙耗,AIDL 絕不能用作應(yīng)用的 API。例如引润,可以使用 AIDL 在平臺(tái)中實(shí)現(xiàn) SDK API巩趁,但 SDK API Surface 絕不能直接包含 AIDL API。在 APEX(從 Android 10 開(kāi)始)或 HAL(從 Android 11 開(kāi)始)等單獨(dú)更新的平臺(tái)組件之間使用 AIDL 時(shí)淳附,必須使用稱為穩(wěn)定的 AIDL的版本控制系統(tǒng)议慰。

示例

以下是一個(gè) AIDL 接口示例:

package my.package;

import my.package.Baz; // defined elsewhere

interface IFoo {
    void doFoo(Baz baz); // synchronous method
    oneway void doFoo(int a); // async method
}

Android 10 及更高版本支持 parcelable 聲明蠢古。例如:

 package my.package;

import my.package.Boo;

parcelable Baz {
    @utf8InCpp String name = "baz";
    Boo boo;
}

Android 11 及更高版本支持枚舉聲明。例如:

package my.package;

enum Boo {
    A = 1 * 4,
    B = 3,
}

Android 12 及更高版本支持聯(lián)合聲明别凹。例如:
package my.package;

import my.package.FooSettings;
import my.package.BarSettings;

union Settings {
    FooSettings fooSettings;
    BarSettings barSettings;
    @utf8InCpp String str;
    int number;
}

Android T(AOSP 實(shí)驗(yàn)版)及更高版本支持嵌套類型聲明草讶。 例如:

package my.package;

import my.package.Baz;

interface IFoo {
    void doFoo(Baz.Nested nested);  // defined my/package/Baz.aidl
    void doBar(Bar bar);            // defined below

    parcelable Bar { ... }          // union/enum types can be nested, while
                                    // an interface can't.
}

服務(wù)器進(jìn)程注冊(cè)接口并提供對(duì)它的調(diào)用,客戶端進(jìn)程則調(diào)用這些接口番川。在許多情況下到涂,進(jìn)程既是客戶端又是服務(wù)器脊框,因?yàn)樗赡軙?huì)引用多個(gè)接口颁督。如需詳細(xì)了解可供您用來(lái)使用這些接口的各種運(yùn)行時(shí)環(huán)境,請(qǐng)參閱 AIDL 后端浇雹。這些類型聲明與給定語(yǔ)言中的類聲明完全相同沉御,但可以跨進(jìn)程工作。

工作原理

AIDL 使用 Binder 內(nèi)核驅(qū)動(dòng)程序進(jìn)行調(diào)用昭灵。當(dāng)您發(fā)出調(diào)用時(shí)吠裆,系統(tǒng)會(huì)將方法標(biāo)識(shí)符和所有對(duì)象打包到某個(gè)緩沖區(qū)中,然后將其復(fù)制到某個(gè)遠(yuǎn)程進(jìn)程烂完,該進(jìn)程中有一個(gè) Binder 線程正在等待讀取數(shù)據(jù)试疙。Binder 線程收到某個(gè)事務(wù)的數(shù)據(jù)后,該線程會(huì)在本地進(jìn)程中查找原生樁對(duì)象抠蚣,然后此類會(huì)解壓縮數(shù)據(jù)并調(diào)用本地接口對(duì)象祝旷。此本地接口對(duì)象正是服務(wù)器進(jìn)程所創(chuàng)建和注冊(cè)的對(duì)象。當(dāng)在同一進(jìn)程和同一后端中進(jìn)行調(diào)用時(shí)嘶窄,不存在代理對(duì)象怀跛,因此直接調(diào)用即可,無(wú)需執(zhí)行任何打包或解壓縮操作柄冲。

與設(shè)備上的服務(wù)互動(dòng)

Android 具有一些命令吻谋,可供您用來(lái)與設(shè)備上的服務(wù)互動(dòng)。請(qǐng)嘗試輸入:

    adb shell dumpsys --help # listing and dumping services
    adb shell service --help # sending commands to services for testing
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末现横,一起剝皮案震驚了整個(gè)濱河市漓拾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戒祠,老刑警劉巖晦攒,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異得哆,居然都是意外死亡脯颜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門贩据,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)栋操,“玉大人闸餐,你說(shuō)我怎么就攤上這事》剑” “怎么了舍沙?”我有些...
    開(kāi)封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)剔宪。 經(jīng)常有香客問(wèn)我拂铡,道長(zhǎng),這世上最難降的妖魔是什么葱绒? 我笑而不...
    開(kāi)封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任感帅,我火速辦了婚禮,結(jié)果婚禮上地淀,老公的妹妹穿的比我還像新娘失球。我一直安慰自己,他們只是感情好帮毁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布实苞。 她就那樣靜靜地躺著,像睡著了一般烈疚。 火紅的嫁衣襯著肌膚如雪黔牵。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天爷肝,我揣著相機(jī)與錄音猾浦,去河邊找鬼。 笑死阶剑,一個(gè)胖子當(dāng)著我的面吹牛跃巡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牧愁,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼素邪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了猪半?” 一聲冷哼從身側(cè)響起兔朦,我...
    開(kāi)封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎磨确,沒(méi)想到半個(gè)月后沽甥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乏奥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年摆舟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恨诱,死狀恐怖媳瞪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情照宝,我是刑警寧澤蛇受,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站厕鹃,受9級(jí)特大地震影響兢仰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜剂碴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一把将、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汗茄,春花似錦秸弛、人聲如沸铭若。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叼屠。三九已至瞳腌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镜雨,已是汗流浹背嫂侍。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荚坞,地道東北人挑宠。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像颓影,于是被迫代替她去往敵國(guó)和親各淀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容