2008年10月23日 星期四

轉貼: Google Android裡頭有什麼?

轉貼 DigiTimes:http://tech.digitimes.com.tw/print.aspx?zNotesDocId=0000075729_A6M61Q6E423GAM68B95IS

前言:Google提出Android手機軟體平台後,使手機軟體的標準化、低價化等議題受到比過往更高的關注,到底Android是否有能力打破多年以來的手機軟體門戶之見?此不僅要審視其策略,其軟體平台技術表現更不能忽視……

##ReadMore##

Google發表名為Android的軟體平台,破除發表前的臆測,認為Google會以gPhone之名發表自有手機,同時所有資訊、網路產業者都高度關注,Android發表後將會對手機市場興起新的波瀾。

有關Android的用意及策略已有太多人觀察與分析,Android期望手機軟體架構能標準化、低價化,如此有助於推行Google的軟體及網路服務。所以,本文就不再對策略及影響等做討論,完全就技術本質的角度來瞭解Android。

嚴格來說,Android屬於資訊技術(Information Technology;IT)領域,而且是IT領域中的軟體技術、軟體工程,與電子工程(EE)有段距離,不過手機在硬體設計之外也無法迴避軟體方面的設計,因此仍有必要對其進行研究、探析。

架構

Android本身是一套軟體堆疊(Software Stack),或稱為「軟體疊層架構」,疊層主要分成三層:作業系統、中介軟體(Middleware,大陸方面稱為:中間件)、應用程式。

若更進一步瞭解,作業系統用的是嵌入式Linux,應用程式方面則只提供主要常用的幾種應用程式,不可能各形各色的應用程式都以Android之名進行開發,否則就失去「以開放性的軟體平台吸引廣大軟體業者、程式設計師開發出支援Android平台的應用程式」的用意。而想開發可在Android平台執行的應用程式,也必須用Java程式語言撰寫才行。

接著是中介軟體,凡是介於作業系統與應用程式間的,多概稱為中介軟體,Android的中介軟體可再細分出兩層,底層為函式庫(Library)及虛擬機器(Virtual Machine;VM),上層為應用程式框架(Application Framework)。

特點

架構是骨,而展現出來的功效特點則為血肉,Android雖然才剛起步,但已經具有如下的功效特點,未來隨著發展則會增入更多的特點:

◆應用程式框架-框架內已經具備多種基礎軟體元件,應用程式可直接呼用這些元件的功效服務,節省應用程式的開發心力及時間,同時程式的再用性、移植性也較高。

◆Dalvik虛擬機器-Android內不是使用標準的Java虛擬機器(Java Virtual Machine;JVM),而是使用獨特的Dalvik虛擬機器,關於此以下將再進行深入的說明。

◆ 整合(網頁)瀏覽器-網頁瀏覽器就是所謂的「主要、常用的應用程式」,Android內建的瀏覽器是用WebKit的瀏覽引擎為基礎所開發成的,WebKit是一個開放原碼專案,許多瀏覽器也都是用WebKit引擎所開發成,如Apple的Safari、Nokia S60手機內的瀏覽器(Web Browser for S60)等。

◆最佳化的繪圖能力-繪圖分為2D與3D,2D方面Android是用一套特有的函式庫,而3D則是使用OpenGL ES 1.0(OpenGL for Embedded Systems)規範的函式庫。

◆SQLite資料庫-SQLite是一套開放原碼的關連式資料庫,其特點在於輕量性(僅500KB左右的容量),適合手持式裝置運用,此外桌上型運算的應用程式也有使用,如OpenOffice.org 2.0版之後就有內建SQLite。

◆媒體支援能力-Android支援多種音訊、靜態視訊、動態視訊格式,如MPEG-4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。

◆GSM通話能力-GSM手機的通話能力其實必須在硬體電路層次實現,軟體層次無法實現,只是Android平台要求必須要有GSM通話能力,此項功效特點與其說是特點,不如說是訂立出最低的硬體要求規範。

◆藍牙(Bluetooth)、EDGE、3G、以及Wi-Fi-這些通訊能力一樣屬於硬體層次的功效要求。

◆攝影機(Camera)、GPS定位、羅盤、加速度感測器-這些同樣屬於硬體層次的功效,Android主要是在軟體層面提供支援,如硬體抽象層、應用程式介面等。

◆豐富的開發環境-Android平台強調已備有完善的程式開發環境,其開發環境包括裝置模擬器(Emulator)、除錯工具、程式執行所耗用記憶體、效能等評估功能,另還有一個可用於Eclipse IDE的外掛程式(Plug-in)。

應用程式、應用程式框架

