Android 筆記之 Android 系統架構,android系統架構
一、Android 系統架構
Android 系統架構分為四層:Linux 核心層、系統庫層、應用程式框架層、應用程式層
圖1 Android 系統架構圖(圖片來源於網路)
1. Linux 核心層(Linux Kernel)
- 這一層提供的功能有:安全性、記憶體管理、進程管理、網路通訊協定棧、驅動程式模型等
2. 系統庫層(Libraries)
- 這一層包括兩方面的內容: C/C++ 語言編寫的程式庫、Android 運行時
- C/C++ 語言編寫的程式庫
- SQLite : 提供資料庫支援
- OpenGL|ES : (Open Graphic Libraries for Embedded Systems)提供 3D 繪圖支援
- Free Type : 字型渲染引擎
- Webkit : 提供瀏覽器核心支援
- SGL : (Skia Graphics Library)2D 圖形渲染引擎,Skia 是美國的一家公司,後來被 Google 收購
- SSL : (Secure Sockets Layer 安全套接層)是一種安全性通訊協定,為互連網通訊,提供安全及資料完整性保障
- libc : (Bionic libc)C標準庫,由 Google 開發,採用 BSD 授權條款,應用於嵌入式系統上
- Android 運行時
- 核心庫 : 包括 Java API 和 Android API
- Dalvik 虛擬機器 : 在有限的記憶體中,允許每一個 Android 的應用程式都擁有自己的 Dalvik 虛擬機器執行個體,並且運行於獨立的進程當中(Android 5.0 系統之後改為 ART 虛擬機器),獨立的進程可以防止當虛擬機器崩潰的時候,所有程式都被關閉
3. 應用程式框架層(Application Framework)
- 這一層主要是提供開發應用程式所需的架構,使程式員可以進行快速開發
4. 應用程式層(Applications)
5. 其他
- 開發人員
- 如果從事 Android 應用開發,那麼應該研究 Android 的應用程式層和應用程式框架層
- 如果從事 Android 系統開發,那麼應該研究 Android 的系統庫層
- 如果從事 Android 驅動開發,那麼應該研究 Android 的 Linux 核心層
- Dalvik 虛擬機器 與 ART(Android Runtime) 虛擬機器
- Android 5.0 系統之後 ART 虛擬機器取代 Dalvik 虛擬機器,主要是為了提升 Android 系統的流暢性
- 在 Dalvik 虛擬機器下,應用程式每次啟動並執行時候,位元組碼都需要通過JIT(Just-in-Time 即時編譯)轉換為機器碼,這也是為什麼每次開啟程式的時候都會很慢的原因
- ART 虛擬機器,在應用程式安裝的時候,就將位元組碼預先編譯成了機器碼,在應用程式啟動並執行時候無需再次編譯,使用的技術是 AOT(Ahead-of-Time 先行編譯)
- ART 虛擬機器也有缺點,先行編譯會佔用更大的記憶體空間,而且應用程式的安裝時間也會延長
- 介面
- 這裡採用知乎上某位大牛類似的回答來說明一下
- 比如說,小 A 通過某種技術,在網路上搜尋了很多高品質的美女圖片,然後發布在他的微博上,恰好小 B 也是這方面的愛好者,那麼小 A 的微博就是介面,小 B 只需關注小 A 的微博便可以查看大量的美女圖片,無需關心小 A 是通過什麼技術來獲得這些圖片的
- HAL(Hardware Abstraction Layer 硬體抽象層)
- 2 所示,這是比較新的 Android 系統架構圖,圖中還有一層叫 HAL(Hardware Abstraction Layer 硬體抽象層)
- HAL 的由來
- Linux 核心的發布遵循 GPL 協議,GPL 協議規定:所有對源碼的修改都必須開源
- 如果 Google 在 Linux 核心中編寫驅動程式模組,那麼修改的源碼就必須全部公布出來,但是這樣一來會損害硬體廠商的利益,畢竟公開源碼的話,硬體的實現細節和參數也就暴露了。為瞭解決這個問題,Google 提出了 HAL,廠商可以在不公開源碼的情況下,將硬體的相關實現以庫(.so)的形式放在 HAL 中,當然,硬體驅動不可能完全脫離 Linux 核心,所以 Google 也在Linux 核心中做了相應的修改,基於 GPL 協議,這部分修改的源碼要公布出來,但是因為 HAL 不屬於對 Linux 核心的修改,所以這裡的源碼就沒有開源的必要了
- HAL 的功能
- HAL 提供了將裝置硬體的功能暴露給 Application Framework 層的標準介面
- HAL 由許多庫模組組成,每個庫模組都實現了特定類型的硬體組件介面,通俗地講就是通過庫模組就可以調用相應的硬體組件,比如:藍芽模組在 HAL 中有特定的庫模組,當 Application Framework 層的 API 訪問藍牙裝置時,Android 系統會載入相應的庫模組以供 API 使用
- 這裡有必要理清一下,庫模組是提供給 API 的介面,而 API 是提供給程式員的介面
圖2 Android 系統架構圖(圖片來源於網路)