作者:黃彥傑 / 臺灣大學電機資訊學院資訊工程系
「Android」,它不是手機喔!它是一種「客製化」的手機平台。採用Linux系統,讓各方的開發人員能夠在自己熟悉的環境下,有能力也有權限替自己特殊的需求修改原始核心,使「Android」能夠在市場上以多種面貌出現。
前言
近年來異軍突起的智慧型手機,逐漸在手機市場上佔有一定的重要性,從幾年前以push mail風雲市場的BlackBerry、近兩年透過Windows Mobile抓住商務人士目光的HTC Touch系列,到簡單大方的互動介面震撼全世界的iPhone,智慧型手機在手機歷史上創下一個新的里程碑。然而這波革命浪潮卻毫無停止的跡象。在iPhone上市的同時,Google也釋出了第一個開放原始碼的手機平台:Android。Android原是一種機器人的代稱,而現今則代表了Google所推出的系統平台(不過Android的圖示仍然是以機器人為代表),而這個平台包涵了作業系統、函式庫以及最前端的應用程式。
T-Mobile G1簡介
2008年09月23日,全世界第一隻Android手機T-Mobile G1上市,由電信業者T-Mobile、手機業者HTC宏達電以及Google共同發表。T-Mobile G1擁有觸控式螢幕、QWERTY Keyboard(方便使用者上網、收發email)、單點觸控啟動Google Search、各種Google程式(包涵Google Map、YouTube、Google Map 360度街景功能…等)、Android Market(可以購買、下載需要的軟體服務)、自訂化的桌面…等。
其中較有特色的功能包括G1內建的ShopSawy。ShopSawy可以透過手機上的攝影鏡頭掃描商品的條碼,並利用條碼到網路上搜尋附近的商家以及搜尋網路上最便宜的價格。
而如此特別的ShopSawy只是眾多Android程式中的一個而已。ShopSawy代表了Android程式的無限可能性,因為Android利用與Apple App Store相同的模式,透過與程式開發者分享利益所得而鼓勵各界程式開發者開發Android的各種程式,讓Android上的應用程式涵蓋各種不同的用途,也讓使用者可以針對自己不同需要使用不同軟體。
G1是第一隻Android手機,且絕對不是最後一隻。各手機廠商目前皆正在觀察T-Mobile G1在市場上的反應,準備陸續搶攻這片擁有無限潛力的市場。
架構
一般會將Android分成幾個大部分:應用程式、應用程式框架、函式庫、Dalvik虛擬機器、系統核心。
- 應用程式以及其框架
這部份包涵了Android預設提供的許多功能,也是一般使用者直接接觸到的部份,例如整個Android的首頁、通訊錄、網頁瀏覽器、email收發、SMS簡訊收發以及最基本的手機通話功能…等。這些應用程式建構在整個Android的最上層,透過應用程式框架與函式庫、系統核心做溝通。
Android上的應用程式都是透過Java所撰寫而成的。在從前的嵌入式系統上,通常都使用C/C++作為開發語言,但如此一來,開發者就得花不少心力建制各種不同系統上的開發環境,以及交叉編譯器的配置。選用Java的原因是因為Java有良好的跨平台特性、方便的物件導向特性以及可以快速設計的GUI,這些特性讓開發者省去不少配置環境的時間。但與以往Java程式不同的是,Android使用自己的Dalvik Virtual Machine編譯Java程式,可以將最上端的Java程式編譯成個別機器最合適的格式,讓下端開發者可以只專注於微調Dalvik,而不需要去更動上端的Java程式。
若程式開發者想要開發在Android上的應用程式,可以到Google的官方網站上下載SDK(Software Development Kit,軟體開發工具)(http://code.google.com/intl/zh-TW/android/),並可以透過Eclipse或是其他環境開發。
而應用程式框架的最主要目的就在於重複利用某些已固定的功能。例如通訊錄和購物車都需要『清單』的功能,就可以利用呼叫框架裡View System的list API即可。如此一來許多不同的程式若需要同樣一種功能,就只需要利用同一種框架進行溝通。另外,應用程式框架也在整合上層的Java和底層的C/C++函式庫有重要的貢獻。透過這個框架,開發者可以在上層直接使用到底層函式庫提供的函式,而不用擔心如何呼叫C/C++的程式。
- 函式庫
與應用程式不同,Android的函式庫是由C/C++所組成的,負責提供各種不同功能的程式函式庫。因為Linux系統核心的函式庫以往皆由C/C++撰寫而成,所以Android直接沿用。Android提供的函式庫包涵最基本的嵌入式系統函式、多媒體播放、使用者介面、字型…等。比較特別的是,它還另外提供了以往在嵌入式系統並不常見的3D圖形(Open GL)函式庫、內建的網路瀏覽器函式庫以及輕量化的資料庫系統函式庫。這些額外的函式庫也讓Android有能力成為更強大的嵌入式系統。
- Dalvik Virtual Machine
Dalvik是Android在執行時最重要的一個機制。Android將任何在執行中的程式都當作一個個別的程序(Process),而由Dalvik負責分配記憶體空間與控管這些Process。一般來說,最上層的Java Class檔案會經由DX tool編譯成*.dex檔案,而這些*.dex檔案就是Dalvik所認得的檔案,可以做記憶體最佳化與記憶體回收…等控管。之所以不使用Java原始的Java Virtual Machine(簡稱JVM)在於Java ME的授權問題,以及JVM對於程序的管理、執行效率控管無法替有限記憶體做到最佳化,所以Google自行提供了一個與JVM有相同目的(同樣為編譯原始Java檔)但卻可實作最佳化的虛擬機器Dalvik。Dalvik與JVM最大的不同在於JVM使用的是Stack-Based,而Dalvik採用Registered-Based。採用Registered-Based的好處是系統能將變數存放在暫存器中,如此一來Dalvik使用的指令就會少一點,速度也會快一點。此外,Dalvik編譯出的dex檔案也對於記憶體空間有良好的配置。Dalvik透過DX tool將Java程式編譯成dex檔案時,會將重複的class檔案編譯到同一個dex檔案,如此一來就可以減少每個程序所佔用的記憶體空間,這在一個只擁有極小記憶體空間的嵌入式系統上是非常重要的議題。
- 系統核心
與其他智慧型手機不同的特色在於,Android的系統核心為Linux2.6系統,並採用開放原始碼策略提供給各家廠商做修改。相較於iPhone封閉的iPhone OS、Windows Mobile採用Windows系統,Android採用Linux系統,讓各方的開發人員能夠在自己熟悉的環境下,有能力也有權限替自己特殊的需求修改原始核心,也使Android能夠在市場上以多種面貌出現。
未來展望
由於Android採用開放原始碼策略,能夠降低廠商的開發成本,以及增加平台的穩定性與軟體的多元性。一般預估Android將會輕鬆佔領智慧型手機一定的市場。然而,市場總是瞬息萬變的,Android最大的對手iPhone近來也陸續開放其SDK(Software Development Kit,軟體開發工具),讓Mac的使用者能夠在Mac OS上開發iPhone的程式,並透過Apple的App Store與世界各地的使用者分享程式;而Nokia也不甘示弱併購Symbian作業系統(目前多由Nokia、SonyEricsson…等採用)以及著名的GUI(使用者介面)函式庫Qt,期望能夠保衛住其手機市場龍頭的地位。未來各家廠商是否會開放其手機平台或是軟體SDK還有待觀察,但不可否認的是Android已經揭開了開放原始碼的序曲,也讓智慧型手機擁有令人期待的未來。