Android 系統(tǒng)架構(gòu),真心不敢說講解或者解釋节视。只能說學(xué)習(xí)了解拳锚。
今天,我只是簡單的學(xué)習(xí)了解一些非逞靶校基本和簡單的介紹霍掺。
說到Android,大多數(shù)人的理解就是app拌蜘。但是杆烁,Android并不是app,app只是Android的一個很小的部分简卧。所以兔魂,看到很多網(wǎng)文說,Android快死了举娩,要被h5干掉了的時候析校,真的覺得可笑。h5只會干掉那些只會寫界面的Android程序員铜涉。
ok智玻,話不多說,開始今天的學(xué)習(xí)吧芙代。
Android吊奢,做Android的同學(xué)都是知道的,Android是用java寫的(準(zhǔn)確來說是用javaAPI纹烹,雖然現(xiàn)在用kotlin了页滚,但是,依然調(diào)用的是javaAPI)铺呵,但是裹驰,調(diào)用javaAPI之后,又干了什么陪蜻?可能有些同學(xué)就不知道了邦马。就像是,tv.settext("內(nèi)容")宴卖,我們知道界面會出現(xiàn)“內(nèi)容”滋将,但我們不知道為什么會出現(xiàn)內(nèi)容,或者說症昏,為什么調(diào)用這句話随闽,就會出現(xiàn)內(nèi)容。其實肝谭,我也不是很清楚掘宪,我只能用自己的理解蛾扇,參考Android官方文檔,去解釋魏滚。
首先镀首,引入Android系統(tǒng)架構(gòu)的概念:Android系統(tǒng)架構(gòu)分為五層,從上到下依次是應(yīng)用層鼠次、應(yīng)用框架層更哄、系統(tǒng)運行庫層、硬件抽象層和Linux內(nèi)核層腥寇。
這里成翩,我盜圖一下:如下圖,我們的app其實就是在第一層赦役。
當(dāng)我們的app調(diào)用某個api的時候麻敌,其實是調(diào)用framework層的某個指令(方法)
,framewoek層對應(yīng)的指令掂摔,又會向下傳遞(調(diào)用)术羔,
調(diào)用Native層(系統(tǒng)運行庫層,這一層其實就是虛擬機層棒呛,這一層會將javaAPI“轉(zhuǎn)換”為字節(jié)碼聂示,再將字節(jié)碼“轉(zhuǎn)換”為機器碼)
然后再將機器碼向下傳遞域携,給硬件抽象層(這一層簇秒,其實就是硬件接口層,是一層抽象)
最終的實現(xiàn)秀鞭,其實是Linux內(nèi)核層趋观,這一層才能真正的調(diào)用硬件,讓硬件干事情(當(dāng)然锋边,這里就是我的盲區(qū)了)
ok皱坛,最后總結(jié)一下;
應(yīng)用層:系統(tǒng)內(nèi)置的應(yīng)用程序以及非系統(tǒng)級的應(yīng)用程序都是屬于應(yīng)用層豆巨,主要負(fù)責(zé)與用戶進行直接交互剩辟,比如計算器,qq等app
應(yīng)用框架層:javaAPI往扔,就是我們寫app時贩猎,調(diào)用的那些自帶的api,activity.finish()
系統(tǒng)運行庫層: C/C++程序庫比如多媒體播放器萍膛,Android運行時庫 吭服,其實就是ART虛擬機(5.0系統(tǒng)之后,Dalvik虛擬機被ART取代蝗罗,其實可以理解為JVM)
硬件抽象層(HAL):硬件抽象層是位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層艇棕,其目的在于將硬件抽象化蝌戒,就是將控制硬件的動作放在硬件抽象層中。
Linux 內(nèi)核:Android 的核心系統(tǒng)服務(wù)基于Linux 內(nèi)核沼琉,在此基礎(chǔ)上添加了部分Android專用的驅(qū)動北苟。系統(tǒng)的安全性、內(nèi)存管理打瘪、進程管理粹淋、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型等都依賴于該內(nèi)核。
下一篇瑟慈,我想詳細(xì)學(xué)習(xí)了解一下jvm虛擬機中桃移,類加載過程。