Android系統(tǒng)五層架構

1. Android系統(tǒng)架構

Android系統(tǒng)架構分為五層:從上到下依次是應用層滋觉、應用架構層豌熄、系統(tǒng)運行庫層、硬件抽象層和Linux內核層气忠,如圖:


Android系統(tǒng)框架.png

1. 應用層(System Apps)

系統(tǒng)內置的應用程序以及非系統(tǒng)級的應用程序都屬于應用層,負責與用戶進行直接交互赋咽,通常都是用Java進行開發(fā)的旧噪。

2. 應用框架層(Java API Framework)

應用框架層為開發(fā)人員提供了開發(fā)應用程序所需要的API,我們平常開發(fā)應用程序都是調用這一層所提供的API脓匿,當然也包括系統(tǒng)應用舌菜。這一層是由Java代碼編寫的,可以稱為Java Framework亦镶。下面來看這一層所提供的主要組件:

名稱 功能描述
Activity Manager(活動管理器) 管理各個應用程序生命周期日月,以及常用的導航回退功能
Location Manager(位置管理器) 提供地理位置及定位功能服務
Package Manager(包管理器) 管理所有安裝在Android系統(tǒng)中的應用程序
Notification Manager(通知管理器) 使得應用程序可以在狀態(tài)欄中顯示自定義的提示信息
Resource Manager(資源管理器) 提供應用程序使用的各種非代碼資源,如本地化字符串缤骨、圖片爱咬、布局文件、顏色文件等
Telephony Manager(電話管理器) 管理所有的移動設備功能
Window Manager(窗口管理器) 管理所有開啟的窗口程序
Content Provider(內容提供者) 使得不同應用程序之間可以共享數(shù)據
View System(視圖系統(tǒng)) 構建應用程序的基本組件

3. 系統(tǒng)運行庫層

從Android系統(tǒng)框架圖上可以看出绊起,系統(tǒng)運行庫層分為兩部分精拟,分別是 C/C++ 程序庫和 Android 運行時庫,下面分別進行介紹:

(1)C/C++程序庫
名稱 功能描述
OpenGL ES 3D繪圖函數(shù)庫
Libc 從BSD繼承來的標準C系統(tǒng)函數(shù)庫虱歪,專門為基于嵌入式Linux的設備定制
Media Framework 多媒體庫蜂绎,支持多種常用的音頻、視頻格式錄制和回放笋鄙。
SQLite 輕型的關系型數(shù)據庫引擎
SGL 底層的2D圖形渲染引擎
SSL 安全套接層师枣,是為網絡通信提供安全及數(shù)據完整性的一種安全協(xié)議
FreeType 可移植的字體引擎,它提供統(tǒng)一的接口來訪問多種字體格式文件
(2)Android運行時庫

運行時庫又分為核心庫和ART(5.0系統(tǒng)之后萧落,Dalvik虛擬機被ART取代)践美。核心庫提供了Java語言核心庫的大多數(shù)功能,這樣開發(fā)者可以使用Java語言來編寫Android應用找岖。相較于JVM陨倡,Dalvik虛擬機是專門為移動設備定制的,允許在有限的內存中同時運行多個虛擬機的實例许布,并且每一個Dalvik 應用作為一個獨立的Linux 進程執(zhí)行兴革。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。而替代Dalvik虛擬機的ART 的機制與Dalvik 不同蜜唾。在Dalvik下杂曲,應用每次運行的時候箕昭,字節(jié)碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的運行效率解阅,而在ART 環(huán)境中落竹,應用在第一次安裝的時候,字節(jié)碼就會預先編譯成機器碼货抄,使其成為真正的本地應用述召。

硬件抽象層(HAL)

