Android系統源碼目錄解析

前言

在之前的文章中介紹了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模塊

參考

Android 8.0.0-r4源碼目錄結構詳解

Android系統架構與系統源碼目錄

Android系統源碼篇之(一)源碼獲取、源碼目錄結構及源碼閱讀工具簡介

android framework源碼目錄介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章