天天看點

《Android Studio應用開發實戰詳解》——第1章,第1.3節Android系統架構

本節書摘來自異步社群《android studio應用開發實戰詳解》一書中的第1章,第1.3節android系統架構,作者 王翠萍,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

1.3 android系統架構

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

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

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

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

(4)應用程式(application)。

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

《Android Studio應用開發實戰詳解》——第1章,第1.3節Android系統架構

圖1-2 android作業系統的元件結構圖

在本節的内容中,将詳細講解android系統各個層次的基本知識。

1.3.1 最底層的作業系統層(os)——c/c++實作

android系統的底層核心基于linux作業系統,目前最新版本的android的核心為标準linux 3.10核心。android底層的作業系統層(os)使用c和c++語言編寫實作,其實android系統就是linux系統,隻是android系統充分利用了已有的機制,盡量使用标準化的内容,如驅動程式,并且做出必要的擴充。android靈活充分使用了核心到使用者空間的接口,這主要表現在字元裝置節點、sys檔案系統、proc檔案系統和不增加系統調用。

在android系統中,包含的核心元件如下所示:

binder驅動程式(使用者ipc機制);

logger驅動程式(使用者系統日志);

timed_output驅動架構;

timed_gpio驅動程式;

lowmemorykill元件;

ram_console元件;

ashmem驅動程式;

alarm驅動程式;

pmem驅動程式;

adb garget驅動程式;

android paranoid網絡。

1.3.2 android的硬體抽象層——c/c++實作

其實android生态系統的架構十厘清晰,自下而上經典的模型分别為:linux驅動、android硬體抽象層、android本地架構、android的java架構、android的java應用程式。因為android系統需要運作于在不同的硬體平台上,是以需要具有很好的可移植性。其中android系統的硬體抽象層負責建立android系統和硬體裝置之間的聯系。

對于标準化比較高的子系統來說,android系統使用完全标準的linux驅動,例如輸入裝置(input-event)、電池資訊(power supply)、無線區域網路(wifi協定和驅動)和藍牙(bluetooth協定和驅動)。

對于android系統的硬體抽象層來說,主要實作了與移動裝置相關的驅動程式,主要包含了如下所示的驅動系統。

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

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

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

音頻驅動(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.3.3 各種庫(libraries)和android運作環境(runtime)——中間層

可以将android系統的中間層次分為兩個部分,一個是各種庫,另一個是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運作環境主要是指android虛拟機技術:dalvik。dalvik虛拟機與java虛拟機(java vm)不同,它執行的不是java标準的位元組碼(bytecode),而是dalvik可執行格式(.dex)中的執行檔案。在執行的過程中,每一個應用程式即一個程序(linux的一個process)。二者最大的差別在于java vm是基于棧的虛拟機(stack-based),而dalvik是基于寄存器的虛拟機(register-based)。顯然,後者最大的好處在于可以根據硬體實作更大的優化,這更适合移動裝置的特點。

從android 4.4開始,預設的運作環境是art。art的機制與dalvik不同。在dalvik機制下,應用每次運作的時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的運作效率。而在art環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫作預編譯(ahead-of-time,aot)。這樣,應用的啟動(首次)和執行都會變得更加 快速。

1.3.4 應用程式架構(application framework)

android的應用程式架構為應用程式層的開發者提供apis,它實際上是一個應用程式的架構。由于上層的應用程式是以java建構的,是以本層次提供的首先包含了ui程式中所需要的各種控件,例如:views(視圖元件),其中又包括了list(清單)、grid(栅格)、text box(文本框)和button(按鈕)等,甚至一個嵌入式的web浏覽器。

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

activity(活動)。

broadcast intent receiver(廣播意圖接收者)。

service(服務)。

content provider(内容提供者)。

intent and intent filter(意圖和意圖過濾器)。

1.3.5 應用程式(application)——java實作

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