前言
在以前的文章中介紹了Android系統源碼的下載,這篇文章簡單介紹一下源碼結構,並結合Android系統結構,熟悉一下源碼工程。html
閱讀工具
關於閱讀源碼的工具,這裏使用的是visual studio code,可是visual studio code自己不支持java和c++的相關提示,因此你必須安裝java和c的拓展插件,幫助你更好的閱讀代碼。java
源碼結構
各個版本的源碼目錄結構基本上是大同小異,編譯後的目錄中會多一個out文件夾,裏面用來存儲編譯後的文件。這裏我下載的源碼版本是9.0的,若是你不知道你下載的源碼版本的話,能夠打開build->core->version_defaults.md中找到PLATFORM_SDK_VERSION字段,PLATFORM_SDK_VERSION:=28就是Android源碼的版本。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源碼一級目錄中,各框架層和部分目錄的對應關係:c++
系統架構
api
對應關係
性能優化
對於Android開發者而言,學習源碼有助於幫助咱們更好的理解Android,爲此咱們通常學習Framework層的代碼。接下來介紹一下應用層、應用框架層相關目錄結構。微信
應用層
應用層位於整個Android系統的最上層,開發者開發的應用程序以及系統內置的應用程序都是在應用層。其中目錄結構以下:
架構
- apps:核心應用程序
- inputmethods:輸入法目錄
- providers:內容提供者目錄
- screensavers:屏幕保護
- services:通訊服務
- wallpapers:牆紙
應用框架層
應用框架層是系統的核心部分,一方面向上提供接口給應用層調用,另外一方面向下與C/C++程序庫以及硬件抽象層等進行銜接。其中目錄結構以下:
app
- 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模塊
參考
Android 8.0.0-r4源碼目錄結構詳解
Android系統架構與系統源碼目錄
Android系統源碼篇之(一)源碼獲取、源碼目錄結構及源碼閱讀工具簡介
android framework源碼目錄介紹
更多精彩請關注個人微信公衆號。