以基於Android7的rk3399工程為例,源碼文件如下:
安卓源碼目錄名稱
描述
abi
應用程式二進位接口
art
ART運行環境
bionic
系統C庫
bootable
bootable 啟動引導相關
build
存放系統編譯規則及generic等基礎開發包配置
cts
Android兼容性測試套件標準
dalvik
dalvik虛擬機
developers
開發者目錄
development
應用程式開發相關
device
設備相關配置
docs
參考文檔目錄
external
開源模組相關文件
frameworks
應用程式框架,Android系統核心部分,由Java和C++編寫
hardware
主要是硬體抽象層的代碼
kernel
Linux內核
libcore
核心庫相關文件
libnativehelper
動態庫,實現JNI庫的基礎
ndk
NDK相關代碼,幫助開發人員在應用程式中嵌入C/C++代碼
out
編譯輸出目錄
packages
應用程式包
pdk
Plug Development Kit 的縮寫,本地開發套件
platform_testing
平臺測試
prebuilts
x86和arm架構下預編譯的一些資源
sdk
sdk和模擬器
system
底層文件系統庫、應用和組件
toolchain
工具鏈文件
tools
工具文件
u-boot
u-boot啟動引導程序
vendor
廠商定製目錄
Makefile
全局Makefile文件,用來定義編譯規則
開發中較為常用的目錄有kernel、frameworks、packages、device、build等。
圖:安卓系統架構圖
1)應用程式層(System Apps)
應用層是一些系統應用,例如圖示上的桌面、聯繫人、電話、瀏覽器和聯繫人管理等。這些應用都是提供一些基礎功能應用。這些應用與安卓應用開發工程師使用java開發的apk並無二致。事實上整個系統從底層搭建上來的最終目的就是可以自由運行上層應用,以實現各種各樣的需求。2)應用框架層(Java API Framework)
應用框架層向它的上一層,即應用程式層提供開發應用所需要的API,應用開發人員大部分情況是在和它打交道。應用開發者在AndroidStudio創建一個應用工程時需要選擇API的版本,在工程中就可以看到所有API提供的接口。Framework所提供的主要組件如下表。名稱
含義
描述
Activity Manager
活動管理器
維護應用程式的Activity生命周期
Package Manager
包管理器
管理所有安裝在系統中的應用程式包
Location Manager
位置管理器
管理地理位置和定位
Resource Manager
資源管理器
管理應用程式使用的各種資源,如字符串、圖片、布局文件、顏色文件等。
Notification Manager
通知管理器
的管理狀態欄中顯示通
Telephony Manager
電話管理器
管理行動電話相關的功能
Window Manager
窗口管理器
管理所有開啟的窗口程序
Content Provider
內容提供器
應用程式之間共享數據的一種機制實現
3)系統庫和Android運行時(Native and Android Runtime)
Native這層是由一些本地服務和一些連結庫組成的,都是通過C和C++語言實現。
名稱
描述
SurfaceManager
圖層管理
Media Framework
媒體庫
SQLite
輕型的資料庫
OpenGL ES
3D繪圖函數庫
FreeType
字體引擎,提供了統一的接口訪問多種字體格式文件
WebKit
瀏覽器網頁排版引擎
SGL
2D圖形渲染引擎
SSL
安全套接層,為網絡通信提供安全及數據完整性的安全協議
Libc
標準C系統函庫在Linux上的實現
Android運行時(Runtime)包括核心庫(CoreLibraries)和Dalvik虛擬機(VirtualMachine)。Android5.0後,Dalvik虛擬機被ART取代。核心庫提供了Java語言的大部分功能,使得上層可以運行java語言編寫的應用。Dalvik虛擬機主要是完成對生命周期的管理、堆棧的管理、線程的管理、安全和異常的管理以及垃圾回收等重要功能。Dalvik虛擬機(DVM),是專門設置在行動裝置中運行的java虛擬機,允許在有限的內存中同時運行多個虛擬機的實例。DVM的替代者ART採用了aop技術,安裝程序時,將字節碼預先編譯成機器碼並存儲在本地,這樣應用程式可以不再次編譯後才能啟動程序。而DVM則是每次打開程序都要編譯一次程序。這樣就帶了一些優勢,如應用啟動更快、運行更快、體驗更流暢、觸感反饋更及時,但是也帶來了安裝時間和存儲空間加大的問題,但是隨著智能設備的硬體越來越富餘,這一點的越來越無關緊要,運行流暢是第一位的追求,4)硬體抽象層(HAL層)
硬體抽象層是位於作業系統內核與硬體電路之間的接口層,其目的在於將硬體抽象化。它隱藏了特定平臺的硬體接口細節,為作業系統提供虛擬硬體平臺,使其具有硬體無關性,可在多種平臺上進行移植。 通過硬體抽象層,把對硬體的支持分成了兩層,一層放在用戶空間,一層放在內核空間,其中,硬體抽象層運行在用戶空間,而Linux內核驅動程序運行在內核空間。為什麼不都放在內核空間,是因為Linux內核原始碼版權遵循GNU License,是要完全共享的。而廠商希望保留自己獨有的智慧財產權,就把一部分調試參數都放在HAL層內。
5)linux內核
Android核心系統服務依賴於Linux內核,如安全性、內存管理、進程管理、網絡協議棧和驅動模型。Linux內核也包含了所有的驅動:顯示驅動、攝像頭驅動、鍵盤驅動、WiFi驅動、Audio驅動、flash內存驅動、Binder(IPC)驅動、電源管理等等。將文章轉發和分享,將獲得由蘇嵌教育支持提供的禮包一份及學習資料一份都很實用哦!
步驟:
1、分享文章並截圖
1、關注並進入公眾號
2、回復關鍵詞「福利領取」
3、助理「蘇小嵌」將會為你安排禮品發放哦