Android系統架構簡介
目前Android的Linux kernel控制包括安全、存儲器管理、進程管理、網絡堆疊、驅動程序模型等。下載Android源碼之前,先要安裝其構建工具Repo來初始化源碼。Repo是Android用來輔助Git工作的一個工具。
應用程序
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虛擬機來將其運行。
-
系統架構設計師考試報考條件
下面是YJBYS小編為大家搜索整理的關於系統架構設計師考試的基本資料,歡迎參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生培訓網!一、簡介系統架構設計師考試屬於全國計算機技術與軟件專業技術資格考試(簡稱計算機軟件資格考試)中的一...
-
關於分佈式系統架構
對於軟件架構,更多的是一種思想,即內功修為。在道與術層面,則更偏重道的修煉,道的深度決定架構的境界。相對而言,術是手段,隨不同的環境應運而生,就像太極劍法和獨孤九劍,能做到隨境而變。架構是一種權衡沒有一種架構可以應用到所有環境,也沒有一個技術或框架可以解決所...
-
IoT項目如何選擇正確的軟件架構
你想要創建一個合適的項目,看是要更進一步探索這個想法還是將其產品化。但是,應該從哪種軟件架構入手呢?究竟該採用初始成本較低的開源架構,還是選擇需要支付前期費用的商業解決方案,來加速你的設計過程呢?一起來看看!什麼是軟件架構?在本文件中,將“軟件構架”解釋...
-
光伏儲能電站系統拓撲架構研究
大型離網光伏儲能電站在我國西部無電區及海島上有極大的應用前景。並在拓展應用方面,具有較高的推廣價值。當與風電等其他形式能源結合就構成了微電網系統;當改變電站的運行方式,就變成了光伏併網儲能系統。1儲能逆變器運行方式儲能逆變器具有三種運行模式:(1)V/F...