Andriod系統框架
一.前言
在之前的學習裏,第一次接觸Android 框架層的源碼是在看bidner。在一個就是最近在看的AudioRecord。可以說看的也挺吃力。
所以在之後,陸陸續續看過一些其他的進階android書籍。也打算將這一階段看過的書籍,做下讀書筆記。
後續計劃
- Android 系統啓動
- Android 應用啓動
- Android 四大組件啓動
- Android Handler機制
- Android Context
- Android ASM
- Android WinderManager
相關資料 《Android進階解密》(強烈推薦),《Android藝術開發探索》《Android系統源碼情景分析》
二.Android系統框架
Android系統框架分爲5層。從上到到下,依次爲應用層,應用框架層,系統運行層,硬件抽象層和Linux內核層
1.應用層(System APP)
系統內置的應用程序和非系統的應用程序都屬於應用層,負責與用戶直接進行交互,通常使用java進行開發
系統應用可用作用戶的應用,以及提供開發者可從其自己的應用訪問的主要功能。例如,如果您的應用要發短信,您無需自己構建該功能,可以改爲調用已安裝的短信應用向您指定的接收者發送消息。
2.應用框架層(Java API Framework)
應用框架層爲開發人員提供了開發應用程序所需要的API,平時開發應用所需要的API都是調用這一層的API,這些 API 形成創建 Android 應用所需的構建塊,它們可簡化核心模塊化系統組件和服務的重複使用,包括以下組件和服務:
應用程序框架層類庫名稱 | 功能 |
---|---|
活動管理器(Activity Mananger) | 管理各個應用程序生命週期並提供常用的導航回退功能,爲所有程序的窗口提供交互的接口 |
窗口管理器(Window Manager) | 對所有開啓的窗口程序進行管理 |
內容提供器(Content Provider) | 提供一個應用程序訪問另一個應用程序數據的功能,或者實現應用程序之間的數據共享 |
視圖系統(View System) | 創建應用程序的基本組件,包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons),還有可嵌入的web瀏覽器。 |
通知管理器(Notification Manager) | 使應用程序可以在狀態欄中顯示自定義的客戶提示信息 |
包管理器(Package Manager) | 對應用程序進行管理,提供的功能諸如安裝應用程序,卸載應用程序,查詢相關權限信息等。 |
資源管理器(Resource Manager) | |
位置管理器(Location Manager) | 提供位置服務 |
電話管理器(Telephony Manager) | 管理所有的移動設備功能 |
XMPP服務 | 是Google在線即時交流軟件中一個通用的進程,提供後臺推送服務 |
我們可以稱Framework層纔是真正的java應用實現的層,在這層裏定義的API都是用Java語言編寫。但是又因爲它包含了JNI的方法,JNI用C/C++編寫接口,根據函數表查詢調用核心庫層裏的底層方法,最終訪問到Linux內核。那麼Framework層的作用就有2個。
- 用java語言編寫一些規範化的模塊封裝成框架
- 用JNI調用core lib層的本地方法,JNI的庫是在Dalvik虛擬機啓動時加載進去的,Dalvik會直接去尋址這個JNI方法,然後去調用。
3.系統運行時層
從上面的圖可以看出了,系統運行時窟分爲兩部分:分別是c/c++程序庫和Android運行時庫
a.c/c++程序庫
c/c++程序庫能被Android系統中的不同組件使用,並通過應用程序框架爲開發者提供服務,下面是主要的c/c++庫
系統類庫名稱 | 說明 |
---|---|
Surface Manager | 執行多個應用程序時,管理子系統的顯示,另外也對2D和3D圖形提供支持 |
Media Framework | 基於PacketVideoOpenCore的多媒體庫,支持多種常用的音頻和視頻格式的錄製和回放,所支持的編碼格式包括MPEG4,MP3,H264,AAC,ARM |
SQLite | 本地小型關係數據庫,Android提供了一些新的SQLite數據庫API,以替代傳統的耗費資源的JDBC API |
OpenGL | ES |
FreeType | 用於顯示位圖和矢量字體 |
WebKit | Web瀏覽器的軟件引擎 |
SGL | 底層的2D圖形引擎 |
Libc(bionic l ibc) | 繼承自BSD的C函數庫bionic libc,更適合基於嵌入式Linux的移動設備 |
SSL | 安全套接層,是爲網絡通信提供安全及數據完整性的一種安全協議 |
b.Android運行時庫
運行時庫有分爲核心庫和ART(5.0之後,ART取代Dalvik)。核心庫提供看java語言核心庫的大部分功能,是開發者可以使用java語言來編寫android應用。
和JVM相比,DVM是專門爲移動設備定製的,允許在有限的內存裏同時運行多個虛擬機的實例,併爲每一個Dalvik應用作爲一個獨立的linux進程執行。獨立的進程可以防止虛擬機崩潰時,所有程序都被關閉。
而替代DVM的ART機制和DVM不同,DVM中的應用每次運行時,字節碼都需要通過即使編譯器(JIT)轉換爲字節碼,使得應用的運行效率降低,而在ART中,系統在安裝應用時會進行一次預編譯(AOT),將字節碼預先編譯成機器碼並存儲在本地,不需要每次執行編譯
4.硬件抽象層
硬件抽象層是位於操作系統內核與硬件電路之間的接口層,其目的在於將硬件抽象化,爲了保護硬件廠商的知識產權,他隱藏了特定平臺的硬件接口細節,爲操作系統提供虛擬硬件平臺,實現硬件無關性。簡單的說,就是將控制硬件的動作放在硬件抽象層。
5.Linux內核層
Android的核心服務位於linux內核,再此基礎上添加了部分的Android專業的驅動。系統的安全性,內存管理,進程管理,網絡協議棧和驅動模型都依賴於該內核。
三.Android系統源碼目錄
1.根目錄
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文件,用來定義編譯規則 |
2.應用層部分(packages)
packages目錄 | 描述 |
---|---|
apps | 核心應用程序 |
experimental | 第三方應用程序 |
inputmethods | 輸入法目錄 |
providers | 內容提供者目錄 |
screensavers | 屏幕保護 |
services | 通信服務 |
services | 通信服務 |
wallpapers | 牆紙 |
3.應用框架層部分
應用框架層是系統的核心部分,一方面向上提供接口給應用層調用,另一方面向下與C/C++程序庫以及硬件抽象層等進行銜接。 應用框架層的主要實現代碼在/frameworks/base和/frameworks/av目錄下。
/frameworks/base目錄結構下表
/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無線網絡 |
/frameworks/av目錄結構下表
/frameworks/av目錄 | 描述 | /frameworks/av目錄 | 描述 |
---|---|---|---|
camera | 多媒體的相機相關部分 | cmds | 命令源碼 |
drm | 數據保護 | media | 多媒體部分 |
include | 頭文件 | radio | 無線射頻部分 |
services | 服務部分 | soundtrigger | 語音識別架構 |
tools | 工具包 |
更多詳細目錄可以查看Android 8.0源碼目錄結構詳解
四.參考資料
《Android進階解密》
Android系統框架結構
Android系統架構與系統源碼目錄
Android 8.0源碼目錄結構詳解