前言
在之前的文章中介紹了Android系統源碼的下載,這篇文章簡單介紹一下源碼結構,並結合Android系統結構,熟悉一下源碼工程。
閱讀工具
關於閱讀源碼的工具,這裏使用的是visual studio code,但是visual studio code本身不支持java和c++的相關提示,所以你必須安裝java和c的拓展插件,幫助你更好的閱讀代碼。
源碼結構
各個版本的源碼目錄結構基本上是大同小異,編譯後的目錄中會多一個out文件夾,裏面用來存儲編譯後的文件。這裏我下載的源碼版本是9.0的,如果你不知道你下載的源碼版本的話,可以打開build->core->version_defaults.md中找到PLATFORM_SDK_VERSION字段,PLATFORM_SDK_VERSION:=28就是Android源碼的版本。Android源碼目錄結構如下:
- art:Android Runtime,一種App運行模式,區別於傳統的Dalvik虛擬機,旨在提高Android系統的流暢性
- bionic:基礎C庫源代碼,Android改造的C/C++庫
- bootable:Android程序啓動導引,適合各種bootloader的通用代碼,包括一個recovery目錄
- build:存放系統編譯規則及generic等基礎開發包配置
- compatibility:Android兼容性計劃
- cts: Android兼容性測試套件標準
- dalvik:Android Dalvik虛擬機相關內容
- developers:Android開發者參考文檔
- development: Android應用開發基礎設施相關
- device:Android支持的各種設備及相關配置
- external:Android中使用的外部開源庫
- frameworks:應用程序框架,Android系統核心部分,由Java和C++編寫
- hardware:硬件適配接口
- kernel:Linux Kernel,不過Android默認不提供,需要單獨下載,只有一個tests目錄
- libcore:Android Java核心類庫
- libnativehelper:Android動態庫,實現JNI庫的基礎
- packages:應用程序包
- pdk:Plug Development Kit 的縮寫,本地開發套件
- platform_testing:Android平臺測試程序
- prebuilts:x86和arm架構下預編譯的一些資源
- sdk:Android的Java層sdk
- system:Android底層文件系統庫、應用和組件
- test:Android Vendor測試框架
- toolchain:Android工具鏈文件
- tools:Android工具文件
- Android.bp:Android7.0開始代替Android.mk文件,它是告訴ndk將jni代碼編譯成動態庫的一個腳本
- Makefile:全局Makefile文件,用來定義編譯規則
Android系統結構與源碼的對應關係
在之前的文章中介紹了一下Android系統架構,對於Android系統架構每一層,Android源碼結構中都有相關目錄與之對應。下圖展示了在Android源碼一級目錄中,各框架層和部分目錄的對應關係:
系統架構
對應關係
對於Android開發者而言,學習源碼有助於幫助我們更好的理解Android,爲此我們一般學習Framework層的代碼。接下來介紹一下應用層、應用框架層相關目錄結構。
應用層
應用層位於整個Android系統的最上層,開發者開發的應用程序以及系統內置的應用程序都是在應用層。其中目錄結構如下:
!()[https://ws3.sinaimg.cn/large/...]
- apps:核心應用程序
- inputmethods:輸入法目錄
- providers:內容提供者目錄
- screensavers:屏幕保護
- services:通信服務
- wallpapers:牆紙
應用框架層
應用框架層是系統的核心部分,一方面向上提供接口給應用層調用,另一方面向下與C/C++程序庫以及硬件抽象層等進行銜接。其中目錄結構如下:
!()[https://ws3.sinaimg.cn/large/...]
- av:多媒體框架
- base:Android源碼的主要核心目錄
- compile:編譯相關
- ex:文件解析器
- hardware:硬件適配接口
- layoutlib:佈局相關
- minikin:Android原生字體,連體字效果
- ml:機器學習
- multidex:多dex加載器
- native:native實現
- opt:一些軟件
- rs:Render Script,可創建3D接口
- support:framework支持文件
- wilhelm:基於Khronos的OpenSL ES/OpenMAX AL的audio/multimedia實現
其中base目錄中是應用框架層的主要核心代碼,目錄結構如下:
- apct-tests:性能優化測試
- api:android應用框架層聲明類、屬性和資源
- cmds:android系統啓動時用到的commands
- core:framework的核心框架組件
- data:android下的資源(字體、聲音、視頻、軟盤等)
- docs:android項目說明
- drm:實現權限管理,數字內容解密等模塊的工作
- graphics:圖像渲染模塊
- keystore:祕鑰庫
- libs:庫信息(界面、存儲、USB)
- location:位置信息
- media:手機媒體管理(音頻、視頻等)
- native:本地方法實現(傳感器、輸入、界面、窗體)
- nfc-extras:近場通訊
- obex:藍牙
- opengl:2D和3D圖形繪製
- packages:框架層的實現(界面、服務、存儲)
- proto:協議框架
- rs:資源框架
- samples:例子程序
- sax:xml解析器
- services:各種服務程序
- telecomm:telecomm通信框架
- telephony:電話通訊框架
- tests:各種測試
- vr:虛擬現實相關
- wifi:wifi模塊