• 沒有找到結果。

第四章 Android 平台對於運營商業者之影響

第二節 Android 作業系統平台介紹

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

59

第二節 第二節 第二節

第二節 Android 作業系統平台介紹 作業系統平台介紹 作業系統平台介紹 作業系統平台介紹 壹 壹 壹

壹、 、 、 、 Android 平台之架構分 平台之架構分 平台之架構分 平台之架構分析 析 析 析

97

Android 嚴格而論並非單指一作業系統(operating system),而是一針對可攜 式裝置所開發涵蓋作業系統核心、系統函式庫、中介軟體及應用程式等的軟體平 台(platform)。Android 平台採用軟體堆疊(software stack)的架構,並清楚定義 每層應具備之專屬功能,且只能與鄰近上下層的軟體進行直接溝通以確保架構的 抽象化(abstraction)。架構上的抽象化可保障各層軟體在呼叫下層特定功能各函 式庫或核心中各項模組之使用彈性,以自由使用下層軟體所提供的各項功能。

圖 25 Android 平台軟體堆疊架構 資料來源:Google Android 官方網站

Android 以開放原始碼的 Linux 作業系統核心為基礎,搭配開放原始碼函式庫,

加上 Google 本身所開發的應用程式框架,因此組成 Android 的整體平台。根據

97 由於 Android 版本不斷更新,造成 Android 平台軟體堆疊架構的應用程式框架層等上層部分於 各版本之間有些微的不同。本節對於 Android 平台的技術架構介紹,主要則是針對 Android 1.5 版 本做為介紹之主體。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

60

2008 年 Google 行動平台技術總監 Andy Rubin 與 Patrick Brady 於 Google I/O 大會 所發表的『Anatomy & Physiology of an Android』演講內容98,Android 平台軟體 堆疊架構如圖所示,由下至上可細分為第一層的作業系統核心層(Linux Kernel)、

第二層的系統函式庫層(Libraries)、第三層包括執行環境(Runtime)與應用程 式框架(Application Framework)的中介軟體層(Middleware)以及第四層的應用 程式層(Applications)等,以下將針對各層逐一介紹。

一 一一

一、、、 作業系統核心層、作業系統核心層作業系統核心層作業系統核心層:::

Android 選用 Linux Kernel 2.6 版本做為整體平台的基底驅動引擎(base engine),採用 C 語言撰寫。除了包含一套用於可攜式裝置的嵌入式 Linux 外,其 餘皆為連接硬體裝置的驅動程式,負責驅動所有的 I/O 與硬體,包括 Bluetooth 藍 芽驅動、Wi-Fi 無線通訊驅動、顯示驅動、鍵盤驅動、照相機驅動、USB 驅動、

程式間溝通管道驅動(binder)以及音效驅動等。另外,此層的 Linux Kernel 也負 責執行程序管理、記憶體管理、網路管理、電源管理、系統安全管理以及權限管 理等所有作業系統底層需負責的管理作業活動。

在硬體支援方面,Linux Kernel 則負責與上層(系統函式庫層)定義軟體抽 象化的硬體溝通介面(Hardware Abstraction Layer;HAL)溝通。透過此抽象化的 硬體溝通介面,上層軟體開發人員可利用高階語法與硬體直接進行溝通,而不須 實際撰寫低階指令操作硬體。

Android 平台之所以採用 Linux Kernel 作為其作業系統核心,最主要原因即在 於完全開放原始碼的特性,除可吸引開發人員與相關社群不斷進行更新,以維護 Linux Kernel 的狀態更新外,並可針對錯誤與不足之處進行修正,以確保作業系 統整體的運作穩定。此外,Android 平台為實現應用程式跨硬體平台的特性,透 過修改既有 Linux 核心系統之架構,使其能達成以 Java 撰寫的應用程式不需經過 修改,即直接可以在不同硬體平台上運作之目標。

另外值得注意的是,雖然 Android 平台是運作執行於 Linux Kernel 之上,但

98 詳細演講內容可見 http://www.youtube.com/watch?v=G-36noTCaiA,最後瀏覽日期:2010 年 3 月 20 日。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

61