硬件抽象層是位于操作系統(tǒng)內核與硬件電路之間的接口層,其目的在于將硬件抽象化蟹地,為了保護硬件廠商的知識產權积暖,它隱藏了特定平臺的硬件接口細節(jié),為操作系統(tǒng)提供虛擬硬件平臺怪与,使其具有硬件無關性夺刑,可在多種平臺上進行移植。 從軟硬件測試的角度來看分别,軟硬件的測試工作都可分別基于硬件抽象層來完成遍愿,使得軟硬件測試工作的并行進行成為可能。通俗來講耘斩,就是將控制硬件的動作放在硬件抽象層中沼填。

Linux內核層

Android 的核心系統(tǒng)服務基于Linux 內核,在此基礎上添加了部分Android專用的驅動括授。系統(tǒng)的安全性坞笙、內存管理、進程管理荚虚、網絡協(xié)議棧和驅動模型等都依賴于該內核薛夜。

Android系統(tǒng)的五層架構就講到這,了解以上的知識對以后分析系統(tǒng)源碼有很大的幫助版述。

2. Android系統(tǒng)源碼目錄

我們要先了解Android系統(tǒng)源碼目錄梯澜,為后期源碼學習打下基礎。關于源碼的閱讀院水,推薦使用該百度網盤地址下載:https://pan.baidu.com/s/1d3WtXW7BrmaLGo2bl6lyPA腊徙,它提供了多個Android版本的的源碼下載简十。

整體結構

各個版本的源碼目錄基本是類似檬某,如果是編譯后的源碼目錄會多增加一個out文件夾,用來存儲編譯產生的文件螟蝙。Android7.0的根目錄結構說明如下表所示恢恼。

Android源碼根目錄 描述
abi 應用程序二進制接口
art 全新的ART運行環(huán)境
bionic 系統(tǒng)C庫
bootable 啟動引導相關代碼
build 存放系統(tǒng)編譯規(guī)則及generic等基礎開發(fā)包配置
cts Android兼容性測試套件標準
dalvik dalvik虛擬機
developers 開發(fā)者目錄
development 應用程序開發(fā)相關
device 設備相關配置
docs 參考文檔目錄
external 開源模組相關文件
frameworks 應用程序框架,Android系統(tǒng)核心部分胰默,由Java和C++編寫
hardware 主要是硬件抽象層的代碼
libcore 核心庫相關文件
libnativehelper 動態(tài)庫场斑,實現(xiàn)JNI庫的基礎
ndk NDK相關代碼漓踢,幫助開發(fā)人員在應用程序中嵌入C/C++代碼
out 編譯完成后代碼輸出在此目錄
packages 應用程序包
pdk Plug Development Kit 的縮寫,本地開發(fā)套件
platform_testing 平臺測試
prebuilts x86和arm架構下預編譯的一些資源
sdk sdk和模擬器
system 底層文件系統(tǒng)庫漏隐、應用和組件
toolchain 工具鏈文件
tools 工具文件
Makefile 全局Makefile文件喧半,用來定義編譯規(guī)則

可以看出,系統(tǒng)源碼分類清晰青责,并且內容龐大且復雜挺据。接下來分析packages中的內容,也就是應用層部分

應用層部分

應用層位于整個Android系統(tǒng)的最上層脖隶,開發(fā)者開發(fā)的應用程序以及系統(tǒng)內置的應用程序都是在應用層扁耐。源碼根目錄中的packages目錄對應著系統(tǒng)應用層。它的目錄結構如表

packages目錄 描述
apps 核心應用程序
experimental 第三方應用程序
inputmethods 輸入法目錄
providers 內容提供者目錄
screensavers 屏幕保護
services 通信服務
wallpapers 墻紙

從目錄結構可以發(fā)現(xiàn)产阱,packages目錄存放著系統(tǒng)核心應用程序婉称、第三方的應用程序和輸入法等等,這些應用都是運行在系統(tǒng)應用層的构蹬,因此packages目錄對應著系統(tǒng)的應用層王暗。

應用框架層部分

