Framework學習(一)Android 系統架構
Android系統架構
Android本質就是在標準的Linux系統上增加了Java虛擬機器Dalvik/ART,並在Dalvik/ART虛擬機器上搭建了一個JAVA的application framework,所有的應用程式都是基於JAVA的application framework之上。
android分為四個層,從高層到低層分別是應用程式層、應用程式框架層、系統執行庫層和Linux核心層。
應用程式層
該層提供一些核心應用程式包,例如電子郵件、簡訊、日曆、地圖、瀏覽器和聯絡人管理等。同時,開發者可以利用Java語言設計和編寫屬於自己的應用程式,而這些程式與那些核心應用程式彼此平等、友好共處。
應用程式框架層
應用框架層為開發人員提供了可以開發應用程式所需要的API,我們平常開發應用程式都是呼叫的這一層所提供的API,當然也包括系統的應用。這一層的是由Java程式碼編寫的,可以稱為Java Framework。
應用程式框架層包括活動管理器、位置管理器、包管理器、通知管理器、資源管理器、 電話管理器、視窗管理器、內容提供者、檢視系統和XMPP服務十個部分。
系統執行庫層
系統執行庫層分為兩部分,分別是C/C++程式庫和Android執行時庫。
(1)C/C++程式庫
C/C++程式庫能被Android系統中的不同元件所使用,並通過應用程式框架為開發者提供服務。C/C++程式庫包括九個子系統,分別是圖層管理、媒體庫、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。
(2)Android執行時庫
執行時庫又分為核心庫和ART(5.0系統之後,Dalvik虛擬機器被ART取代)。核心庫提供了Java語言核心庫的大多數功能,這樣開發者可以使用Java語言來編寫Android應用。相較於JVM,Dalvik虛擬機器是專門為移動裝置定製的,允許在有限的記憶體中同時執行多個虛擬機器的例項,並且每一個Dalvik 應用作為一個獨立的Linux 程序執行。獨立的程序可以防止在虛擬機器崩潰的時候所有程式都被關閉。而替代Dalvik虛擬機器的ART的機制與Dalvik不同。在Dalvik下,應用每次執行的時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的執行效率,而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。
Linux核心層
Android 的核心繫統服務基於Linux 核心,在此基礎上添加了部分Android專用的驅動。系統的安全性、記憶體管理、程序管理、網路協議棧和驅動模型等都依賴於該核心。Linux核心也是作為硬體與軟體棧的抽象層。
Android系統原始碼
對國內的開發者來說最痛苦的是無法去訪問android開發網站。為了更好的認識世界,對程式設計師來說,會翻牆也是的一門技術,帶你去領略牆外的世界, 國內開發者訪問(androiddevtools) 上面已經有了所有你要的資源,同時可以下載到我們的主角framework。
如果你只是想檢視原始碼,androidxref也是一個不錯的資源。
整體結構
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 (系統服務)