事實上 Android 並非一般人所認知的 Linux 作業系統(GNU/Linux)99。Android 只有在作業系統核心及少數系統函式庫元件與 GNU/Linux 相似,其餘一般 GNU/Linux 系統中常見包括 Cairo、X11、Alsa、FFmpeg、GTK、Pango、Glibc 等功能均不予以支援100。另外,Android 上層的應用程式架構皆以 Java 程式碼撰 寫,並透過由 Google 本身自行開發的虛擬機器(virtual machine)方式轉換執行,

亦與一般的 GNU/Linux 系統架構存在很大的差異。

二 二二

二、、、 系統函式庫層、系統函式庫層系統函式庫層系統函式庫層:::

Android 的系統函式庫層(native libraries)主要用以存放較偏重於硬體的基 礎軟體函式,藉以提供較低層級的系統支援性功能以及相關的運算演算法。該程 式庫使用許多開放原始碼程式庫與元件,來提供上層應用程式開發功能,如提供 瀏覽器安全加解密的 SSL、3D 圖形的 OpenGL/ES、瀏覽器排版引擎 WebKit、字 型引擎 Freetype、嵌入式 SQL 資料庫 SQLite、2D 向量圖形處理程式庫 SGL、管 理顯示系統存取的 Surface Manager、多媒體存取的 Media Framework 等,此層之 函式庫軟體元件皆以 C 或 C++語言撰寫而成。此外,Android 的系統函式庫層還 具備一針對嵌入式系統(embedded system)最佳化而特別設計的基礎 C 程式庫

(Bionic Libc),其目的在於將開發程式時最常重複使用到的程式碼、指令及功能 擷取出來,開發人員透過使用該標準函式庫的內建指令,不必為程式內同樣功能 重複撰寫相同之程式碼,因此得以大幅改善開發程式之效率。

另外,Android 平台於系統函式庫層中特別定義了一層特殊的硬體抽象層

(Hardware Abstraction Layer;HAL),如圖 26 所示,硬體抽象層界於硬體與執 行於平台上的應用程式之間,並作為兩者之間的溝通管道。其主要功能為將各種 硬體的不同加以隱藏並抽離於作業系統的核心,如此可讓 Linux Kernel 的程式碼

99 GNU/Linux 是 GNU 計劃的支援者與開發者,特別是其創立者 Richard Stallman 對於一個以 Linux 聞名的類 Unix 操作系統的稱呼。一般所稱的 Linux 其實是指根基於 Linux Kernel 以及其他許多與 核心相關的軟體所組成之作業系統。最早 Linux 一詞其實是專指核心(kernel),其僅提供系統底 層與硬體間的基本平台,另外尚須配合其他程式才能成為一完整的作業系統。因此,有許多廠商 透過整合 Linux Kernel 加上其他軟體如基本的函式庫、工具、圖形介面及應用程式等,所組成的 一套完整作業系統,才是一般所稱的 Linux。為了避免誤解,自由軟體基金會建議開發者稱呼這 樣的一套作業系統為 GNU/Linux。其中的根本原因為 kernel 提供底層機制,但系統中重要的元件 幾乎都是來自於 GNU。

100 資料來源:http://zh.wikipedia.org/wiki/Android,最後瀏覽日期:2010 年 3 月 20 日。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

62

不必因為硬體的不同而需要修改,因此可大幅增進應用程式的可移植性。

硬體抽象層在 Android 平台中可分為兩個部份:一個部份在作業系統核心層 的 Linux Kernel,另一個部份則位於系統函式庫層的 HAL,這兩個部份可以彼此 相互溝通。HAL 的部份主要負責詳細定義所有硬體的驅動程式內容,並實作所有 Android 平台定義的標準化硬體控制介面;而 Linux Kernel 的部分則主要負責與硬 體連接,並傳達 HAL 層的驅動程式所下達的指令101

圖 26 Android 硬體抽象層之溝通示意圖

資料來源:『How Android Differs from GNU/Linux』,0xLab 三

三三

三、、、 中介軟體層、中介軟體層中介軟體層中介軟體層:::

中 介 軟 體 層 主 要 由 執 行 環 境 ( Runtime ) 與 應 用 程 式 框 架 ( Application Framework)所組成。執行環境區塊中另外包括兩個部分:其一為 Java 核心函式 庫(Core Libraries),其二為 Google 專為 Android 平台應用程式運作所開發出的 虛擬機器102「Dalvik」(Dalvik Virtual Machine)。當 Application Framework 中的應

