再如何不可思議的事情,一旦做的次數多了,便會習慣直至麻木甚至開始樂在其中。 --貓膩 《將夜》
Android做的久了,有些東西自然而然就要了解 一些。對於Android系統源碼來說,我們可能不需要改動它,但讀懂它還是有必要的。
這裏先放上幾個查看源碼的地址
AOSPXRef 這個地址是阿里雲的,感覺起來會比較快,而且已經更新到10.0了
AndroidXRef 這個有時比較慢,目前爲止只更新到9.0
下面的分析基於系統 Q - 10.0.0_r2
整個目錄如下所示:
-
art:Android Runtime,一種App運行模式,區別於傳統的Dalvik虛擬機,旨在提高Android系統的流暢性
-
bionic:基礎C庫源代碼,Android改造的C/C++庫
-
bootable:Android程序啓動導引,適合各種bootloader的通用代碼,包括一個recovery目錄
-
build:存放系統編譯規則及generic等基礎開發包配置
-
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工具文件
目錄解析
1. build
存放系統編譯規則及generic等基礎開發包配置,我們如果需要進行系統開發或者只是想改動系統源碼然後編譯一下系統,是需要對這塊瞭解的。目錄如下:
簡單介紹如下:
目錄名 | 介紹 |
---|---|
blueprint | 輸入爲.bp文件。輸出爲.ninja文件 |
core | 核心的編譯規則makefile |
kati | kati is an experimental GNU make clone |
make | 以前的老的make系統 |
soong | 新的Build系統 |
target | AOSP自帶的Target(模擬器)的一些makefile |
tools | 編譯中使用的shell及python寫的工具腳本 |
build/envsetup.sh | 編譯初始化腳本 |
Android.bp:Android7.0開始代替Android.mk文件,它是告訴ndk將jni代碼編譯成動態庫的一個腳本
Makefile:全局Makefile文件,用來定義編譯規則
2. framework
Android核心應用都在這個framework中,我們經常說的framework層的開發就是基於這塊,千萬別覺得高大上,其實和我們平時寫程序差不多,我們常說的分析系統源碼,其實也只是分析到這一層而已。我們先看下這個目錄下有啥:
簡單介紹如下
目錄名 | 介紹 |
---|---|
framework/av/ | 多媒體相關的native層源碼目錄 |
framework/base/ | 一些基礎庫代碼,各種解析類、工具類都在這個裏面 |
framework/compile/ | 編譯相關的內容 |
framework/ex/ | ex文件解析器 |
framework/minikin/ | Android原生字體 |
framework/ml/ | 機器學習 |
framework/multidex/ | multi dex Loader |
framework/native/ | power、surface、input、binder等服務的native層實現源碼目錄 |
framework/opt/ | 一些基礎軟件,如:日曆、網絡、藍牙 |
framework/rs/ | Render Script 可創建3D接口 |
framework/wilhelm/ | OpenSL ES/OpenMAX AL的audio |
**