應用框架層是系統(tǒng)的核心部分,一方面向上提供接口給應用層調用庄敛,另一方面向下與C/C++程序庫以及硬件抽象層等進行銜接瘫筐。 應用框架層的主要實現(xiàn)代碼在/frameworks/base和/frameworks/av目錄下,其中/frameworks/base目錄結構如表

/frameworks/base目錄 描述
api 定義API
cmds 重要命令:am铐姚、app_proce等
core 核心庫
data 字體和聲音等數(shù)據文件
docs 文檔
graphics 圖形圖像相關
include 頭文件
keystore 和數(shù)據簽名證書相關
libs
location 地理位置相關庫
media 多媒體相關庫
native 本地庫
nfc-extras NFC相關
obex 藍牙傳輸
opengl 2D/3D 圖形API
packages 設置策肝、TTS、VPN程序
sax XML解析器
services 系統(tǒng)服務
telephony 電話通訊管理
test-runner 測試工具相關
tests 測試相關
tools 工具
wifi wifi無線網絡

C/C++程序庫部分

系統(tǒng)運行庫層(Native)中的 C/C++程序庫的類型繁多隐绵,功能強大之众,C/C++程序庫并不完全在一個目錄中,這里給出幾個常用且比較重要的C/C++程序庫所在的目錄位置依许。

目錄位置 描述
bionic/ Google開發(fā)的系統(tǒng)C庫棺禾,以BSD許可形式開源。
/frameworks/av/media 系統(tǒng)媒體庫
/frameworks/native/opengl 第三方圖形渲染庫
/frameworks/native/services/surfaceflinger 圖形顯示庫峭跳,主要負責圖形的渲染膘婶、疊加和繪制等功能
external/sqlite 輕量型關系數(shù)據庫SQLite的C++實現(xiàn)

講完 C/C++程序庫部分,剩下的部分我們已經給出:Android運行時庫的代碼放在art/目錄中蛀醉。硬件抽象層的代碼在hardware/目錄中悬襟,這一部分是手機廠商改動最大的一部分,根據手機終端所采用的硬件平臺會有不同的實現(xiàn)拯刁。

3. 源碼閱讀

系統(tǒng)源碼的閱讀有很多種方式脊岳,總的來說分為兩種:
(1)在線閱讀
推薦兩個在線閱讀的網站:http://androidxref.com/https://www.androidos.net.cn/sourcecode
(2)Source Insight
下載網址:https://www.sourceinsight.com/download/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子割捅,更是在濱河造成了極大的恐慌奶躯,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亿驾,死亡現(xiàn)場離奇詭異嘹黔,居然都是意外死亡,警方通過查閱死者的電腦和手機莫瞬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門参淹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乏悄,你說我怎么就攤上這事浙值。” “怎么了檩小?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵开呐,是天一觀的道長。 經常有香客問我规求,道長筐付,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任阻肿,我火速辦了婚禮瓦戚,結果婚禮上,老公的妹妹穿的比我還像新娘丛塌。我一直安慰自己较解,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布赴邻。 她就那樣靜靜地躺著印衔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姥敛。 梳的紋絲不亂的頭發(fā)上奸焙,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音彤敛,去河邊找鬼与帆。 笑死,一個胖子當著我的面吹牛墨榄,可吹牛的內容都是我干的玄糟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼渠概,長吁一口氣:“原來是場噩夢啊……” “哼茶凳!你這毒婦竟也來了嫂拴?” 一聲冷哼從身側響起播揪,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贮喧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后猪狈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箱沦,經...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年雇庙,在試婚紗的時候發(fā)現(xiàn)自己被綠了谓形。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡疆前,死狀恐怖寒跳,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情竹椒,我是刑警寧澤童太,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站胸完,受9級特大地震影響书释,放射性物質發(fā)生泄漏。R本人自食惡果不足惜赊窥,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一爆惧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锨能,春花似錦扯再、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至傲隶,卻和暖如春饺律,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跺株。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工复濒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乒省。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓巧颈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親袖扛。 傳聞我的和親對象是個殘疾皇子砸泛,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容