Android系統架構與系統原始碼目錄
前言
技術部落格終於可以恢復正常的更新速度了,原因是我編寫的進階書籍的初稿已經完成,竊以為它將會是Android應用書籍中最有深度的一本,可以說是《Android開發藝術探索》的姊妹篇。在這本書的最後一章我會分析Android底層原始碼,但是畢竟是一本Android應用開發的書,對於底層原始碼閱讀也只能帶大家入個門。因此,在部落格中我會新開一個“系統原始碼解析”的系列,該系列的開篇就是本篇文章。
1.Android系統架構
Android系統架構分為五層,從上到下依次是應用層、應用框架層、系統執行庫層、硬體抽象層和Linux核心層。
應用層
系統內建的應用程式以及非系統級的應用程式都是屬於應用層。負責與使用者進行直接互動,通常都是用Java進行開發的。
應用框架層(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(檢視系統) | 構建應用程式的基本元件 |
表1
系統執行庫層(Native)
系統執行庫層分為兩部分,分別是C/C++程式庫和Android執行時庫。下面分別來介紹它們。
1.C/C++程式庫
名稱 | 功能描述 |
---|---|
OpenGL ES | 3D繪圖函式庫 |
Libc | 從BSD繼承來的標準C系統函式庫,專門為基於嵌入式Linux的裝置定製 |
Media Framework | 多媒體庫,支援多種常用的音訊、視訊格式錄製和回放。 |
SQLite | 輕型的關係型資料庫引擎 |
SGL | 底層的2D圖形渲染引擎 |
SSL | 安全套接層,是為網路通訊提供安全及資料完整性的一種安全協議 |
FreeType | 可移植的字型引擎,它提供統一的介面來訪問多種字型格式檔案 |
表2
2.Android執行時庫
執行時庫又分為核心庫和ART(5.0系統之後,Dalvik
虛擬機器被ART
取代)。核心庫提供了Java語言核心庫的大多數功能,這樣開發者可以使用Java語言來編寫Android應用。相較於JVM
,Dalvik
虛擬機器是專門為移動裝置定製的,允許在有限的記憶體中同時執行多個虛擬機器的例項,並且每一個Dalvik
應用作為一個獨立的Linux 程式執行。獨立的程式可以防止在虛擬機器崩潰的時候所有程式都被關閉。而替代Dalvik虛擬機器的ART 的機制與Dalvik 不同。在Dalvik下,應用每次執行的時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的執行效率,而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。
硬體抽象層(HAL)
硬體抽象層是位於作業系統核心與硬體電路之間的介面層,其目的在於將硬體抽象化,為了保護硬體廠商的智慧財產權,它隱藏了特定平臺的硬體介面細節,為作業系統提供虛擬硬體平臺,使其具有硬體無關性,可在多種平臺上進行移植。 從軟硬體測試的角度來看,軟硬體的測試工作都可分別基於硬體抽象層來完成,使得軟硬體測試工作的並行進行成為可能。通俗來講,就是將控制硬體的動作放在硬體抽象層中。
Linux核心層
Android 的核心繫統服務基於Linux 核心,在此基礎上新增了部分Android專用的驅動。系統的安全性、記憶體管理、程式管理、網路協議棧和驅動模型等都依賴於該核心。
Android系統的五層架構就講到這,瞭解以上的知識對以後分析系統原始碼有很大的幫助。
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
從表3可以看出,系統原始碼分類清晰,並且內容龐大且複雜。接下來分析packages
中的內容,也就是應用層部分。
應用層部分
應用層位於整個Android系統的最上層,開發者開發的應用程式以及系統內建的應用程式都是在應用層。原始碼根目錄中的packages目錄對應著系統應用層。它的目錄結構如表4所示。
packages目錄 | 描述 |
---|---|
apps | 核心應用程式 |
experimental | 第三方應用程式 |
inputmethods | 輸入法目錄 |
providers | 內容提供者目錄 |
screensavers | 螢幕保護 |
services | 通訊服務 |
wallpapers | 牆紙 |
表4
從目錄結構可以發現,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無線網路 |
表5
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++實現 |
表6
講完 C/C++程式庫部分,剩下的部分我們在表3已經給出:Android執行時庫的程式碼放在art/
目錄中。硬體抽象層的程式碼在hardware/
目錄中,這一部分是手機廠商改動最大的一部分,根據手機終端所採用的硬體平臺會有不同的實現。
相關文章
- Android系統原始碼目錄解析Android原始碼
- Android系統架構-----Android的系統體系架構Android架構
- 系統目錄結構
- Ubuntu系統目錄結構Ubuntu
- 【Android系統】Android系統架構簡介Android架構
- 超市管理系統原始碼 超市進銷存管理系統原始碼 (CS架構)原始碼架構
- 線上客服系統原始碼/IM原始碼框架架構原始碼框架架構
- Android系統架構圖Android架構
- Android的系統架構Android架構
- Android-系統架構Android架構
- Android 系統原始碼-1:Android 系統啟動流程原始碼分析Android原始碼
- 排隊免單系統原始碼架構分析原始碼架構
- MAC OS X系統目錄結構Mac
- iOS系統目錄:iOS
- PG系統目錄
- Linux檔案系統目錄結構Linux
- Linux 系統目錄Linux
- Android系統原始碼分析-JNIAndroid原始碼
- 讀解Android 系統原始碼?Android原始碼
- 網站的系統架構的摘錄網站架構
- Java高精度定位系統原始碼 UWB定位系統原始碼 定位系統原始碼Java原始碼
- Hbase 系統架構與資料結構架構資料結構
- Android原始碼目錄結構詳解Android原始碼
- Linux系統目錄結構和ls命令Linux
- 教你玩轉Linux—系統目錄結構Linux
- Linux 檔案系統的目錄結構Linux
- 廣告系統架構架構
- 安卓系統架構安卓架構
- 系統架構師架構
- Android 儲存系統之架構篇Android架構
- 系統架構師大會:中國系統架構師的盛宴架構
- 直播系統原始碼,ios系統開發的基本架構原始碼iOS架構
- Android系統原始碼分析-事件收集Android原始碼事件
- Android系統原始碼分析--ContextAndroid原始碼Context
- 語音直播系統原始碼與視訊直播系統原始碼哪些區別原始碼
- Linux學習(三)之系統目錄結構Linux
- 開箱即用!Android四款系統架構工具Android架構
- FACEBOOK 的系統架構架構