Andriod系統框架

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源碼目錄結構詳解

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