前言
在之前的文章中介紹了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系統的最上層,開發者開發的應用程式以及系統內建的應用程式都是在應用層。其中目錄結構如下:
- apps:核心應用程式
- inputmethods:輸入法目錄
- providers:內容提供者目錄
- screensavers:螢幕保護
- services:通訊服務
- wallpapers:牆紙
應用框架層
應用框架層是系統的核心部分,一方面向上提供介面給應用層呼叫,另一方面向下與C/C++程式庫以及硬體抽象層等進行銜接。其中目錄結構如下:
- 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系統原始碼篇之(一)原始碼獲取、原始碼目錄結構及原始碼閱讀工具簡介
更多精彩請關注我的微信公眾號。