Android系統原始碼目錄解析

codeteenager發表於2019-03-14

前言

在之前的文章中介紹了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原始碼目錄結構如下:

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系統原始碼目錄解析

對於Android開發者而言,學習原始碼有助於幫助我們更好的理解Android,為此我們一般學習Framework層的程式碼。接下來介紹一下應用層、應用框架層相關目錄結構。

應用層

應用層位於整個Android系統的最上層,開發者開發的應用程式以及系統內建的應用程式都是在應用層。其中目錄結構如下:

Android系統原始碼目錄解析

  • apps:核心應用程式
  • inputmethods:輸入法目錄
  • providers:內容提供者目錄
  • screensavers:螢幕保護
  • services:通訊服務
  • wallpapers:牆紙

應用框架層

應用框架層是系統的核心部分,一方面向上提供介面給應用層呼叫,另一方面向下與C/C++程式庫以及硬體抽象層等進行銜接。其中目錄結構如下:

Android系統原始碼目錄解析

  • 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原始碼目錄介紹

更多精彩請關注我的微信公眾號。

Android系統原始碼目錄解析

相關文章