Android系統(tǒng)Java源碼探索(1)—系統(tǒng)架構(gòu)及源碼說明

一 前言

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)行流程。

圖1 Android 經(jīng)典模塊架構(gòu).png

二 系統(tǒng)架構(gòu)

圖2是一張官網(wǎng)的系統(tǒng)架構(gòu)圖,結(jié)合自己的認(rèn)知繪制了圖3,就以圖3說明系統(tǒng)內(nèi)部的架構(gòu)圖:


圖2 Andorid 官網(wǎng)系統(tǒng)架構(gòu).png
圖3 Android 系統(tǒng)架構(gòu).png

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等。
  • 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層的部分代碼有淺入深分析我們的常用組件;


APP應(yīng)用層的核心源碼.png

JAVA Framework層核心源碼.png

四 總結(jié)

我們以上一篇提到的幾個(gè)知識(shí)點(diǎn)為思路,結(jié)合JAVA層源碼(主要是圖3中這一部分),對(duì)應(yīng)用層組件由淺入深分析。包括Window Manager,Activity Manager,Package Manager,View System,Content Providers等。


Android JAVA部分結(jié)構(gòu)圖.png

由于能力有限,有的方面可能理解不當(dāng),后期會(huì)根據(jù)情況隨時(shí)調(diào)整。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。