關(guān)于Android 的系統(tǒng)架構(gòu)

今天看筆試題的時(shí)候,遇到了關(guān)于Android架構(gòu)的問(wèn)題漓概,之前看筆試題的時(shí)候也去了解過(guò)漾月,只是沒(méi)有做更詳細(xì)的筆記,于是現(xiàn)在準(zhǔn)備在簡(jiǎn)書上做一下遇到的筆試題目的筆記胃珍,以方便以后的復(fù)習(xí)梁肿。

老版:4層架構(gòu)
Android的系統(tǒng)構(gòu)架層一共有4層,由下而上分別是:Linux內(nèi)核層堂鲜,Android系統(tǒng)運(yùn)行層栈雳,Android應(yīng)用框架層,Android應(yīng)用層缔莲。

之前在牛客網(wǎng)刷筆試題目的時(shí)候霉旗,也遇到了這樣的一道題痴奏,結(jié)果答案是5層,于是去網(wǎng)上找厌秒,發(fā)現(xiàn)4層架構(gòu)是老版本的了读拆,新的版本添加了一個(gè),硬件抽象層 鸵闪,原因是由于制作手機(jī)的工廠不愿意分享源碼導(dǎo)致

新版:5層架構(gòu)
由下而上分別是:Linux內(nèi)核層檐晕,硬件抽象層,Android系統(tǒng)運(yùn)行層蚌讼,Android應(yīng)用框架層辟灰,Android應(yīng)用層

以下是官方公布的標(biāo)準(zhǔn)架構(gòu)圖:


1000px-Android-System-Architecture.svg.png

Linux內(nèi)核層:Android以Linux操作系統(tǒng)內(nèi)核為基礎(chǔ),借助Linux內(nèi)核服務(wù)實(shí)現(xiàn)硬件設(shè)備驅(qū)動(dòng)篡石,進(jìn)程和內(nèi)存管理芥喇,網(wǎng)絡(luò)協(xié)議棧,電源管理凰萨,無(wú)線通信等核心功能继控。Android4.0版本之前基于Linux2.6系列內(nèi)核,4.0及之后的版本使用更新的Linux3.X內(nèi)核胖眷,并且兩個(gè)開源項(xiàng)目開始有了互通武通。Linux3.3內(nèi)核中正式包括一些Android代碼,可以直接引導(dǎo)進(jìn)入Android珊搀。Linux3.4將會(huì)增添電源管理等更多功能冶忱,以增加與Android的硬件兼容性,使Android在更多設(shè)備上得到支持

硬件抽象層:它是對(duì)硬件設(shè)備的具體實(shí)現(xiàn)加以抽象食棕。HAL沒(méi)有在Android官方系統(tǒng)架構(gòu)圖中標(biāo)明朗和。鑒于許多硬件設(shè)備廠商不希望公開其設(shè)備驅(qū)動(dòng)的源代碼错沽,如果能將android的應(yīng)用框架層與linux系統(tǒng)內(nèi)核的設(shè)備驅(qū)動(dòng)隔離,使應(yīng)用程序框架的開發(fā)盡量獨(dú)立于具體的驅(qū)動(dòng)程序眶拉,則android將減少對(duì)Linux內(nèi)核的依賴千埃。HAL由此而生,它是對(duì)Linux內(nèi)核驅(qū)動(dòng)程序進(jìn)行的封裝忆植,將硬件抽象化放可,屏蔽掉了底層的實(shí)現(xiàn)細(xì)節(jié)。HAL規(guī)定了一套應(yīng)用層對(duì)硬件層讀寫和配置的統(tǒng)一接口朝刊,本質(zhì)上就是將硬件的驅(qū)動(dòng)分為用戶空間和內(nèi)核空間兩個(gè)層面耀里;Linux內(nèi)核驅(qū)動(dòng)程序運(yùn)行于內(nèi)核空間,硬件抽象層運(yùn)行于用戶空間拾氓。

Android系統(tǒng)運(yùn)行層:它位于Linux內(nèi)核層之上的系統(tǒng)運(yùn)行庫(kù)層是應(yīng)用程序框架的支撐冯挎,為Android系統(tǒng)中的各個(gè)組件提供服務(wù)。Android系統(tǒng)運(yùn)行層由系統(tǒng)類庫(kù)和Android運(yùn)行時(shí)構(gòu)成咙鞍。
1.系統(tǒng)類庫(kù)
系統(tǒng)類庫(kù)大部分由C/C++編寫房官,所提供的功能通過(guò)Android應(yīng)用程序框架為開發(fā)者所使用,主要的系統(tǒng)類庫(kù)及說(shuō)明如下表:

圖片.png

