Android Framework(一) 系統架構及源碼

雖然實際開發工作經常偏業務和應用層,但作爲一個有追求的程序猿,對於技術還是要保留好奇和深入瞭解的習慣的。年輕就要多學習!不僅要知其然,還要知其所以然。故趁閒暇,博覽大家,研究一下frameworks相關知識,提升自己。

Android四層架構

在這裏插入圖片描述
從高到低分別是應用層、框架層、運行庫層、Linux內核層。

Android的本質是在標準的Linux系統上增加了Java虛擬機Dalvik/ART,並在Dalvik/ART虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基於JAVA的application framework之上。

各個層級的主要包含內容如下
在這裏插入圖片描述

這裏說明一下運行時庫的虛擬機:

相較於JVM,Dalvik虛擬機是專門爲移動設備定製的,允許在有限的內存中同時運行多個虛擬機的實例,並且每一個Dalvik 應用作爲一個獨立的Linux 進程執行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。

Android4.4版本以前是Dalvik虛擬機,4.4版本開始引入ART虛擬機(Android Runtime)。在4.4版本上,兩種運行時環境共存,可以相互切換,但是在5.0版本以後,Dalvik虛擬機(簡稱DVM)則被徹底的丟棄,全部採用ART。

ART和Dalvik的區別:

  • Dalvik是運行時編譯,ART是運行前編譯,應用首次安裝時就會將字節碼編譯成機器碼
  • ART佔用空間比Dalvik大(原生代碼佔用的存儲空間更大),就是用“空間換時間”
  • ART減少編譯,減少了CPU使用頻率,使用明顯改善電池續航
  • ART應用啓動更快、運行更快、體驗更流暢、觸感反饋更及時

Android系統源碼

Android系統源碼:http://androidxref.com/

整體架構

Android7.0的根目錄結構說明如下:

|– Makefile (全局Makefile文件,用來定義編譯規則)
|– abi (應用程序二進制接口)
|– art (ART運行環境)
|– bionic (bionic C庫)
|– bootable (啓動引導相關代碼)
|– build (存放系統編譯規則及generic等基礎開發包配置)
|– cts (Android兼容性測試套件標準)
|– dalvik (dalvik JAVA虛擬機)
|– developers (開發者目錄)
|– development (應用程序開發相關)
|– device (設備相關配置)
|– docs (參考文檔目錄)
|– external (android使用的一些開源的模組)
|– frameworks (核心框架——java及C++語言)
|– hardware (部分廠家開源的硬解適配層HAL代碼)
|– kernel
|– libcore (核心庫相關文件)
|– libnativehelper (動態庫,實現JNI庫的基礎)
|– ndk (NDK相關代碼,幫助開發人員在應用程序中嵌入C/C++代碼)
|– out (編譯完成後的代碼輸出與此目錄)
|– packages (應用程序包)
|– pdk (Plug Development Kit 的縮寫,本地開發套件)
|– prebuilts (x86和arm架構下預編譯的一些資源)
|– sdk (sdk及模擬器)
|– system (底層文件系統庫、應用及組件——C語言)
|– tools (工具文件)
|– toolchain(工具鏈文件)
|– vendor (廠商定製代碼)

應用層部分

應用層位於整個Android系統的最上層,開發者開發的應用程序以及系統內置的應用程序都位於應用層。源碼根目錄中的packages目錄對應着系統應用層。

|– apps (核心應用程序)
|– experimental (第三方應用程序)
|– inputmethods (輸入法目錄)
|– providers (內容提供者目錄)
|– screensavers (屏幕保護)
|– services (通信服務)
|– wallpapers (牆紙)

從目錄結構可以發現,packages目錄存放着系統核心應用程序、第三方的應用程序和輸入法等等,這些應用都是運行在系統應用層的,因此packages目錄對應着系統的應用層。

應用框架層部分

應用框架層是系統的核心部分,一方面向上提供接口給應用層調用,另一方面向下與C/C++程序庫以及硬件抽象層等進行銜接。 應用框架層的主要實現代碼在/frameworks/base和/frameworks/av目錄下,其中/frameworks/base目錄結構如下:

|– api (定義API)
|– core (核心庫)
|– docs (文檔)
|– include (頭文件)
|– libs (庫)
|– media (多媒體相關庫)
|– nfc-extras (NFC相關)
|– opengl 2D/3D (圖形API)
|– sax (XML解析器)
|– telephony (電話通訊管理)
|– tests (測試相關)
|– test-runner (測試工具相關)
|– tools (工具)
|– wifi (wifi無線網絡)
|– cmds (重要命令:am、app_proce等)
|– data (字體和聲音等數據文件)
|– graphics (圖形圖像相關)
|– keystore (和數據簽名證書相關)
|– location (地理位置相關庫)
|– native (本地庫)
|– obex (藍牙傳輸)
|– packages (設置、TTS、VPN程序)
|– services (系統服務)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章