淺談「Android OS」的架構

Android:AOSP

RICK
Jul 21, 2020

Photo by Denny Müller on Unsplash

概要

通常而言,「Android Developer」所指的是開發「Android APPs」的人,最常見的就是「Phone APPs」,但事實上,「Android APPs」並不只侷限於手機上。

實際上,「Android」是一種作業系統,可執行於各種不同的裝置之上,除了手機、平板之外,還有電視機上盒、車用設備、穿戴式等;而「APPs」僅是執行於「Android OS」上的應用而已。

然而,本文的主角就是「Android」系統本身。

淺談「AOSP」

談到「Android OS」,就必須提到「AOSP」,它是由 Google 所領導的開源專案之一,全名為「Android Open Source Project」,相關資訊可以參考其官方網站「source.android.com」,其官方介紹如下:

根據官方的描述,「AOSP」是一項關於「Android OS」的開源專案,該專案提供了所有有關「Android OS」的資訊和相關源代碼。

我們可以理解成:「Android 是一套由 Google 主導、開發、維護並開放原始碼的移動裝置作業系統;而『AOSP』就是這個專案項目的簡稱。」;也因此,每當「Android」有任何異動時,Google 就會在「AOSP」上公開其源代碼。

正文

「Android」架構圖

在介紹完「AOSP」後,我們就要進入本篇的主題:「Android 的架構」,廢話不多說,直接上圖,如下:

從圖可知,「Android OS」架構大致上可劃分為五層,分別為「框架層」、「通信成」、「系統層」、「HAL 層」和「核心層」,而「這五層」通常會合稱「底層」,與被稱為「上層」的「APPs 層」作為區別。

應用框架層:Application Framework

實際上,應用框架層是「Android APPs Developers」最熟悉的一層,其中定義著「Framework API」,又被稱為「原生 API」,其使用方式及相關資訊可以參考「Google 開發者網站」。

備註:雖然「Framework API」是在「框架層」中被定義,但這並不代表所有的「API」都在「框架層」中被實作,事實上,多數跟硬體相關的「API」都是直接映射至「HAL 層」的接口。

通信層:Binder IPC

其為進程間的通信機制,允許應用框架跨越進程邊界並調用系統層級的服務,簡單的說,我們可以把它當作各進程間或與系統的橋樑;附帶一提,在「APPs 層」的開發者是無法看到此類通信過程的。

系統層:System Services

系統層會將特定功能模組化,並提供系統服務讓「框架層」的開發者使用,藉以訪問底層的硬件。

「Android」包含兩組系統服務,分為別「系統區塊」和「媒體區塊」,而「系統模組」負責窗口管理器、通知管理器等之類的服務,而「媒體模組」則與播放以及錄製等相關。

備註:就「APPs 層」的開發者而言,「Manager」是個黑盒子,我們可以透過它跟系統索取資源,但實際上,「Manager」並不是直接訪問底層,它僅是個窗口,其後都有相對應的「Services」去跟底層溝通。

硬體抽象層:Hardware Abstraction Layer

又被稱為「HAL 層」,顧名思義就是與硬體相關的分層,它統一定義一個標準接口以供硬體供應商實作,如此,Android 就可以避免因硬體不同而導致的差異性。

備註:在 Android 8.0 及更高版本中,較低層被重寫為採用新的,更具模塊化的架構,詳細請參考「HAL 類型」。

Linux 核心層:Linux Kernel

最後是「Kernel 內核層」,在官方文件中表示:「『Android OS』使用了包含一些特殊補充功能的『Linux』內核,如『Low Memory Killer』、『Wake Locks』、『Binder IPC Driver』…等。」,事實上,Android 是可以任意替換其 Linux 內核的版本,只要該版本的內核有提供上述功能的支援,相關資訊請參考「編譯內核」。

曾經有人說:「『Android OS』是『Linux OS』的其中一種發行版。」,然後,這句話在網路上掀起了論戰,其「可替換內核」就是爭議點之一,但先不論這句話是非對錯,不可否認的是「Android」的內核就是「Linux」。

事實上,筆者認為還是歸咎於 Google 跟 Linux 社群的關係,嗯,並不融洽,畢竟 Linux 的「GNU GPL」許可證著實讓 Google 吃了不少苦頭,甚至搞出了「HAL 層」來規避開源的問題,但這作法同樣也惹 Linux 社群的人不滿,認為 Google 違反其開源精神,並從中獲益,然後一言不合就…,其實也沒有怎樣,至少檯面上是這樣。

總結

嵌入式 Android 系統

起初,Android 的「創立目的」就是為了嵌入式應用:「智慧型相機的作業系統」;雖然當時的這項計畫並沒有成功,但卻意外地成了行動裝置的作業系統。

並在各種機緣情況下,Android 鞏固了它的地位,而隨著科技的發展,物聯網的崛起,除了依然站穩手機的市場外,「Android OS」逐步的擴大自己的版圖。

事實上,嵌入式的 Android 系統已然崛起,早在多年前,就有不少相關團隊長期致力於發展「Android 系統於多元平台的應用」,並且也確實獲得不小的成就,像是「Wear OS」、「Android TV」、「Android Auto for Cars」、「Android Things」、「Chrome OS devices」⋯⋯ 等,圖如下:

關於「Android」的架構就介紹到這邊。

--

--

RICK

當遇到重開機無法解決的 BUG 時,那就試試關機吧。