Android系統(tǒng)架構(gòu)及系統(tǒng)源碼目錄

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

Android系統(tǒng)架構(gòu)分為五層寂汇,從上到下依次是應(yīng)用層西采、應(yīng)用框架層罐呼、系統(tǒng)運(yùn)行庫(kù)層鞠柄、硬件抽象層和Linux內(nèi)核層。


20170123173332254.png

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)源碼下載及閱讀

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)思劳。

參考

Android系統(tǒng)架構(gòu)與系統(tǒng)源碼目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市妨猩,隨后出現(xiàn)的幾起案子敢艰,更是在濱河造成了極大的恐慌,老刑警劉巖册赛,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異震嫉,居然都是意外死亡森瘪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)票堵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扼睬,“玉大人,你說(shuō)我怎么就攤上這事悴势〈坝睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵特纤,是天一觀的道長(zhǎng)军俊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捧存,這世上最難降的妖魔是什么粪躬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任担败,我火速辦了婚禮,結(jié)果婚禮上镰官,老公的妹妹穿的比我還像新娘提前。我一直安慰自己,他們只是感情好泳唠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布狈网。 她就那樣靜靜地躺著,像睡著了一般笨腥。 火紅的嫁衣襯著肌膚如雪拓哺。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天扇雕,我揣著相機(jī)與錄音拓售,去河邊找鬼。 笑死镶奉,一個(gè)胖子當(dāng)著我的面吹牛础淤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哨苛,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鸽凶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了建峭?” 一聲冷哼從身側(cè)響起玻侥,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亿蒸,沒(méi)想到半個(gè)月后凑兰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡边锁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年姑食,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茅坛。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡音半,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贡蓖,到底是詐尸還是另有隱情曹鸠,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布斥铺,位于F島的核電站彻桃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仅父。R本人自食惡果不足惜叛薯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一浑吟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耗溜,春花似錦组力、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至阿宅,卻和暖如春候衍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洒放。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工蛉鹿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人往湿。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓妖异,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親领追。 傳聞我的和親對(duì)象是個(gè)殘疾皇子他膳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • 今天開(kāi)篇跟大家講一個(gè)有關(guān)俞敏洪的故事棕孙。 在北京的中關(guān)村腹地,有一座新東方大廈些膨,里面寫(xiě)著新東方教育集團(tuán)的校訓(xùn):從絕望...
    精靈兒飛閱讀 841評(píng)論 3 6
  • A_秀大大閱讀 157評(píng)論 0 0
  • 夜幕打翻了蟀俊,滿(mǎn)天的繁星到處跑。 云朵打翻了订雾,潔白的棉花糖圍攏在我身邊欧漱。 夏天打翻了,流淌出股股清涼的湖水葬燎。 湖水打...
    一晴空行鶴閱讀 796評(píng)論 0 3
  • 小時(shí)候過(guò)年,最喜歡的是歡歡喜喜熱鬧的氣氛缚甩。 每年一到臘月谱净,我們一家人都會(huì)用大半天的時(shí)間,穿過(guò)家鄉(xiāng)小鎮(zhèn)的每條大街小巷...
    簡(jiǎn)兒的十年閱讀 526評(píng)論 25 24