如前所述,Android會內建一些常用的應用程式,且前面已提到一個:網頁瀏覽器,但除了網頁瀏覽器外還有:電子信件收發的用戶端程式、簡訊收發程式、日曆/行事曆、地圖、聯絡簿/通訊錄等。

不過,應用程式不是Android的重點,即便有應用程式也以基礎性、示範性用意為多,另外作業系統也不是重點,重點集中在中介軟體層方面,即是應用程式框架、函式庫、應用程式執行環境等。

先說明應用程式框架,Android本身已在框架中提供許多軟體元件,不過這並不表示所有的應用程式一定要呼用(Call,呼叫、呼用,大陸方面稱為:調用)Android所提供的元件,程式設計師在開發Android平台所用的應用程式時,也可以順帶開發新的軟體元件,並將該軟體元件放入Android 的應用程式框架中。

如此,除了原撰寫的應用程式可以呼用該軟體元件(或稱:應用程式介面,API)外,也可以讓其他的應用程式來呼用該元件。另外,新增、新撰寫的軟體元件並不一定要是新的功效,也可以用來取代或暫代Android原有就具備的軟體元件。

雖然新元件可以取代或暫代舊元件,但不是所有的元件都可以取代,例如安全(Security)方面的功能,就強迫只能用Android平台現有元件,不能被替換成軟體公司、程式設計師自己開發的。此外,軟體元件替換,不僅可由應用程式來決定,也允許使用者自行決定。

框架內的軟體功效元件

若更進一步瞭解,Android在應用程式框架中的軟體元件主要有10個,如Activity Manager(活動管理員)、Window Manager(視窗管理員)、Resource Manager(資源管理員)等,在此無法詳述每個元件的功效,因此以下挑數個重點元件來說明。

舉例來說,Content Providers(內容管理員)負責應用程式與應用程式間的資料存取傳遞,例如某一個應用程式可以去存取通訊錄應用程式內的聯絡人資料。或者呼用 Resource Manager可存取的非程式碼資源,例如:當地性設定(該地貨幣、語言、時間格式)、圖像...等。

再者,應用程式若呼用Notification Manager(通知管理員),則可以在狀態列(Status Bar)的地方設計出應用程式自有的警示(Alert)訊息。至於Activity Manager則提供應用程式的生命週期管理。

函式庫

應用程式框架是貼近於應用程式的軟體元件服務,而更底層則是Android的函式庫,以下列出並說明主要的核心函式庫:

◆System C函式庫(System C Library)-Android具有一套以BSD衍生方式所打造成的「標準C語言系統函式庫,libc」,然後再針對嵌入式Linux裝置的需求進行若干調校。

◆媒體函式庫(Media Libraries)-Android的媒體函式庫是以PacketVideo公司的OpenCORE為基礎所發展成,該函式庫可以播放、錄製多種普遍常見的影音格式。

◆外觀管理員(Surface Manager)-在同時執行多個應用程式時,外觀管理員會負責管理「顯示」與「存取操作」間的對應、互動,另外也負責將「2D繪圖」與「3D繪圖」進行顯示上的合成、疊合動作。

◆LibWebCore-一套網頁瀏覽器的軟體引擎,即是前述WebKit的一部份,該引擎的功效不僅可供Android內建的網頁瀏覽器所呼用,也可以提供具內嵌性網頁呈現效果。

◆SGL-Android在2D繪圖方面的繪圖引擎。

◆3D函式庫(3D libraries)-Android是依據OpenGL ES 1.0 API標準來實做其3D繪圖函式庫,該函式庫可以用軟體方式執行也可以用硬體加速方式執行,其中「3D軟體光柵處理」方面已進行高度最佳化(大陸方面稱為:優化)。

◆FreeType-提供點陣字、向量字的描繪顯示。

◆SQLite-如前所述,SQLite是一套輕量性的資料庫引擎,可供其他應用程式呼用。

Android的執行環境

老實說,Android雖然用Java程式語言來開發、撰寫應用程式,但卻不使用Java Runtime來執行Java程式,而是用Android自有的Android Runtime來執行。而Android Runtime內有兩個重要元件,一是Core Libraries(核心函式庫),另一則是Dalvik Virtual Machine(Dalvik虛擬機器)。

首先是核心函式庫,核心函式庫裡頭已經包含了絕大多數Java程式語言所需要呼用的功效函式,接著每一個Android應用程式都會以自屬的行程(Process,大陸方面稱為:進程)來執行,而且Android不是用一個Dalvik虛擬機器來同時執行多個Android應用程式,而是每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行。

