《Android框架揭秘》——1.2節(jié)通過(guò)啟動(dòng)過(guò)程分析Android Framework

本節(jié)書(shū)摘來(lái)自異步社區(qū)《Android框架揭秘》一書(shū)中的第1章,第1.2節(jié)通過(guò)啟動(dòng)過(guò)程分析Android Framework,作者 金泰延 , 宋亨周 , 樸知?jiǎng)?, 李白 , 林起永,更多章節(jié)內(nèi)容可以訪(fǎng)問(wèn)云棲社區(qū)“異步社區(qū)”公眾號(hào)查看

1.2 通過(guò)啟動(dòng)過(guò)程分析Android Framework
Android框架揭秘
Android源碼數(shù)量極其龐大,以Android 2.2為例,除去Linux代碼,代碼數(shù)量大于4GB。若想理解和掌握這么龐大的Android系統(tǒng),需要耗費(fèi)大量的時(shí)間,付出極大的努力。并且,到現(xiàn)在為止,也沒(méi)有相關(guān)資料對(duì)Android Frame作系統(tǒng)完整的講解說(shuō)明。

那么,分析Android Framework用什么方法好呢?回答這一問(wèn)題之前,先回想一下我們是如何分析他人編寫(xiě)的程序代碼的。在分析程序代碼時(shí),我們通常從程序的入口main()函數(shù)開(kāi)始,一點(diǎn)點(diǎn)地理清程序流,把握程序的運(yùn)行過(guò)程。同樣,在分析結(jié)構(gòu)龐大的Android Framework時(shí),也要從Android平臺(tái)啟動(dòng)過(guò)程著手。Android啟動(dòng)過(guò)程包含從Linux內(nèi)核加載到Home應(yīng)用程序啟動(dòng)的整個(gè)過(guò)程,依次分析這一過(guò)程,有利于我們系統(tǒng)地理解Android Framework運(yùn)行的原理。

如圖1-3所示,簡(jiǎn)單地描述了Android啟動(dòng)過(guò)程,本書(shū)在后續(xù)章節(jié)中講解Android Framework初始化過(guò)程、各模塊間如何相互作用等內(nèi)容時(shí),均以此圖所描述的啟動(dòng)過(guò)程為基礎(chǔ)。

對(duì)照?qǐng)D1-3 Android啟動(dòng)過(guò)程圖,簡(jiǎn)單地講解一下。

1.Linux內(nèi)核

Android是基于Linux內(nèi)核的系統(tǒng)平臺(tái)。啟動(dòng)時(shí),首先通過(guò)bootloader(系統(tǒng)加載器),加載Linux內(nèi)核。在Linux加載啟動(dòng)時(shí),與普通的Linux啟動(dòng)過(guò)程相同,先初始化內(nèi)核,然后調(diào)用init進(jìn)程。

2.init

Android init進(jìn)程對(duì)各種設(shè)備進(jìn)行初始化,運(yùn)行Android Framework所需用的各種Daemon、Context Manager、Media Server、Zygote等。

以下是init進(jìn)程執(zhí)行的Daemon進(jìn)程。

USB Daemon (usbd):管理USB連接。
Android Debug Bridge Daemon (adbd):Android Debug Bridge連接管理。
Debugger Daemon (debuggerd):?jiǎn)?dòng)Debugger系統(tǒng)。
Radio Interface Layer Daemon (rild):管理無(wú)線(xiàn)通信連接。
3.Context Manager

Context Manager是一個(gè)管理Android系統(tǒng)服務(wù)的重要進(jìn)程。系統(tǒng)服務(wù)是組成Android Framework的重要組件,提供從相機(jī)、音頻、視頻處理到各種應(yīng)用程序制作所需要的重要的API。

Context Manager提供運(yùn)行于A(yíng)ndroid內(nèi)的各種系統(tǒng)服務(wù)信息。應(yīng)用程序或Framework內(nèi)部模塊在調(diào)用系統(tǒng)服務(wù)時(shí),需要先向服務(wù)管理器申請(qǐng),而后通過(guò)Binder IPC(Interprocess communication)調(diào)用系統(tǒng)服務(wù)。

在系統(tǒng)啟動(dòng)時(shí),Android所有系統(tǒng)服務(wù)都要把各自的handle信息注冊(cè)到Context Manager,此時(shí),Binder IPC用來(lái)進(jìn)行進(jìn)程間的通信。

4.Media Server

Media Server用于運(yùn)行基于C/C++ 的本地系統(tǒng)服務(wù),如Audio Flinger(負(fù)責(zé)音頻輸出)、Camera等。

5.Zygote

Zygote進(jìn)程用于縮短Android應(yīng)用程序加載的時(shí)間,每當(dāng)執(zhí)行Java應(yīng)用程序時(shí),Zygote就會(huì)派生出一個(gè)子進(jìn)程來(lái)執(zhí)行應(yīng)用程序,該子進(jìn)程就是用來(lái)執(zhí)行Java應(yīng)用程序的虛擬機(jī)。

6.System Server

System Server是Android系統(tǒng)的一個(gè)核心進(jìn)程,它是由Zygote進(jìn)程創(chuàng)建的,在A(yíng)ndroid啟動(dòng)過(guò)程中位于Zygote之后。在System Server中可以看到它建立的Android中的大部分服務(wù),如Activity Manager Service(管理應(yīng)用程序的生命周期)、Location Manager Service(提供終端的地理位置信息)等。

為了將運(yùn)行在System Server中的Java系統(tǒng)服務(wù)提供給Android應(yīng)用程序或Framework內(nèi)部模塊調(diào)用,需要先將它們注冊(cè)到Context Manager中。

在通過(guò)Binder IPC將Java系統(tǒng)服務(wù)注冊(cè)到基于C語(yǔ)言的服務(wù)管理器時(shí),需要使用JNI(Java Native Interface)本地編程接口。JNI允許Java代碼與其他編程語(yǔ)言(如C、C++、匯編語(yǔ)言)編寫(xiě)的應(yīng)用程序和庫(kù)進(jìn)行交互操作。

以上就是對(duì)Android啟動(dòng)過(guò)程以及Framework初始化的簡(jiǎn)單介紹。當(dāng)然這僅僅是Android啟動(dòng)過(guò)程的一部分,如圖1-3所示,當(dāng)所有Java系統(tǒng)服務(wù)加載完畢后,Activity Manager Service會(huì)運(yùn)行HOME應(yīng)用,啟動(dòng)過(guò)程繼續(xù)進(jìn)行。這部分已超出本書(shū)所要討論的范圍,如果讀者感興趣,請(qǐng)參照Android源碼進(jìn)行分析。

出于篇幅的考量,本書(shū)不可能對(duì)Android Framework所有模塊的所有動(dòng)作作出說(shuō)明。即便如此,沿著本書(shū)提供的思路,參考相關(guān)章節(jié)內(nèi)容,分析相關(guān)源碼,你會(huì)很快、很容易地掌握Android Framework。


Framework學(xué)習(xí)手冊(cè)

文檔領(lǐng)取方式:點(diǎn)贊+關(guān)注,然后私信關(guān)鍵詞 【1】即可獲得免費(fèi)領(lǐng)取方式!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容