2007 年 11 月,Google 與許多 OEM 廠商、手機晶片供應商、軟硬體供應商、
電信業者所聯合組成的開放手持裝置聯盟(Open Handset Alliance),發佈了名為
「Android」的開放手機軟硬體平台,參與開放手持裝置聯盟的這些廠商,其中 台灣有華碩、宏達電與 Garmin 等公司加入其中,它們都是基於 Android 平台來 開發新的手機業務。
Android 是完全免費的手機作業系統,與 Nokia 的 Symbian OS、蘋果電腦的 iOS、微軟的 Windows Phone 及 RIM 使用的 BlackBerry OS 等手機作業系統處在 同一級別,它有完整的開發環境,包含模擬器、除錯工具與整合 Eclipse 的開發 環境,其 Dalvik 虛擬機的最佳化並整合 Webkit,擁有 SQLite 關聯式資料庫,而 應用程式的框架提供了可重覆使用和可取代的開發元件,支援相關的硬體包含相 機、GPS 與加速器等,而在多媒體方面其支援 MPEG4、H.264、MP3、AAC、
AMR、JPG、PNG 與 GIF 多種格式,通訊技術方面其支援藍芽、EDGE、3G 與 Wi-Fi 等多種特點。
2.1.1 Android 系統架構
Android 架構是由應用程式(Application)、應用程式框架(Application
Framework)、函式庫(Libraries)、Android 執行作業環境(Android Runtime)與 Linux 核心(Linux Kernel)所組成的,結構如圖 2. 1,藍色部分為應用程式,綠色及黃色 部分為中介軟體,紅色部分為操作系统。
圖 2. 1 Android 作業系統結構圖(資料來源:Android Developers[6])
2.1.2 應用程式
Android 是以 Linux 為核心的開放手機平台作業系統,程式撰寫的語言使用 為 Java,使得從介面到功能,都能有層出不窮的變化,所謂的應用程式指的是使 用者和設備的人機介面。目前 Android 系統本身已提供基本桌面(Home)、電話簿 (Contact)、數位電話(Phone)和網頁瀏覽器(Browser)等等的核心應用程式。
程式開發人員可以使用 Android 應用程式開發平台提供的 API 來開發自己設 計的應用程式,利用這一層建立機動程式(Activities)和服務程式(Services),這些 程式可以在 Android 作業平台上執行,而每一個應用程式是由數個機動程式和服 務程式所組成,每一個機動程式負責管理自己顯示的畫面。
Android 作業系統是以一個主執行緒(Thread)為基礎來執行相關的組件,組件 包括了機動程式、服務程式、廣播接收程式(Broadcast Receivers)和資料內容提供 程式(Content Providers)。Android 作業系統並不是採用 JVM,而是採用 Dalvik Virtual Machine 虛擬系統,如圖 2. 2 所示,因此 Android 應用程式是由常駐在 Linux 核心的 Dalvik Virtual Machine 來負責運作的。
圖 2. 2 Android 作業系統的運作
2.1.3 中介軟體
中介軟體(Middleware)為操作系统與應用程式之間的溝通橋樑,並分為兩層,
分別是函式層(Library)和虛擬機器(Virtual Machine)。
Android 包含一些 C/C++程式庫, Android 作業系統的許多組件都會使用到 這些程式庫,同時也包含了 WebKit,所謂的 WebKit 就是 Apple Safari 瀏覽器背 後的引擎。Android 採用 OpenCORE 作為基礎多媒體框架,OpenCORE 可分為六 大塊:PVPlayer、PVAuthor、Codec、Packet Video Multimedia Framework(PVMF)、
Operating System Compatibility Library(OSCL)、Common、OpenMAX。Android 使用 skia 為核心圖形引擎,搭配 OpenGL/ES。Android 的多媒體資料庫採用 SQLite 資料庫系統,資料庫又分為共用資料庫及私用資料庫。
而 Android 的中間層多以 Java 實作,並且採用特殊的 Dalvik 虛擬機器,Dalvik 虛擬機器是一種暫存器型態(Register Based)的 Java 虛擬機器,變數皆存放於暫存 器中,虛擬機器的指令相對減少,Dalvik 虛擬機器可以有多個例項(Instance),每 個 Android 應用程式都用一個自屬的 Dalvik 虛擬機器來執行,讓系統在執行程式 時可達到最佳化,此外,Dalvik 虛擬機器並非執行 Java 位元組碼(Bytecode),而 是執行一種稱為.dex 格式的檔案,其程式產生流程如圖 2.3。
圖 2. 3 Android 應用程式產生流程
2.1.4 硬體抽像層
Android 的硬體抽像層(Hardware Abstraction Layer, HAL)是能以封閉源碼的 形式提供硬體驅動模組,為了達成 Kernel Independent 的概念,所以採用 HAL 把 Android Framework 與 Linux Kernel 隔開,讓 Android 不會過度依賴 Linux Kernel,
也讓 Android Framework 的開發能在不考量驅動程式實作的前提下進行發展。