

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

1.1 應(yīng)用層:
主要是一些系統(tǒng)應(yīng)用以及一些非系統(tǒng)應(yīng)用,用于與用戶直接進(jìn)行交互的
1.2應(yīng)用框架層:
對(duì)開(kāi)發(fā)人員提供一些開(kāi)發(fā)的API,包括一些系統(tǒng)應(yīng)用;其中包括一些Managers:
Activity Manager、Location Manager、Package Manager、Notification Manager、Resource Manager 、Window Manager、Content Providers 、View System
1.3系統(tǒng)運(yùn)行庫(kù)層(Native)
C/C++程序庫(kù)
能被Android 系統(tǒng)中的不同組件所使用,并通過(guò)應(yīng)用程序框架為開(kāi)發(fā)提供服務(wù)
SqliteAndroid 運(yùn)行時(shí)庫(kù)
又分為核心庫(kù)和ART(Android Runtime,Android5.0后取代了Dalvik虛擬機(jī));
ART > DVM >JVM
①相比于 JVM,DVM(Dalvik 虛擬機(jī))是專(zhuān)門(mén)為移動(dòng)開(kāi)發(fā)定制的,因?yàn)樗试S在有限的內(nèi)存內(nèi),同時(shí)允許多個(gè) Dalvik虛擬機(jī)的實(shí)例,并且每一個(gè)Dalvik應(yīng)用作為一個(gè)獨(dú)立的Linux進(jìn)程執(zhí)行,而獨(dú)立的進(jìn)程可以防止在虛擬機(jī)崩潰的時(shí)候所有程序都被關(guān)閉;
②DVM中的應(yīng)用每次運(yùn)行的時(shí)候,都需要通過(guò)JIT(Just In Time)即時(shí)編譯器,將字節(jié)碼轉(zhuǎn)換為機(jī)器碼,這樣使得運(yùn)行的效率降低;
③ART中,系統(tǒng)在安裝應(yīng)用時(shí)會(huì)進(jìn)行一次預(yù)編譯AOT(Ahead of Time),將字節(jié)碼預(yù)先編譯成機(jī)器碼存儲(chǔ)在本地,這樣每次運(yùn)行的時(shí)候都不需要執(zhí)行編譯了,運(yùn)行效率大大提高;
1.4硬件抽象層(HAL)
位于操作系統(tǒng)內(nèi)核層和硬件電路層之間的接口層,目的在于將硬件抽象化,為了保護(hù)硬件廠商的知識(shí)產(chǎn)權(quán),隱藏了特定平臺(tái)的硬件接口細(xì)節(jié),為操作系統(tǒng)提供虛擬硬件平臺(tái),使其具有硬件無(wú)關(guān)性,可在多個(gè)平臺(tái)上進(jìn)行移植;
1.5Linux內(nèi)核層(Linux Kernel)
Android核心系統(tǒng)服務(wù)基于 Linux內(nèi)核層,在此基礎(chǔ)上又添加了部分Android專(zhuān)用的驅(qū)動(dòng)。系統(tǒng)的安全性、內(nèi)存管理、進(jìn)行管理、網(wǎng)絡(luò)協(xié)議棧、驅(qū)動(dòng)模型等都依賴于該內(nèi)核;
二、源碼閱讀:
1.在線閱讀:

點(diǎn)擊版本進(jìn)入對(duì)應(yīng)的頁(yè)面,比如8.0:
比如在framework中搜索 MediaPlayer.java


2.本地閱讀:
下載源碼到本地后,可以使用Android Studio、Eclipse、Sublime、Source Insight(推薦)
這里使用Source Insight
http://www.cnblogs.com/dakewei/p/7993613.html
下資源碼:
https://pan.baidu.com/s/1ngsZs
