2008年9月10日 星期三

Android Architecture 2

一‧Android的來源:
Google 併購 Android 公司後所推出的手機平台,採用 Linux 為作業系統。所以系統程式包含了 C 語言的標準函式庫,但應用程式主要以Java語言在Dalvik VM虛擬機器執行,應用程式開發環境以Eclipse為主,加上 Android Development Tools (ADT) Plugin。

二‧Android的目的:
Android平台的主旨是提供一個應用程式架構(application framework),好讓各家OEM業者可不須從頭進行軟體開發,就能推出一系列的Android平台手機。

三‧Android的特色:
Application framework:提供可重覆使用及改寫的元件。
Dalvik virtual machine:提供給行動裝置一個最佳化過的Java虛擬機器。
Integrated browser:基於一個WebKit引擎開放源碼的瀏灠器 ,像Mac上的Safari也是從WebKit衍生出來的。
Optimized graphics:最佳化過的繪圖函式庫,包含了SGL的2D繪圖函式庫及基於OpenGL ES 1.0規範的3D繪圖函式庫。
SQLite:一個結構化的資料庫系統 。
Media support:多媒體影音格式支援包含了MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF 。
GSM:GSM手機的通話能力其實必須在硬體電路層次實現,軟體層次無法實現,只是Android平台要求必須要有GSM通話能力,此項功效特點與其說是特點,不如說是訂立出最低的硬體要求規範。
Bluetooth,EDGE,3G,and WiFi,Camera,GPS,compass,and accelerometer:同GSM它必需由實際硬體決定是否支援 。
Rich development environment:包含了裝置模擬器,除錯工具,記憶體及效能評估分析工具及讓Eclipse IDE支援Android專案的外掛程式。

四‧Android的系統架構圖如下:

上圖呈現出整個系統架構分成(1)Applications,(2)Application Framework,(3)Libraries,(4)Android Runtime,(5)Linux Kernel五大架構
Android本身是一套軟體堆疊(Software Stack),或稱為「軟體疊層架構」,疊層主要分成三層:作業系統、中介軟體(Middleware,大陸方面稱為:中間件)、應用程式。想開發可在Android平台執行的應用程式,必須用Java程式語言撰寫才行。
中介軟體,凡是介於作業系統與應用程式間的,多概稱為中介軟體,Android的中介軟體可再細分出兩層,底層為函式庫(Library)及虛擬機器(Virtual Machine;VM),上層為應用程式框架(Application Framework)。 上面的架構圖裏全部的藍色框框全部都是用Java語言撰寫的綠色框框由C/C++組成紅色的Kernel層當然就是C囉

底下分別簡介一下各層的功用

應用程式層(Applications)
Android出貨時整套的應用程式將會包含了有電子郵件程式,短訊程式,日曆,地圖,瀏覽器,通訊程式...等等。所有的應用程式皆必需以Java的程式語言撰寫。

應用程式框架層(Application Framework)
程式設計師在寫應用程式時可以完整的存取使用統一的應用程式標準介面,這個應用程式框架的架構是可以很容易的去重覆使用各個原件, 所有的應用程式都可以提供出它自己本身的特殊功能,所有的應用程式也可以較容易的去使用其它程式的特殊功能。這樣子的統一機制,有助於開發者去改寫自己新的軟體原件。

基本上所有的應用程式是由services及systems所組成,包含有:
(1)Views System:用來建構一個應用程式的基本原件,包含了有lists,grids,text boxes,buttons,甚至是一個嵌入式的瀏覽器。這裏有Android整理好的view外觀圖
(2)Content Providers(內容提供者):它可以用來讓程式跟程式之間互相存取/分享資料。例如某一個應用程式可以去存取通訊錄應用程式內的聯絡人資料。或者呼用Resource Manager可存取的非程式碼資源,例如:當地性設定(該地貨幣、語言、時間格式)、圖像...等。
(3)Resource Manager(資源管理員):提供各種資源讓程式去使用,比如:區域性的字串,圖片,排版檔(layout files)。
(4)Notification Manager(訊息管理員):提供程式在狀態列(status bar)的地方顯示應用程式自有的警示(alert)訊息。 狀態列Android設定在手機的頂部,像短訊(short message),voice mail皆會出現在此。
(5)Activity Manager(活動管理員):管理所有的應用程式生命週期及一般性的回溯導航(navigation backstack )。
(6)Window Manager(視窗管理員):管理所有的視窗程式
(7)Location Manager:應該是用來做地圖服務的功能。
(8)Telephony Manager:用來管理所有的移動設備(電話)的功能,就是提供使用者撥打與接收電話的功能啦。
(9)Package Manager:Android系統內所有安裝的程式管理。
(10)XMMP Service
ineXtensible Messaging and Presence Protocol透過此服務得知手機的位置,在0.9 SDK已暫時移除此功能的樣子。

函式庫層(Libraries)
Android所有豐富多樣的元件皆是由C/C++函式庫所組成,但Android所有的應用程式皆必需經由API來使用這些功能。
主要的核心函式庫列表如下:

