當前位置:才華齋>職業>系統架構師>

Android系統架構簡介

系統架構師 閱讀(2.35W)

目前Android的Linux kernel控制包括安全、儲存器管理、程序管理、網路堆疊、驅動程式模型等。下載Android原始碼之前,先要安裝其構建工具Repo來初始化原始碼。Repo是Android用來輔助Git工作的一個工具。

Android系統架構簡介

  應用程式

Android系統是基於Linux核心開發,使用Java作程式語言,使介面到功能,都有層出不窮的變化,其中Activity等同於J2ME的MIDlet,一個Activity類別負責建立視窗,一個活動中的Activity就是在foreground(前景)模式,背景執行的程式叫做Service。兩者之間透過由ServiceConnection和AIDL連結,達到複數程式同時執行的效果。如果執行中的Activity全部畫面被其他Activity取代時,該Activity便被停止,甚至被系統清除。

View等同於J2ME的Displayable,程式人員可以透過View類別與“XML layout”檔將UI放置在視窗上,並可以利用View打造出所謂的Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout。至於ViewGroup是各種layout的基礎抽象類別,ViewGroup之內還可以有ViewGroup。View的建構函式不需要在Activity中呼叫,但是Displayable的是必須的,在Activity中,要通過findViewById()來從XML中獲取View,Android的View類的顯示很大程度上是從XML中讀取的。View與事件息息相關,兩者之間透過Listener結合在一起,每一個View都可以註冊event listener,例如:當View要處理使用者觸碰的事件時,就要向Android框架註冊ickListener。另外還有Image等同於J2ME的BitMap。

  中介軟體

作業系統與應用程式的溝通橋樑,並用分為兩層:函式層和虛擬機器器。 Bionic是Android改良libc的版本。Android包含了Chrome瀏覽器引擎。Surface flinger是就2D或3D的內容顯示到螢幕上。Android使用工具鏈為Google自制的ic Libc。

Android採用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。

Android使用Skia為核心圖形引擎,搭配OpenGL/ES。Skia與Linux Cairo功能相當,但相較於Linux Cairo,Skia功能還只是陽春型的。2005年Skia公司被Google收購,2007年初,Skia GL原始碼被公開,目前Skia也是Google Chrome的圖形引擎。

Android的多媒體資料庫採用SQLite資料庫系統。資料庫又分為共用資料庫及私用資料庫。使用者可透過ContentProvider類別獲取共用資料庫。

Android的中間層多以Java實現,4.4版之前使用特殊的Dalvik虛擬機器器。Dalvik虛擬機器器是一種“暫存器型態”的Java虛擬機器器,變數皆存放於暫存器中,虛擬機器器的指令相對減少。5.0版起改用Android Runtime(ART)。

Dalvik虛擬機器器可以有多個例項,每個Android應用程式都用一個自屬的Dalvik虛擬機器器來執行,讓系統在執行程式時可達到最優化。Dalvik虛擬機器器並非執行Java位元組碼,而是執行一種稱為格式的檔案。

  硬體抽像層(HAL)

Android的硬體抽像層是能以封閉原始碼形式提供硬體驅動模組。HAL的目的是為了把Android framework與Linux kernel隔開,讓Android不至過度依賴Linux kernel,以達成“核心獨立”(kernel independent)的概念,也讓Android framework的開發能在不考量驅動程式實現的前提下進行發展,以達到壟斷GPU市場的目的。

HAL stub是一種代理人的概念,stub是以*檔的形式存在。Stub向HAL“提供”操作函式,並由Android runtime向HAL獲取stub的操作,再回調這些操作函式。HAL裡包含了許多的stub(代理人)。Runtime只要說明“型別”,即module ID,就可以獲取操作函式。

  程式語言

Android是執行於Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux裡支援的功能,Android大都沒有支援,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android為了達到商業應用,必須移除被GNU GPL授權證所約束的部分,Android並沒有使用者層驅動(user space driver)這種東西。所有的驅動還是在核心空間中,並以HAL隔開版權問題。bionic/libc/kernel/ 並非標準的核心標頭檔案(kernel header files)。Android的核心標頭檔案是利用工具由Linux核心的標頭檔案所產生的,這樣做是為了保留常數、資料結構與巨集。

Android的核心基於Linux,除了核心之外,則是中介層、資料庫元和用C/C++編寫的API以及應用程式框架。Android的應用程式通常以Java資料庫元為基礎編寫,執行程式時,應用程式的程式碼會被即時轉變為Dalvik dex-code(Dalvik Executable),然後Android作業系統通過使用即時編譯的Dalvik虛擬機器來將其執行。