1 Android系統(tǒng)架構(gòu)
Android系統(tǒng)架構(gòu)分為五層寂汇,從上到下依次是應(yīng)用層西采、應(yīng)用框架層罐呼、系統(tǒng)運(yùn)行庫(kù)層鞠柄、硬件抽象層和Linux內(nèi)核層。
2 應(yīng)用層
系統(tǒng)內(nèi)置的應(yīng)用程序以及非系統(tǒng)級(jí)的應(yīng)用程序都是屬于應(yīng)用層嫉柴。負(fù)責(zé)與用戶(hù)進(jìn)行直接交互厌杜,通常都是用Java進(jìn)行開(kāi)發(fā)的。
3 應(yīng)用框架層(Java Framework)
應(yīng)用框架層為開(kāi)發(fā)人員提供了可以開(kāi)發(fā)應(yīng)用程序所需要的API计螺,我們平常開(kāi)發(fā)應(yīng)用程序都是調(diào)用的這一層所提供的API夯尽,當(dāng)然也包括系統(tǒng)的應(yīng)用。
名稱(chēng) | 功能描述 |
---|---|
Activity Manager(活動(dòng)管理器) | 管理各個(gè)應(yīng)用程序生命周期以及通常的導(dǎo)航回退功能 |
Location Manager(位置管理器) | 提供地理位置以及定位功能服務(wù) |
Package Manager(包管理器) | 管理所有安裝在Android系統(tǒng)中的應(yīng)用程序 |
Notification Manager(通知管理器) | 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息 |
Resource Manager(資源管理器) | 提供應(yīng)用程序使用的各種非代碼資源登馒,如本地化字符串匙握、圖片、布局文件谊娇、顏色文件等 |
Telephony Manager(電話(huà)管理器) | 管理所有的移動(dòng)設(shè)備功能 |
Window Manager(窗口管理器) | 管理所有開(kāi)啟的窗口程序 |
Content Providers(內(nèi)容提供器) | 使得不同應(yīng)用程序之間可以共享數(shù)據(jù) |
View System(視圖系統(tǒng)) | 構(gòu)建應(yīng)用程序的基本組件 |
4 系統(tǒng)運(yùn)行庫(kù)層(Native)
系統(tǒng)運(yùn)行庫(kù)層分為兩部分肺孤,分別是C/C++程序庫(kù)和Android運(yùn)行時(shí)庫(kù)。
4.1 C/C++程序庫(kù)
C/C++程序庫(kù)能被Android系統(tǒng)中的不同組件所使用济欢,并通過(guò)應(yīng)用程序框架為開(kāi)發(fā)者提供服務(wù),主要的C/C++程序庫(kù)如下表2所示小渊。
名稱(chēng) | 功能描述 |
---|---|
OpenGL ES | 3D繪圖函數(shù)庫(kù) |
Libc | 從BSD繼承來(lái)的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(kù)法褥,專(zhuān)門(mén)為基于嵌入式Linux的設(shè)備定制 |
Media Framework | 多媒體庫(kù),支持多種常用的音頻酬屉、視頻格式錄制和回放半等。 |
SQLite | 輕型的關(guān)系型數(shù)據(jù)庫(kù)引擎 |
SGL | 底層的2D圖形渲染引擎 |
SSL | 安全套接層,是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議 |
FreeType | 可移植的字體引擎呐萨,它提供統(tǒng)一的接口來(lái)訪問(wèn)多種字體格式文件 |
4.2 Android運(yùn)行時(shí)庫(kù)
- 運(yùn)行時(shí)庫(kù)又分為核心庫(kù)和ART(5.0系統(tǒng)之后杀饵,Dalvik虛擬機(jī)被ART取代)。
- 核心庫(kù)提供了Java語(yǔ)言核心庫(kù)的大多數(shù)功能谬擦,這樣開(kāi)發(fā)者可以使用Java語(yǔ)言來(lái)編寫(xiě)Android應(yīng)用切距。
- 相較于JVM,Dalvik虛擬機(jī)是專(zhuān)門(mén)為移動(dòng)設(shè)備定制的惨远,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例谜悟,并且每一個(gè)Dalvik 應(yīng)用作為一個(gè)獨(dú)立的Linux 進(jìn)程執(zhí)行。獨(dú)立的進(jìn)程可以防止在虛擬機(jī)崩潰的時(shí)候所有程序都被關(guān)閉北秽。
- 而替代Dalvik虛擬機(jī)的ART 的機(jī)制與Dalvik 不同葡幸。在Dalvik下,應(yīng)用每次運(yùn)行的時(shí)候贺氓,字節(jié)碼都需要通過(guò)即時(shí)編譯器轉(zhuǎn)換為機(jī)器碼蔚叨,這會(huì)拖慢應(yīng)用的運(yùn)行效率,而在ART 環(huán)境中,應(yīng)用在第一次安裝的時(shí)候蔑水,字節(jié)碼就會(huì)預(yù)先編譯成機(jī)器碼邢锯,使其成為真正的本地應(yīng)用。
5 硬件抽象層(HAL)
- 硬件抽象層是位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層肤粱,其目的在于將硬件抽象化弹囚,為了保護(hù)硬件廠商的知識(shí)產(chǎn)權(quán),它隱藏了特定平臺(tái)的硬件接口細(xì)節(jié)领曼,為操作系統(tǒng)提供虛擬硬件平臺(tái)鸥鹉,使其具有硬件無(wú)關(guān)性,可在多種平臺(tái)上進(jìn)行移植庶骄。
- 從軟硬件測(cè)試的角度來(lái)看毁渗,軟硬件的測(cè)試工作都可分別基于硬件抽象層來(lái)完成,使得軟硬件測(cè)試工作的并行進(jìn)行成為可能单刁。
- 將控制硬件的動(dòng)作放在硬件抽象層中灸异。
6 Linux內(nèi)核層
- 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)模型等都依賴(lài)于該內(nèi)核么伯。
7 Android系統(tǒng)源碼目錄
7.1 系統(tǒng)源碼下載及閱讀
- 閱讀系統(tǒng)源碼:源碼鏈接
- 源碼下載 Android 鏡像
- 百度網(wǎng)盤(pán) 網(wǎng)盤(pán)鏈接
7.2 Android7.0的根目錄結(jié)構(gòu)
Android源碼根目錄 | 描述 |
---|---|
abi | 應(yīng)用程序二進(jìn)制接口 |
art | 全新的ART運(yùn)行環(huán)境 |
bionic | 系統(tǒng)C庫(kù) |
bootable | 啟動(dòng)引導(dǎo)相關(guān)代碼 |
build | 存放系統(tǒng)編譯規(guī)則及generic等基礎(chǔ)開(kāi)發(fā)包配置 |
cts | Android兼容性測(cè)試套件標(biāo)準(zhǔn) |
dalvik | dalvik虛擬機(jī) |
developers | 開(kāi)發(fā)者目錄 |
development | 應(yīng)用程序開(kāi)發(fā)相關(guān) |
device | 設(shè)備相關(guān)配置 |
docs | 參考文檔目錄 |
external | 開(kāi)源模組相關(guān)文件 |
frameworks | 應(yīng)用程序框架,Android系統(tǒng)核心部分卡儒,由Java和C++編寫(xiě) |
hardware | 主要是硬件抽象層的代碼 |
libcore | 核心庫(kù)相關(guān)文件 |
libnativehelper | 動(dòng)態(tài)庫(kù)田柔,實(shí)現(xiàn)JNI庫(kù)的基礎(chǔ) |
ndk | NDK相關(guān)代碼,幫助開(kāi)發(fā)人員在應(yīng)用程序中嵌入C/C++代碼 |
out | 編譯完成后代碼輸出在此目錄 |
packages | 應(yīng)用程序包 |
pdk | Plug Development Kit 的縮寫(xiě)骨望,本地開(kāi)發(fā)套件 |
platform_testing | 平臺(tái)測(cè)試 |
prebuilts | x86和arm架構(gòu)下預(yù)編譯的一些資源 |
sdk | sdk和模擬器 |
system | 底層文件系統(tǒng)庫(kù)硬爆、應(yīng)用和組件 |
toolchain | 工具鏈文件 |
tools | 工具文件 |
Makefile | 全局Makefile文件,用來(lái)定義編譯規(guī)則 |
7.3 應(yīng)用層部分packages
- 源碼根目錄中的packages目錄對(duì)應(yīng)著系統(tǒng)應(yīng)用層擎鸠。
- 應(yīng)用層位于整個(gè)Android系統(tǒng)的最上層缀磕,開(kāi)發(fā)者開(kāi)發(fā)的應(yīng)用程序以及系統(tǒng)內(nèi)置的應(yīng)用程序都是在應(yīng)用層。
packages目錄 | 描述 |
---|---|
apps | 核心應(yīng)用程序 |
experimental | 第三方應(yīng)用程序 |
inputmethods | 輸入法目錄 |
providers | 內(nèi)容提供者目錄 |
screensavers | 屏幕保護(hù) |
services | 通信服務(wù) |
wallpapers | 墻紙 |
packages目錄存放著系統(tǒng)核心應(yīng)用程序糠亩、第三方的應(yīng)用程序和輸入法等等虐骑,這些應(yīng)用都是運(yùn)行在系統(tǒng)應(yīng)用層的,因此packages目錄對(duì)應(yīng)著系統(tǒng)的應(yīng)用層赎线。
7.4 應(yīng)用框架層部分
- 應(yīng)用框架層的主要實(shí)現(xiàn)代碼在/frameworks/base和/frameworks/av目錄下廷没,其中/frameworks/base目錄結(jié)構(gòu)。
- 應(yīng)用框架層是系統(tǒng)的核心部分,一方面向上提供接口給應(yīng)用層調(diào)用垂寥,另一方面向下與C/C++程序庫(kù)以及硬件抽象層等進(jìn)行銜接颠黎。
/frameworks/base目錄 | 描述 | /frameworks/base目錄 | 描述 |
---|---|---|---|
api | 定義API | cmds | 重要命令:am另锋、app_proce等 |
core | 核心庫(kù) | data | 字體和聲音等數(shù)據(jù)文件 |
docs | 文檔 | graphics | 圖形圖像相關(guān) |
include | 頭文件 | keystore | 和數(shù)據(jù)簽名證書(shū)相關(guān) |
libs | 庫(kù) | location | 地理位置相關(guān)庫(kù) |
media | 多媒體相關(guān)庫(kù) | native | 本地庫(kù) |
nfc-extras | NFC相關(guān) | obex | 藍(lán)牙傳輸 |
opengl | 2D/3D 圖形API | packages | 設(shè)置、TTS狭归、VPN程序 |
sax | XML解析器 | services | 系統(tǒng)服務(wù) |
telephony | 電話(huà)通訊管理 | test-runner | 測(cè)試工具相關(guān) |
tests | 測(cè)試相關(guān) | tools | 工具 |
wifi | wifi無(wú)線(xiàn)網(wǎng)絡(luò) |
7.5 C/C++程序庫(kù)部分
目錄位置 | 描述 |
---|---|
bionic/ | Google開(kāi)發(fā)的系統(tǒng)C庫(kù)夭坪,以BSD許可形式開(kāi)源。 |
/frameworks/av/media | 系統(tǒng)媒體庫(kù) |
/frameworks/native/opengl | 第三方圖形渲染庫(kù) |
/frameworks/native/services/surfaceflinger | 圖形顯示庫(kù)过椎,主要負(fù)責(zé)圖形的渲染室梅、疊加和繪制等功能 |
external/sqlite | 輕量型關(guān)系數(shù)據(jù)庫(kù)SQLite的C++實(shí)現(xiàn) |
系統(tǒng)運(yùn)行庫(kù)層(Native)中的 C/C++程序庫(kù)的類(lèi)型繁多,功能強(qiáng)大疚宇,C/C++程序庫(kù)并不完全在一個(gè)目錄中亡鼠,這里給出幾個(gè)常用且比較重要的C/C++程序庫(kù)所在的目錄位置。
目錄位置 | 描述 |
---|---|
bionic/ | Google開(kāi)發(fā)的系統(tǒng)C庫(kù)敷待,以BSD許可形式開(kāi)源间涵。 |
/frameworks/av/media | 系統(tǒng)媒體庫(kù) |
/frameworks/native/opengl | 第三方圖形渲染庫(kù) |
/frameworks/native/services/surfaceflinger | 圖形顯示庫(kù),主要負(fù)責(zé)圖形的渲染榜揖、疊加和繪制等功能 |
external/sqlite | 輕量型關(guān)系數(shù)據(jù)庫(kù)SQLite的C++實(shí)現(xiàn) |
Android運(yùn)行時(shí)庫(kù)的代碼放在art/目錄中勾哩。
硬件抽象層的代碼在hardware/目錄中,這一部分是手機(jī)廠商改動(dòng)最大的一部分举哟,根據(jù)手機(jī)終端所采用的硬件平臺(tái)會(huì)有不同的實(shí)現(xiàn)思劳。