更簡單說,專屬於每一個 Android應用程式的Dalvik虛擬機器等於是一個執行個體(Instance)。事實上Dalvik虛擬機器本身在開發時,就已經是以「能夠同時執行多個虛擬機器」的設想來撰寫。因此:即便同時開設與執行多組VM個體,在硬體資源的運用上與執行流暢性上也都能維持一定的水準表現。

進一步探析Dalvik虛擬機器

接下來我們要更仔細討論Dalvik虛擬機器,甚至從最起頭開始談。

Dalvik虛擬機器是一種暫存器型態的虛擬機器,最初是由Dan Bornstein所發創,另外也有一些Google的工程師參與撰寫。Dalvik在撰寫開發時就已經設想用最少的記憶體資源來執行,以及前述的「同時可執行多個VM個體」。

不過,上述的特性需要Linux作業系統的協助才能實現,例如行程間的隔離、執行緒(大陸方面稱為:線緒)的支援、低階記憶體(大陸方面稱為:內存)管理等。事實上不僅Dalvik虛擬機器如此,Java虛擬機器也一樣有作業系統相依性,不同的作業系統需要不同的Java虛擬機器,各虛擬機器會針對其支援的作業系統再進行各項調整,以便能最佳化執行。

Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是執行一種特有的檔案格式,稱為.dex,Java的類別檔要先透過一套叫dx的編譯工具(功效上等同於Java編譯器)轉換成.dex檔後,才能讓Dalvik虛擬機器執行。

值得一提的是:Dan Bornstein為何將這套虛擬機器軟體取名為Dalvik?Dalvik其實是指冰島北方Eyjafjörður峽灣中的一個釣魚村落,Dan Bornstein的祖先曾在該村落生活過。

作業系統

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

建構高度開放、高效能運行平台

最後,筆者整個檢視了Android平台,此平台的設計很合乎Google過往以來的風格,Google講究功效單純但功效必須相當強悍,Google的搜尋引擎即是如此,搜尋頁面永遠就是一個文字輸入欄,但搜尋結果相當精準、豐富。同樣的,Android平台與今日一般智慧型手機的軟體平台相比,其功效豐富性並不如一般智慧型手機,甚至只要32MB的記憶體用量就能夠執行。

很明顯的,Google Android的重點在於最低硬體使用量、最開放標準的軟體架構及平台、及讓手機內各項基礎軟體的總花費成本能降至最低,所追求的是最小但也最一致的共通點。

一旦手機有了最小的一致共通點,Google的網路服務及軟體就能大幅發揮,Google除了Internet服務外也力推各種輕量性軟體,由於輕量特性,所以其軟體可以快速移轉到Android手機上執行,並與其Internet服務相呼應。

當然,Android不僅對Google有利,對應用程式開發商、手機消費者、手機服務營運商...等,也同樣呈現利多,一旦Android成為極廣泛通行的手機軟體平台,應用程式業者就可以有新的軟體銷售舞台,且依據Apache v2授權方式,即便應用程式業者以Android平台為基礎撰寫程式,其程式的原始程式碼也不用公開,保證其商業權益。

另Android更有助於降低手機軟體成本,現有智慧型手機內的各類軟體都要收費,如作業系統、文件閱讀器、媒體播放器...等,而Android也具備這些基本功能,重點是分毫不取,如此,將帶給持續收取手機隨附軟體授權費的業者降價壓力。

不過,即便降價也很難因應壓力,軟體業者相互間有門戶之見,而Android的另一項特點是軟體平台的標準化,雖然各軟體業者多少也發展出自有的手機軟體平台,但多半還是要付費,且標準號召性不如Android。

既然手機軟體成本降低,消費者就可以買到更便宜的手機,而手機通訊服務的營運商(如:遠傳電信、中華電信等)自然也能提供更低廉的綁約方案,所以Android對手機基礎軟體業者的傷害最大,但卻對絕大多數人有利。


圖說:Google Android平台是由OHA(Open Handset Alliance)來負責發展及管理,此圖表示OHA、Google Android將能實現各種手機應用及服務。(www.OpenHandsetAlliance.com


圖說:Google Android的標誌圖案,Android一字的原意就是「機器人」。(www.Google.com


圖說:Google Android的架構圖。(www.code.google.com/android


圖說:Nokia S60手機內建的網頁瀏覽器之架構圖,圖中可見WebKit、WebCore的使用。(www.opensource.nokia.com


圖說:Google Android的軟體開發套件(Software Development Kit;SDK)程式畫面,開發套件使用Eclipse(日蝕)的整合開發環境,圖片右下則是Google Android的模擬程式(Emulator)。(www.OpenHandsetAlliance.com


圖說:台灣宏達電子(HTC)構想出名為「Dream,夢幻」的概念手機,該手機即支援呼應Google Android平台。(www.pocketinfo.nl

沒有留言: