2021-05-12 14:32:11
理解 Android Build 系統
Android Build 系統是用來編譯 Android 系統,Android SDK 以及相關文件的一套框架。眾所周知,Android 是一個開源的作業系統。Android 的原始碼中包含了許許多多的模組。 不同產商的不同裝置對於 Android 系統的客製化都是不一樣的。如何將這些模組統一管理起來,如何能夠在不同的作業系統上進行編譯,如何在編譯時能夠支援面向不同的硬體裝置,不同的編譯型別,且還要提供面向各個產商的客製化擴充套件,是非常有難度的。 但 Android Build 系統很好的解決了這些問題,這裡面有很多值得我們開發人員學習的地方。對於 Android 平台開發人員來說,本文可以幫助你熟悉你每天接觸到的構建環境。對於其他開發人員來說,本文可以作為一個 GNU Make 的使用案例,學習這些成功案例,可以提升我們的開發經驗。
前言
Android Build 系統是 Android 原始碼的一部分。關於如何獲取 Android 原始碼,請參照 Android Source 官方網站:
http://source.android.com/source/downloading.html。
Android Build 系統用來編譯 Android 系統,Android SDK 以及相關文件。該系統主要由 Make 檔案,Shell 指令碼以及 Python 指令碼組成,其中最主要的是 Make 檔案。
眾所周知,Android 是一個開源的作業系統。Android 的原始碼中包含了大量的開源專案以及許多的模組。不同產商的不同裝置對於 Android 系統的客製化都是不一樣的。
如何將這些專案和模組的編譯統一管理起來,如何能夠在不同的作業系統上進行編譯,如何在編譯時能夠支援面向不同的硬體裝置,不同的編譯型別,且還要提供面向各個產商的客製化擴充套件,是非常有難度的。
但 Android Build 系統很好的解決了這些問題,這裡面有很多值得我們開發人員學習的地方。
對於 Android 平台開發人員來說,本文可以幫助你熟悉你每天接觸到的構建環境。
對於其他開發人員來說,本文可以作為一個 GNU Make 的使用案例,學習這些成功案例,可以提升我們的開發經驗。
概述
Build 系統中最主要的處理邏輯都在 Make 檔案中,而其他的指令碼檔案只是起到一些輔助作用,由於篇幅所限,本文只探討 Make 檔案中的內容。
整個 Build 系統中的 Make 檔案可以分為三類:
第一類是 Build 系統核心檔案,此類檔案定義了整個 Build 系統的框架,而其他所有 Make 檔案都是在這個框架的基礎上編寫出來的。
圖 1 是 Android 原始碼樹的目錄結構,Build 系統核心檔案全部位於 /build/core(本文所提到的所有路徑都是以 Android 原始碼樹作為背景的,“/”指的是原始碼樹的根目錄,與檔案系統無關)目錄下。
圖 1. Android 原始碼樹的目錄結構
第二類是針對某個產品(一個產品可能是某個型號的手機或者平板電腦)的 Make 檔案,這些檔案通常位於 device 目錄下,該目錄下又以公司名以及產品名分為兩級目錄,圖 2 是 device 目錄下子目錄的結構。對於一個產品的定義通常需要一組檔案,這些檔案共同構成了對於這個產品的定義。例如,/device/sony/it26 目錄下的檔案共同構成了對於 Sony LT26 型號手機的定義。
圖 2. device 目錄下子目錄的結構
第三類是針對某個模組(關於模組後文會詳細討論)的 Make 檔案。整個系統中,包含了大量的模組,每個模組都有一個專門的 Make 檔案,這類檔案的名稱統一為“Android.mk”,該檔案中定義了如何編譯當前模組。Build 系統會在整個原始碼樹中掃描名稱為“Android.mk”的檔案並根據其中的內容執行模組的編譯。
相關文章