1.下圖就是Android的基本框架
2.Android基本框架共三層悬槽,分別為應(yīng)用層井厌,類庫層,Linux 內(nèi)核層攒巍。其中應(yīng)用層又分為應(yīng)用(Applications)和應(yīng)用框架(Application Framework)而柑,類庫層分為類庫(Libraries)竹勉、硬件抽象層(Hardware Abstraction layer)以及安卓運(yùn)行時(Android Runtime)在刺。
應(yīng)用(Applications)Applications應(yīng)用層包含了所有為安卓用戶提供服務(wù)的系統(tǒng)應(yīng)用或第三方應(yīng)用贷岸,比如電話跃闹,短信嵌削,通訊錄,相機(jī)望艺,鬧鐘苛秕,日歷,瀏覽器找默,微信想帅,QQ等APP。
應(yīng)用框架(Application Framework)應(yīng)用框架(Application Framework)是面向安卓應(yīng)用開發(fā)者的啡莉,為開發(fā)者提供各種API港准,以便開發(fā)者能構(gòu)建自己的APP。比如提供了Android的四大組件咧欣,Activity浅缸,Broadcast Receiver,Content Provider魄咕,Service衩椒,以及Activity Manager,Window Manager,Package Manager毛萌,View System等苟弛。
類庫(Libraries)這一層是一個C/C++的so庫,為Android提供一些特性支持阁将,比如SQLite提供數(shù)據(jù)庫支持膏秫,Webkit提供瀏覽內(nèi)核支持,此外還有Surface Manager做盅,Audio Manager缤削,Media Framework,OpenGL/ES 等吹榴。
硬件抽象層(Hardware Abstraction layer)這是Android在內(nèi)核外部增加的硬件抽象層(HAL, Hardware Abstraction Layer)亭敢,把一部分驅(qū)動功能放到HAL層中是為了保護(hù)源代碼。Linux內(nèi)核采用了GPL協(xié)議图筹,所以硬件生產(chǎn)商想要支持Linux系統(tǒng)帅刀,必須遵照GPL協(xié)議公開硬件驅(qū)動的源代碼。但這些源代碼中包含有許多硬件的設(shè)計信息远剩,牽涉到硬件生產(chǎn)商的核心利益劝篷。而增加了HAL層之后,硬件廠商就不需要開放所有的驅(qū)動代碼了民宿。
安卓運(yùn)行時(Android Runtime)這一層為Android的Dalvik虛擬機(jī)娇妓。安卓的應(yīng)用是用Java編寫的,而包括HAL在內(nèi)的Linux的庫都是用C/C++編寫的活鹰,這個落差由Dalvik虛擬機(jī)銜接的哈恰。當(dāng)一個應(yīng)用運(yùn)行時,進(jìn)程空間內(nèi)將包含一個Dalvik虛擬機(jī)志群。Java程序編譯為字節(jié)碼文件着绷,運(yùn)行在Dalvik虛擬機(jī)中。根據(jù)Java代碼中的要求锌云,Dalvik通過JNI(Java Native Interface)調(diào)用底層的C/C++編寫的功能荠医。JNI是從Java中調(diào)用C/C++模塊的接口。由于上層接口的標(biāo)準(zhǔn)化桑涎,字節(jié)碼可以暢通無阻的跨平臺運(yùn)行彬向。
Dalvik虛擬機(jī)內(nèi)部是一個“虛擬”進(jìn)程空間,有自己的棧和堆攻冷,管理代碼的運(yùn)行流程娃胆。如果這以“虛擬”進(jìn)程空間不足,Dalvik內(nèi)建的垃圾回收(garbage collection)機(jī)制會自動清空堆上不再使用的對象等曼。自動的垃圾回收簡化了程序員的工作里烦,但速度較慢凿蒜。手動內(nèi)存管理效率高,但需要更多的編程胁黑,且容易犯錯废封。
Linux 內(nèi)核(Linux kernel)這一層為Android設(shè)備各種硬件提供了底層驅(qū)動,如顯示驅(qū)動丧蘸、音頻驅(qū)動漂洋、照相機(jī)驅(qū)動、藍(lán)牙驅(qū)動触趴、Wi-Fi驅(qū)動氮发、電源管理等渴肉。