101 透過如此之設計,可以讓行動裝置廠商及硬體零件廠商在「非」Linux Kernel 層中撰寫硬體的 驅動程式。資料來源:蔡華展、顏向瑜、朱南勳、李宗霖、翁嘉德,揭開揭開揭開 Android 的神秘面紗揭開 的神秘面紗的神秘面紗,的神秘面紗 資策會研究報告,2009 年 5 月 27 日。

102 虛擬機器本身是一個軟體,可在下層系統以及硬體裝置間提供相同的執行環境去執行軟體。以

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

63

用程式需要使用常用的 Java 程式時,即可直接呼叫位於在 Runtime 中的核心函式 庫並加以使用;而 Dalvik 虛擬機器則負責轉換應用程式的程式碼,使 Android 的 各種應用程式得在不同硬體系統下進行跨平台的運作。

在執行環境部分,Android Runtime 為一專門為嵌入式行動裝置所設計的執行 環境,其目的為在有限的電源、記憶體以及處理器能力限制下能夠有效率的執行 應用程式。Android Runtime 的主要特色在於所有的應用程式都是採用 Java 程式 語言所撰寫,並以專屬的 Dalvik 虛擬機器執行。透過 Java 語言及虛擬機器可以確 保所有中介軟體層以及應用層程式皆具有跨平台特性,不需因不同硬體規格重新 撰寫與編譯程式。

雖然 Android 平台的應用程式也是以 Java 語言所撰寫,但 Runtime 卻不是使 用 Java 虛擬機器,而是使用針對 Android 平台所專門設計的 Dalvik 虛擬機器,

Dalvik 利用其專屬的轉譯器將 Java bytecode 轉為 Dalvik bytecode 後再執行 Java 程式。Dalvik 與 Java Virtual Machine 最大的差異即在於記憶體需求更少以及執行 程序管理更有效率,因此更適合於有限資源的行動裝置環境中實施。而除了 Dalvik 之外,在 Runtime 部份 Android 還提供了一系列的核心函式庫(Core Libraries)

供應用程式開發人員使用。Core Libraries 之於 Java 程式語言就如同 Libc 之於 C/C++程式語言,將許多 Java 程式語言中最常使用的基本指令與功能進行明確定 義,讓應用程式開發人員如有需要時可以直接呼叫使用,而不須重新撰寫相關的 程式碼。

而在應用程式框架部分,在執行環境的上方的 Application Framework 提供一 系列開發 Android 應用程式所需的基本應用服務以及功能,且為開發應用程式時 所需的必要元件103,而所有的元件皆由 Java 程式語言所撰寫,若應用程式開發人 員需使用函式庫時可直接在此呼叫,故可因此減少重覆開發的時間。

Java 為例,所有以其撰寫的應用程式,經 Java 編譯器進行編譯過後轉換為 Bytecode,便可透過 Java 虛擬機器(Java Virtual Machine;JVM)加以執行。使用者若想在 Windows 或 Linux 等不同的作 業系統之下執行相同的 Java 應用程式,只要在各作業系統中分別安裝專屬的 Java 虛擬機器便可 以順利執行。資料來源:蔡華展、顏向瑜、朱南勳、李宗霖、翁嘉德,揭開揭開揭開揭開 Android 的神秘面紗的神秘面紗的神秘面紗,的神秘面紗 資策會研究報告,2009 年 5 月 27 日。

Java 為例,所有以其撰寫的應用程式,經 Java 編譯器進行編譯過後轉換為 Bytecode,便可透過 Java 虛擬機器(Java Virtual Machine;JVM)加以執行。使用者若想在 Windows 或 Linux 等不同的作 業系統之下執行相同的 Java 應用程式,只要在各作業系統中分別安裝專屬的 Java 虛擬機器便可 以順利執行。資料來源:蔡華展、顏向瑜、朱南勳、李宗霖、翁嘉德,揭開揭開揭開揭開 Android 的神秘面紗的神秘面紗的神秘面紗,的神秘面紗 資策會研究報告,2009 年 5 月 27 日。