一 前言
Android 系統(tǒng)龐大復(fù)雜,按照經(jīng)典的模塊化方式可以自下而上分為L(zhǎng)inux內(nèi)核層,系統(tǒng)類庫,運(yùn)行時(shí),應(yīng)用框架層,應(yīng)用層,圖1是一張經(jīng)典的Android 四層架構(gòu)圖。可以看出Android系統(tǒng)采用了低耦合、高復(fù)用的組件化思想設(shè)計(jì)。下面是老羅對(duì)Android組件化設(shè)計(jì)說明。
Android的組件設(shè)計(jì)思想與傳統(tǒng)的組件設(shè)計(jì)思想最大的區(qū)別在于,前者不依賴于進(jìn)程。也就是說,進(jìn)程即使由于內(nèi)存緊張被強(qiáng)行殺掉了,但是運(yùn)行在里面的組件還是存在的。這樣就可以在組件再次需要使用時(shí),原地滿血復(fù)活,就像什么都沒發(fā)生過一樣。這種設(shè)計(jì)思想非常適合內(nèi)存較小的移動(dòng)設(shè)備 ——羅升陽
由于我們接下來要研究Java層的源碼,所以需要了解整個(gè)系統(tǒng)的啟動(dòng)流程, 方便我們理解源碼,但是圖1只是體現(xiàn)了Android的模塊化架構(gòu),并未真實(shí)反映Android系統(tǒng)內(nèi)部架構(gòu)和運(yùn)行流程。
二 系統(tǒng)架構(gòu)
圖2是一張官網(wǎng)的系統(tǒng)架構(gòu)圖,結(jié)合自己的認(rèn)知繪制了圖3,就以圖3說明系統(tǒng)內(nèi)部的架構(gòu)圖:
Android系統(tǒng)內(nèi)部自下而上分為L(zhǎng)inux 內(nèi)核層,硬件抽象層,框架層(包括JAVA 和C++框架),BInder IPC通信層,APP應(yīng)用程序?qū)樱?/p>
- Linux Kernel層
Android 底層使用Linux內(nèi)核,Android對(duì)典型的Linux內(nèi)核做了補(bǔ)充,提供了內(nèi)存管理,和喚醒鎖定Binder驅(qū)動(dòng)程序等,對(duì)于開發(fā)驅(qū)動(dòng)程序而言,和典型的linux內(nèi)核驅(qū)動(dòng)開發(fā)是一樣的。 - 硬件抽象層
典型的Linux系統(tǒng)都是把硬件層放在內(nèi)核空間的驅(qū)動(dòng)模塊實(shí)現(xiàn),而Android系統(tǒng)放在了用戶空間,有一個(gè)重要原因是保護(hù)廠商的利益,因?yàn)閘inux內(nèi)核源碼遵循的是GPL協(xié)議(這個(gè)協(xié)議你修改了源碼,就要公開),但是把對(duì)于硬件的驅(qū)動(dòng)開發(fā)完全放在用戶空間是不可能實(shí)現(xiàn)的,所以android采用了折中的方案,加了一個(gè)在用戶空間實(shí)現(xiàn)的硬件抽象層,封裝了硬件的實(shí)現(xiàn)細(xì)節(jié)和參數(shù),從而保證了廠商的利益。 - 系統(tǒng)框架層
該層主要包含系統(tǒng)服務(wù)(窗口管理器,搜索服務(wù),通知管理器等)和媒體服務(wù)(與播放和錄制有關(guān))。- JAVA 框架層
該層主要是利用JAVA實(shí)現(xiàn)的系統(tǒng)服務(wù),我們分析的源碼主要是這一層,包括Window Manager的理解,Activity Manager,Package Manager,View System等。 - C++ 框架層
該層主要包含媒體服務(wù),3D繪制庫—OpenGL ,數(shù)據(jù)庫—SQLite等。
- JAVA 框架層
- Binder IPC層
Binder作為Android系統(tǒng)提供的一種進(jìn)程間通信機(jī)制,是個(gè)難點(diǎn),后面會(huì)好好看看源碼。 - APP層
該層是我們利用四大組件開發(fā)的APP,以及系統(tǒng)開發(fā)的APP,通過Binder和系統(tǒng)框架層之間通信,這層離應(yīng)用開發(fā)最近,要重點(diǎn)理解一下。
三 Android O Java部分源碼說明
上面說了Android系統(tǒng)龐大復(fù)雜,源碼總共有30G左右,所以我們摘出來APP應(yīng)用層和JAVA Framework層的部分代碼有淺入深分析我們的常用組件;
四 總結(jié)
我們以上一篇提到的幾個(gè)知識(shí)點(diǎn)為思路,結(jié)合JAVA層源碼(主要是圖3中這一部分),對(duì)應(yīng)用層組件由淺入深分析。包括Window Manager,Activity Manager,Package Manager,View System,Content Providers等。
由于能力有限,有的方面可能理解不當(dāng),后期會(huì)根據(jù)情況隨時(shí)調(diào)整。