Android系統架構與系統源碼目錄
1.Android系統架構
Android系統架構分為五層,從上到下依次是應用層、應用框架層、系統運行庫層、硬件抽象層和Linux內核層。
應用框架層(Java Framework)
應用框架層為開發人員提供了可以開發應用程序所需要的API,我們平常開發應用程序都是調用的這一層所提供的API,當然也包括系統的應用。這一層的是由Java代碼編寫的,可以稱為Java Framework。下面來看這一層所提供的主要的組件。
| 名稱 | 功能描述 |
|---|---|
| Activity Manager(活動管理器) | 管理各個應用程序生命周期以及通常的導航回退功能 |
| Location Manager(位置管理器) | 提供地理位置以及定位功能服務 |
| Package Manager(包管理器) | 管理所有安裝在Android系統中的應用程序 |
| Notification Manager(通知管理器) | 使得應用程序可以在狀態欄中顯示自定義的提示信息 |
| Resource Manager(資源管理器) | 提供應用程序使用的各種非代碼資源,如本地化字符串、圖片、布局文件、顏色文件等 |
| Telephony Manager(電話管理器) | 管理所有的移動設備功能 |
| Window Manager(窗口管理器) | 管理所有開啟的窗口程序 |
| Content Providers(內容提供器) | 使得不同應用程序之間可以共享數據 |
| View System(視圖系統) | 構建應用程序的基本組件 |
2.Android系統源碼目錄
我們要先了解Android系統源碼目錄,為后期源碼學習打下基礎。關于源碼的閱讀,你可以訪問http://androidxref.com/來閱讀系統源碼。當然,最好是將源碼下載下來。下載源碼可以使用清華大學開源軟件鏡像站提供的Android 鏡像:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 。如果覺得麻煩也可以查找國內的網盤進行下載,推薦使用該百度網盤地址下載:http://pan.baidu.com/s/1ngsZs,它提供了多個Android版本的的源碼下載。
整體結構
各個版本的源碼目錄基本是類似,如果是編譯后的源碼目錄會多增加一個out文件夾,用來存儲編譯產生的文件。Android7.0的根目錄結構說明如下表所示。
| Android源碼根目錄 | 描述 |
|---|---|
| abi | 應用程序二進制接口 |
| art | 全新的ART運行環境 |
| bionic | 系統C庫 |
| bootable | 啟動引導相關代碼 |
| build | 存放系統編譯規則及generic等基礎開發包配置 |
| cts | Android兼容性測試套件標準 |
| dalvik | dalvik虛擬機 |
| developers | 開發者目錄 |
| development | 應用程序開發相關 |
| device | 設備相關配置 |
| docs | 參考文檔目錄 |
| external | 開源模組相關文件 |
| frameworks | 應用程序框架,Android系統核心部分,由Java和C++編寫 |
| hardware | 主要是硬件抽象層的代碼 |
| libcore | 核心庫相關文件 |
| libnativehelper | 動態庫,實現JNI庫的基礎 |
| ndk | NDK相關代碼,幫助開發人員在應用程序中嵌入C/C++代碼 |
| out | 編譯完成后代碼輸出在此目錄 |
| packages | 應用程序包 |
| pdk | Plug Development Kit 的縮寫,本地開發套件 |
| platform_testing | 平臺測試 |
| prebuilts | x86和arm架構下預編譯的一些資源 |
| sdk | sdk和模擬器 |
| system | 底層文件系統庫、應用和組件 |
| toolchain | 工具鏈文件 |
| tools | 工具文件 |
| Makefile | 全局Makefile文件,用來定義編譯規則 |
從表3可以看出,系統源碼分類清晰,并且內容龐大且復雜。接下來分析packages中的內容,也就是應用層部分。
應用層部分
應用層位于整個Android系統的最上層,開發者開發的應用程序以及系統內置的應用程序都是在應用層。源碼根目錄中的packages目錄對應著系統應用層。它的目錄結構如表4所示。
| packages目錄 | 描述 |
|---|---|
| apps | 核心應用程序 |
| experimental | 第三方應用程序 |
| inputmethods | 輸入法目錄 |
| providers | 內容提供者目錄 |
| screensavers | 屏幕保護 |
| services | 通信服務 |
| wallpapers | 墻紙 |
從目錄結構可以發現,packages目錄存放著系統核心應用程序、第三方的應用程序和輸入法等等,這些應用都是運行在系統應用層的,因此packages目錄對應著系統的應用層。
應用框架層部分
應用框架層是系統的核心部分,一方面向上提供接口給應用層調用,另一方面向下與C/C++程序庫以及硬件抽象層等進行銜接。 應用框架層的主要實現代碼在/frameworks/base和/frameworks/av目錄下,其中/frameworks/base目錄結構如表5所示。
| /frameworks/base目錄 | 描述 | /frameworks/base目錄 | 描述 |
|---|---|---|---|
| api | 定義API | cmds | 重要命令:am、app_proce等 |
| core | 核心庫 | data | 字體和聲音等數據文件 |
| docs | 文檔 | graphics | 圖形圖像相關 |
| include | 頭文件 | keystore | 和數據簽名證書相關 |
| libs | 庫 | location | 地理位置相關庫 |
| media | 多媒體相關庫 | native | 本地庫 |
| nfc-extras | NFC相關 | obex | 藍牙傳輸 |
| opengl | 2D/3D 圖形API | packages | 設置、TTS、VPN程序 |
| sax | XML解析器 | services | 系統服務 |
| telephony | 電話通訊管理 | test-runner | 測試工具相關 |
| tests | 測試相關 | tools | 工具 |
| wifi | wifi無線網絡 |
C/C++程序庫部分
系統運行庫層(Native)中的 C/C++程序庫的類型繁多,功能強大,C/C++程序庫并不完全在一個目錄中,這里給出幾個常用且比較重要的C/C++程序庫所在的目錄位置。
| 目錄位置 | 描述 |
|---|---|
| bionic/ | Google開發的系統C庫,以BSD許可形式開源。 |
| /frameworks/av/media | 系統媒體庫 |
| /frameworks/native/opengl | 第三方圖形渲染庫 |
| /frameworks/native/services/surfaceflinger | 圖形顯示庫,主要負責圖形的渲染、疊加和繪制等功能 |
| external/sqlite | 輕量型關系數據庫SQLite的C++實現 |
講完 C/C++程序庫部分,剩下的部分我們在表3已經給出:Android運行時庫的代碼放在art/目錄中。硬件抽象層的代碼在hardware/目錄中,這一部分是手機廠商改動最大的一部分,根據手機終端所采用的硬件平臺會有不同的實現。
浙公網安備 33010602011771號