本節(jié)書摘來自異步社區(qū)《Android框架揭秘》一書中的第1章综苔,第1.2節(jié)通過啟動過程分析Android Framework运悲,作者 金泰延 , 宋亨周 , 樸知勛 , 李白 , 林起永桐智,更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“異步社區(qū)”公眾號查看
1.2 通過啟動過程分析Android Framework
Android框架揭秘
Android源碼數(shù)量極其龐大,以Android 2.2為例,除去Linux代碼笔横,代碼數(shù)量大于4GB痴柔。若想理解和掌握這么龐大的Android系統(tǒng)沦偎,需要耗費(fèi)大量的時間,付出極大的努力咳蔚。并且豪嚎,到現(xiàn)在為止,也沒有相關(guān)資料對Android Frame作系統(tǒng)完整的講解說明谈火。
那么侈询,分析Android Framework用什么方法好呢?回答這一問題之前糯耍,先回想一下我們是如何分析他人編寫的程序代碼的扔字。在分析程序代碼時,我們通常從程序的入口main()函數(shù)開始温技,一點(diǎn)點(diǎn)地理清程序流革为,把握程序的運(yùn)行過程。同樣舵鳞,在分析結(jié)構(gòu)龐大的Android Framework時震檩,也要從Android平臺啟動過程著手。Android啟動過程包含從Linux內(nèi)核加載到Home應(yīng)用程序啟動的整個過程系任,依次分析這一過程恳蹲,有利于我們系統(tǒng)地理解Android Framework運(yùn)行的原理虐块。
如圖1-3所示,簡單地描述了Android啟動過程嘉蕾,本書在后續(xù)章節(jié)中講解Android Framework初始化過程贺奠、各模塊間如何相互作用等內(nèi)容時,均以此圖所描述的啟動過程為基礎(chǔ)错忱。
對照圖1-3 Android啟動過程圖儡率,簡單地講解一下。
1.Linux內(nèi)核
Android是基于Linux內(nèi)核的系統(tǒng)平臺以清。啟動時儿普,首先通過bootloader(系統(tǒng)加載器),加載Linux內(nèi)核掷倔。在Linux加載啟動時眉孩,與普通的Linux啟動過程相同,先初始化內(nèi)核勒葱,然后調(diào)用init進(jìn)程浪汪。
2.init
Android init進(jìn)程對各種設(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):啟動Debugger系統(tǒng)钠署。
Radio Interface Layer Daemon (rild):管理無線通信連接。
3.Context Manager
Context Manager是一個管理Android系統(tǒng)服務(wù)的重要進(jìn)程荒椭。系統(tǒng)服務(wù)是組成Android Framework的重要組件踏幻,提供從相機(jī)、音頻戳杀、視頻處理到各種應(yīng)用程序制作所需要的重要的API该面。
Context Manager提供運(yùn)行于Android內(nèi)的各種系統(tǒng)服務(wù)信息。應(yīng)用程序或Framework內(nèi)部模塊在調(diào)用系統(tǒng)服務(wù)時信卡,需要先向服務(wù)管理器申請隔缀,而后通過Binder IPC(Interprocess communication)調(diào)用系統(tǒng)服務(wù)。
在系統(tǒng)啟動時傍菇,Android所有系統(tǒng)服務(wù)都要把各自的handle信息注冊到Context Manager猾瘸,此時,Binder IPC用來進(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)用程序加載的時間揽思,每當(dāng)執(zhí)行Java應(yīng)用程序時袜腥,Zygote就會派生出一個子進(jìn)程來執(zhí)行應(yīng)用程序,該子進(jìn)程就是用來執(zhí)行Java應(yīng)用程序的虛擬機(jī)钉汗。
6.System Server
System Server是Android系統(tǒng)的一個核心進(jìn)程羹令,它是由Zygote進(jìn)程創(chuàng)建的,在Android啟動過程中位于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)用肪凛,需要先將它們注冊到Context Manager中。
在通過Binder IPC將Java系統(tǒng)服務(wù)注冊到基于C語言的服務(wù)管理器時辽社,需要使用JNI(Java Native Interface)本地編程接口显拜。JNI允許Java代碼與其他編程語言(如C、C++爹袁、匯編語言)編寫的應(yīng)用程序和庫進(jìn)行交互操作。
以上就是對Android啟動過程以及Framework初始化的簡單介紹矮固。當(dāng)然這僅僅是Android啟動過程的一部分失息,如圖1-3所示,當(dāng)所有Java系統(tǒng)服務(wù)加載完畢后档址,Activity Manager Service會運(yùn)行HOME應(yīng)用盹兢,啟動過程繼續(xù)進(jìn)行。這部分已超出本書所要討論的范圍守伸,如果讀者感興趣绎秒,請參照Android源碼進(jìn)行分析。
出于篇幅的考量尼摹,本書不可能對Android Framework所有模塊的所有動作作出說明见芹。即便如此,沿著本書提供的思路蠢涝,參考相關(guān)章節(jié)內(nèi)容玄呛,分析相關(guān)源碼,你會很快和二、很容易地掌握Android Framework徘铝。
文檔領(lǐng)取方式:點(diǎn)贊+關(guān)注,然后私信關(guān)鍵詞 【1】即可獲得免費(fèi)領(lǐng)取方式!