天天看點

《深入了解Android 5 源代碼》——第1章,第1.2節剖析Android系統架構

本節書摘來自異步社群《深入了解android 5 源代碼》一書中的第1章,第1.2節剖析android系統架構,作者 李駿,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

1.2 剖析android系統架構

android系統是一個移動裝置的開發平台,其軟體層次結構包括作業系統(os)、中間件(middleware)和應用程式(application)。根據android的軟體框圖,其軟體層次結構自下而上分為以下4層。

(1)作業系統層(os)。

(2)各種庫(libraries)和android運作環境(runtime)。

(3)應用程式架構(application framework)。

(4)應用程式(application)。

上述各個層的具體結構如圖1-1所示。

在本節的内容中,将詳細介紹android作業系統的元件結構方面的知識。

《深入了解Android 5 源代碼》——第1章,第1.2節剖析Android系統架構

1.2.1 底層作業系統層(os)

因為android源于linux,使用了linux核心,是以,android使用linux 2.6作為作業系統的基礎。android對作業系統的使用包括核心和驅動程式兩部分,android核心對應于linux核心,android更多的是需要一些與移動裝置相關的驅動程式。主要的驅動如下所示。

顯示驅動(display driver):是常用的基于linux的幀緩沖(frame buffer)驅動。

flash記憶體驅動(flash memory driver):是基于mtd的flash驅動程式。

照相機驅動(camera driver):常用基于linux的v(video for linux)驅動。

音頻驅動(audio driver):常用基于alsa(advanced linux sound architecture,進階linux聲音體系)驅動。

wifi驅動(camera driver):基于ieee 802.11标準的驅動程式。

鍵盤驅動(keyboard driver):作為輸入裝置的鍵盤驅動。

藍牙驅動(bluetooth driver):基于ieee 802.15.1标準的無線傳輸技術。

binder ipc驅動:andoid一個特殊的驅動程式,具有單獨的裝置節點,提供程序間通信的功能。

power management(能源管理):用于管理電池電量等資訊。

1.2.2 各種庫(libraries)和android運作環境(runtime)

本層次對應一般嵌入式系統,相當于中間件層次。android的本層次分成兩個部分,一個是各種庫,另一個是android運作環境。本層的内容大多是使用c實作的,其中包含了如下所示的各種庫。

c庫:c語言的标準庫,也是系統中一個最為底層的庫,c庫是通過linux的系統調用來實作。

多媒體架構(mediaframeword):這部分内容是android多媒體的核心部分,基于packetvideo(即pv)的opencore,從功能上看本庫一共分為兩大部分,一部分是音頻、視訊的回放(playback),另一部分是音、視訊的記錄(recorder)。

sgl:2d圖像引擎。

ssl:即secure socket layer,位于tcp/ip協定與各種應用層協定之間,為資料通信提供安全支援。

opengl es:提供了對3d的支援。

界面管理工具(surface management):提供了管理顯示子系統等功能。

sqlite:一個通用的嵌入式資料庫。

webkit:網絡浏覽器的核心。

freetype:位圖和矢量字型的功能。

在一般情況下,android的各種庫是以系統中間件的形式提供的,它們的顯著特點是與移動裝置平台的應用密切相關。另外,android的運作環境主要是指dalvik(虛拟機)技術。dalvik和一般的java虛拟機(java vm)是有差別的。

java虛拟機:執行的是java标準的位元組碼(bytecode)。

art+dalvik:執行的是dalvik可執行格式(.dex)中的執行檔案。在執行的過程中,每一個應用程式即一個程序(linux的一個process)。二者最大的差別在于java vm是以基于棧的虛拟機(stack-based),而dalvik是基于寄存器的虛拟機(register-based)。顯然,後者最大的好處在于可以根據硬體實作更大的優化,這更适合移動裝置的特點。從android 5.0版本開始,android的預設運作環境為art。art的機制與dalvik不同。在dalvik下,應用每次運作的時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的運作效率,而在art環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(aot,ahead-of-time)。這樣改進後,應用的啟動(首次)和執行都會變得更加快速。

1.2.3 pplication framework(應用程式架構)

在整個android系統中,和應用開發最相關的是application framework,在這一層,android為應用程式層的開發者提供了各種功能強大的apis,這實際上是一個應用程式的架構。由于上層的應用程式是以java建構的。在本層提供了程式中所需要的各種控件,例如,視圖元件(views)、清單(list)、栅格(grid)、文本框(text box)、按鈕(button),甚至還有一個嵌入式的web浏覽器。

一個基本的andoid應用程式可以利用應用程式架構中的以下5個部分。

activity:活動。

broadcast intent receiver:廣播意圖接收者。

service:服務。

content provider:内容提供者。

intent and intent filter:意圖和意圖過濾器。

1.2.4 頂層應用程式(application)

android的應用程式主要是使用者界面(user interface)方面的,本層通常使用java語言編寫,其中還包含各種被放置在“res”目錄中的資源檔案構成。java程式和相關資源在經過編譯後,會生成一個apk包。android本身提供了主螢幕(home)、聯系人(contact)、電話(phone)、浏覽器(browers)等衆多的核心應用。同時應用程式的開發者還可以使用應用程式架構層的api實作自己的程式。這也是android開源的巨大潛力的展現。