一、Android 系統架構 Android 系統架構分為四層:Linux 內核層、系統庫層、應用框架層、應用層 1. Linux 內核層(Linux Kernel) 這一層提供的功能有:安全性、記憶體管理、進程管理、網路協議棧、驅動程式模型等 2. 系統庫層(Libraries) 這一層包括兩方面的 ...
一、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 系統架構圖(圖片來源於網路)