Android采用分層的架構,分為四層,從高層到底層分為應用程序層(app+System apps),應用程序框架層(Java API Framework),系統運行庫和運行環境層(Libraries + android Runtime)和Linux核心層(HAL+ Linux Kernel),如下圖所示:
還有一張中文簡化版的分層圖如下:
1. Linux核心層
linux內核(Linux Kernel)
Android平臺的基礎,直接和硬件打交道。硬件驅動、進程管理、內存管理、網絡管理的功能在這里實現。
硬件抽象層(Hardware Abstraction Layer)
為上層的Java API Framework提供相關硬件的界面顯示,Audio,Bluetooth等是組成硬件抽象層的庫模塊,實現每個硬件的界面顯示功能。
2. 系統運行庫和運行環境層
Android 運行環境(Android Runtime)
Android 5.0(API 21)之前使用的是Dalvik虛擬機,之后被ART所取代。
ART是Android操作系統的運行環境,通過運行虛擬機來執行dex文件。其中,dex文件是專為安卓設計的的字節碼格式,好處多多,不再贅述。Android toolchain(一種編譯工具)可以將Java代碼編譯為dex字節碼格式,過程如下圖,jack是一種編譯工具鏈(tool chain)
為了便于理解,做個類比,我們都知道,java程序的運行需要java的核心包的支持,然后通過JVM虛擬機來運行我們的應用程序。在Android中,Android程序的運行需要core Libararies的支持,然后通過ART或者Dalvik來運行該程序。
原生C/C++ 庫(Native c/c++ Libraries)
上面提到的ART就依賴于C/C++庫。開發者可以通過調用Java API Framework來使用原生庫的功能,也可以用Android NDK直接調用原生庫。
3. 應用程序框架層
java API Framework
我們最常用的組件和服務都在這一層,也是每一個安卓開發者必須要熟悉的一層,
4. Application層
系統應用(system apps)
可以理解為內置在Android系統的app,我們可以像調用Java API Framework層一樣直接調用系統app。
我們也可以自己編寫System app,但是要注意系統應用的權限比較特殊,直接寫在manifest里面是不行的。需要做特別的處理,參考http://www.programgo.com/article/76213742299/
因此,app開發主要研究Java API Framework層和應用程序層即可,如果有用到JNI,還需要研究一下Native c/c++ Libraries。但是Android運行庫和Android運行時主要是從事系統開發的人員需要研究的。把握全局的同時,也要搞清楚重點,畢竟,術業有專攻?!?/p>