了解Android OS體系
Android系統(tǒng)的源代碼本身及其龐大,首先我們要知道的是,其由2部分組成:Android Kernel 與 Android OS 部分。Android Kernel部分完成了進(jìn)程管理,內(nèi)存管理等操作系統(tǒng)運(yùn)行的基礎(chǔ)組件,AOSP項(xiàng)目中的Android Kernel源自Linux Kernel,但做了大量的改動(dòng)。Android OS提供了Android系統(tǒng)特定的功能,比如系統(tǒng)啟動(dòng)過(guò)程,進(jìn)程之前的通們,權(quán)限管理,應(yīng)用管理等。當(dāng)然,這并不是說(shuō),Android Kernel部分完全與Android OS無(wú)關(guān),提出這一觀點(diǎn)基于以下2點(diǎn):
- Google的
AOSP項(xiàng)目中,Kernel與Android部分本身就是分開(kāi)下載的。 - 研究
Android Kernel與Android OS的人員,基本上是2類開(kāi)發(fā)人員。 - 對(duì)于一般的應(yīng)用開(kāi)者者來(lái)說(shuō),甚至Android手機(jī)廠商的開(kāi)發(fā)人員來(lái)說(shuō),大體都工作在
Android系統(tǒng)這一區(qū)域。
什么是Android Kernel
Android Kernel的源代碼基于Linux Kernel修改,在其上做了很多的修改。其改動(dòng)點(diǎn)主要包括:
- 對(duì)標(biāo)準(zhǔn)的Linux內(nèi)核代碼做了大量的剪裁和優(yōu)化.
- 添加了許多特有的代碼,比如采用Bionic Libc庫(kù)代替glibc庫(kù),添加Gold-Fish平臺(tái),
- 在Linux的基礎(chǔ)上新增了許多特有的驅(qū)動(dòng),比如:IPCBinder,LowMemory Killer,Ashmem,RAMConsole and Log Device,AndroidDebug Bridge等。
- 修改了調(diào)度器
- 為Android設(shè)備設(shè)計(jì)了新的電源管理系統(tǒng)
- 其它一些雜項(xiàng)
由于版權(quán)分歧等原因,這些修改并沒(méi)有merge到Linux主分支中去,因此,我們不能直接從Linux Kernel的官網(wǎng)(kernel.org)去下載適用于Android源碼的Linux內(nèi)核代碼,而是要到Google官網(wǎng)提供的kernel網(wǎng)址去下載經(jīng)過(guò)修改后的Linux內(nèi)核代碼。
什么是Android OS
Android OS部分的代碼,包括了硬件抽像層,Android虛擬機(jī),系統(tǒng)運(yùn)行時(shí)庫(kù),Android框架層及部分應(yīng)用的代碼(如相冊(cè)管理,設(shè)置,桌面)。涉及到Google賬號(hào)體系的一系列Google自己的應(yīng)用并不包括其中。
說(shuō)到這,就不得不提一張經(jīng)典的圖:

如上圖所示,紅色部分以上的都是本文特指的Android OS代碼包括的部分。
如何在線快速閱讀Android代碼
Google公司的倉(cāng)庫(kù)提供了Android Kernel與Android OS的源代碼,但各種原因,目前在國(guó)內(nèi)無(wú)法訪問(wèn),好在有一些國(guó)內(nèi)的站hok,比如https://www.androidos.net.cn/sourcecode。這個(gè)網(wǎng)站提供了多種方式預(yù)覽:GitHub這種分格的與IDE風(fēng)格的。
使用Github式的在線預(yù)覽
Google公司的倉(cāng)庫(kù)提供了Android Kernel與Android OS的源代碼,但各種原因,目前在國(guó)內(nèi)無(wú)法訪問(wèn),好在有一些國(guó)內(nèi)的站hok,比如https://www.androidos.net.cn/sourcecode。這個(gè)網(wǎng)站提供了多種方式預(yù)覽:GitHub這種分格的與IDE風(fēng)格的。以查看OAT相關(guān)式代碼代碼舉例,可以通過(guò)以下鏈接訪問(wèn)以便使用Github這種方式:DEX轉(zhuǎn)OAT,
OAT文件格式,也可以在這個(gè)鏈接以左樹右代碼的方式閱讀:DEX轉(zhuǎn)OAT。