(1)System C library - 一個由BSD衍生出來的標準C系統函式庫(libc),目前這個已針對Linux嵌入式裝置進行過最佳化。
(2)Media Libraries - 基於PacketVideo's OpenCORE的多媒體函式庫;這個多媒體函式庫支援播放/錄製許多現在很流行的聲音及影像格式。比如:MPEG4,H.264,MP3,AAC,AMR,JPG,及PNG。
(3)Surface Manager - 這個部份讓開發者可以去存取顯示系統,以及實現無接縫的2D/3D多應用程式之間的整合。
(4)LibWebCore - 一個先進的網頁瀏覽器引擎。
(5)SGL - 2D繪圖引擎。
(6)3D Libraries - 一個基於OpenGL ES 1.0規範的3D繪圖引擎。它可以選擇要硬體的3D加速或高度最佳化的3D軟體程式去呈現結果。
(7)Free Type - 點陣圖及向量字形。
(8)SQLite - SQLite是一套開放原碼的關連式資料庫,提供給android上所有的應用程式使用。其特點在於輕量性(僅500KB左右的容量),適合手持式裝置運用,此外桌上型運算的應用程式也有使用,如OpenOffice.org 2.0版之後就有內建SQLite。
(9)SSL - Secure Socket Layer專門用於保護網頁通訊的協定。


執行層(Android Runtime)
Android 雖然用Java程式語言來開發、撰寫應用程式,但卻不使用一般大家目前在用的Java Runtime(J2ME)版本來執行Java程式,而是用Android自有的Android Runtime來執行。

Android Runtime包含下面兩個核心
(1)Core Libraries
核心函式庫裡頭已經包含了絕大多數Java程式語言所需要呼用的功效函式,接著每一個Android應用程式都會以自屬的process而且Android不是用一個Dalvik虛擬機器來同時執行多個Android應用程式,而是每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行。
(2)Dalvik Virtual Machine
Dalvik虛擬機器是一種暫存器型態的虛擬機器。在撰寫開發時就已經設想用最少的記憶體資源來執行,以及前述的「同時可執行多個VM個體」。
Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是依靠轉換工具將Java bytecode轉為Dalvik VM執行時特有的dex(Dalvik EXcutable)格式,稱為.dex。Dalvik VM相較於Java VM最大的不同在於Java VM為Stack-based,而Dalvik是register-based。 以技術層面考量Register-based VM的特性有個很大的好處,那就是對於現有主流的硬體架構,如此很容易與現有系統整合且最好化,而所需要的資源也相對較少。 甚至在硬體實作VM上會比較容易實現。 最重要的是Dalvik 並非是Java ME的實作,因此沒有Java ME授權相關的議題。
正常的Java比較慢不單單只是因為Virtual Machine的關係,Java的程式編釋成bytecode的也是關鍵因素之一,因Java VM採用了Stack Based的方式產生指令,所以所有的變數皆需push,pop到stack裏去,所以就會多出不少指令,而Delvik VM則改用register based的方式,變數皆存放於暫存器中,相較之下Delvik VM的指令就會少一點,速度也就會再加快一點。

作業系統層(Linux Kernel)
Android平台的作業系統用的是Linux,其核心版本為2.6版,Android所用的Linux核心,其包含的功效包括:安全(Security)、記憶體管理(Memory Management)、行程管理(Process Management)、網路堆疊(Network Stack,大陸方面稱為:網絡堆棧)、驅動程式模型(Driver Model)等,另外也在前述的軟體堆疊與硬體間建立起一個抽象層(Abstraction Layer)。

資料來源:
Google Android裡頭有什麼?
http://tech.digitimes.com.tw/ShowNews.aspx?zCatId=416&zNotesDocId=0000075729_A6M61Q6E423GAM68B95IS
What is Android?
http://code.google.com/android/what-is-android.html
Dalvik VM Internals
Android's Developers Blog

10 則留言:

Cheney 提到...

In your article, LibWebCore is mentioned in android library section.

my question is that does libwebcore equal to webkit which is baesd-on safari? I found no answer from the google.

史丹利 提到...

As far as I know, the Android's browser is based on Webkit to develop, the safari is the same.

Unknown 提到...

你好,我們的專題製作,有用到您的內容
我們也有註明出處。
謝謝您的分享

Unknown 提到...

你好,我們的專題部分內容有用到此篇文章,
我們也有註明出處。
謝謝您的分享~~~

Unknown 提到...

您好,我們專題製作有用到您的內容,我們也有註明出處,謝謝您的分享。

Unknown 提到...

您好,我們的專題有部分內容使用到這篇文章,
我們有註明出處。
十分感謝您的分享。

Unknown 提到...

您好,我們的專題有部分內容使用到這篇文章,我們有註明出處。
非常感謝您的分享。

Unknown 提到...

你好~我們的專題部分內容有借用到這篇文章
我們也有註明出處
感謝您的分享~

Unknown 提到...

你好~我們的專題部分內容有借用到這篇文章
我們也有註明出處
謝謝分享

Unknown 提到...

你好~我們的專題部分內容有借用到這篇文章
我們也有註明出處
謝謝分享

一個小故事讓我們明白資金流通的意義

“又是炎熱小鎮慵懶的一天。太陽高掛,街道無人,每個人都債台高築,靠信用度日。這時,從外地來了一位有錢的旅客,他進了一家旅館,拿出一張1000 元鈔票放在櫃檯,說想先看看房間,挑一間合適的過夜,就在此人上樓的時候---- 店主抓了這張1000 元鈔,跑到隔壁屠戶那裡支付了他欠的肉錢...