除上表列舉的主要系統(tǒng)類庫(kù)之外续滋,Android NDK(Native Development Kit)翰守,即Android原生庫(kù),也十分重要疲酌。NDK為開發(fā)者提供了直接使用Android系統(tǒng)資源蜡峰,并采用C或C++語(yǔ)言編寫程序的接口。因此朗恳,第三方應(yīng)用程序可以不依賴于Dalvik虛擬機(jī)進(jìn)行開發(fā)湿颅。實(shí)際上,NDK提供了一系列從C或C++生成原生代碼所需要的工具僻肖,為開發(fā)者快速開發(fā)C或C++的動(dòng)態(tài)庫(kù)提供方便肖爵,并能自動(dòng)將生成的動(dòng)態(tài)庫(kù)和java應(yīng)用程序一起打包成應(yīng)用程序包文件,即.apk文件臀脏。
注意劝堪,使用原生庫(kù)無(wú)法訪問(wèn)應(yīng)用框架層API,兼容性可能無(wú)法保障揉稚。而且從安全性角度考慮秒啦,Android原生庫(kù)用非類型安全的程序語(yǔ)言C,C++編寫,更容易產(chǎn)生安全漏洞搀玖,原生庫(kù)的缺陷(bug)也可能更容易直接影響應(yīng)用程序的安全性余境。

2.Android運(yùn)行時(shí)
核心庫(kù):核心庫(kù)提供了Java5 se API的多數(shù)功能,并提供Android的核心API,如android.os芳来,android.net含末,android.media等。
Dalvik虛擬機(jī):Dalvik虛擬機(jī)是基于apache的java虛擬機(jī)即舌,并被改進(jìn)以適應(yīng)低內(nèi)存佣盒,低處理器速度的移動(dòng)設(shè)備環(huán)境。Dalvik虛擬機(jī)依賴于Linux內(nèi)核顽聂,實(shí)現(xiàn)進(jìn)程隔離與線程調(diào)試管理肥惭,安全和異常管理,垃圾回收等重要功能紊搪。

本質(zhì)而言蜜葱,Dalvik虛擬機(jī)并非傳統(tǒng)意義上的java虛擬機(jī)(JVM)。Dalvik虛擬機(jī)不僅不按照J(rèn)ava虛擬機(jī)的規(guī)范來(lái)實(shí)現(xiàn)耀石,而且兩者不兼容牵囤。


圖片.png

(從android4.4開始就出現(xiàn)了ART(android runtime),但是這個(gè)ART并不是指這一節(jié)的主題娶牌,而是一種用來(lái)代替Dalvik的新型運(yùn)行環(huán)境奔浅。當(dāng)然在4.4的正式環(huán)境中用的還是Dalvik,真正開始用ART取代Dalvik是從android5.0開始的诗良。)

另外補(bǔ)充一點(diǎn)sdk和ndk的關(guān)系:


20160107235017221.jpg

很顯然地,ndk可以通過(guò)native code跨過(guò)使用dalvik runtime,直接調(diào)用到android內(nèi)核資源鲁驶,而sdk則需要在dalvik runtime環(huán)境下才能調(diào)用到內(nèi)核資源鉴裹。然而兩者并不是各司其職,各不相關(guān)钥弯。android提供了JNI(java native interface)使兩者可以進(jìn)行相互調(diào)用和通信径荔。

Android應(yīng)用程序框架層:
用程序框架層提供開發(fā)Android應(yīng)用程序所需的一系列類庫(kù),使開發(fā)人員可以進(jìn)行快速的應(yīng)用程序開發(fā)脆霎,方便重用組件总处,也可以通過(guò)繼承實(shí)現(xiàn)個(gè)性化的擴(kuò)展。具體包括的模塊如表:


圖片.png

Android應(yīng)用層:
Android平臺(tái)的應(yīng)用層上包括各類與用戶直接交互的應(yīng)用程序睛蛛,或由java語(yǔ)言編寫的運(yùn)行于后臺(tái)的服務(wù)程序鹦马。例如,智能手機(jī)上實(shí)現(xiàn)的常見(jiàn)基本功能 程序忆肾,諸如SMS短信荸频,電話撥號(hào),圖片瀏覽器客冈,日歷旭从,游戲,地圖,web瀏覽器等程序和悦,以及開發(fā)人員開發(fā)的其他應(yīng)用程序退疫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鸽素,隨后出現(xiàn)的幾起案子褒繁,更是在濱河造成了極大的恐慌,老刑警劉巖付鹿,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澜汤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡舵匾,警方通過(guò)查閱死者的電腦和手機(jī)俊抵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坐梯,“玉大人徽诲,你說(shuō)我怎么就攤上這事〕逞” “怎么了谎替?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蹋辅。 經(jīng)常有香客問(wèn)我钱贯,道長(zhǎng),這世上最難降的妖魔是什么侦另? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任秩命,我火速辦了婚禮,結(jié)果婚禮上褒傅,老公的妹妹穿的比我還像新娘弃锐。我一直安慰自己,他們只是感情好殿托,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布霹菊。 她就那樣靜靜地躺著,像睡著了一般支竹。 火紅的嫁衣襯著肌膚如雪旋廷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天唾戚,我揣著相機(jī)與錄音柳洋,去河邊找鬼。 笑死叹坦,一個(gè)胖子當(dāng)著我的面吹牛熊镣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼绪囱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼测蹲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起鬼吵,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扣甲,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后齿椅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琉挖,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年涣脚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了示辈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遣蚀,死狀恐怖矾麻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芭梯,我是刑警寧澤险耀,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站玖喘,受9級(jí)特大地震影響甩牺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜累奈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一柴灯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧费尽,春花似錦、人聲如沸羊始。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)突委。三九已至柏卤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匀油,已是汗流浹背缘缚。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敌蚜,地道東北人桥滨。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親齐媒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒲每,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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