Android系統架構簡介

來源:文萃谷 2.27W

目前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虛擬機來將其運行。

熱門標籤