建構 Android

請按照本頁的指示建構 Android。

設定建構環境

在工作目錄中,找出 envsetup.sh 指令碼,設定建構環境:

source build/envsetup.sh

這個指令碼會匯入多個指令,方便您處理 Android 原始碼,包括本頁面使用的指令。如要查看指令碼來源,請參閱 platform/build/envsetup.sh。如要查看內建說明,請輸入 hmm

選擇一個目標

建構 Android 前,您必須先找出要建構的目標。目標會反映您要建構的目標廣告平台。如要識別要建構的目標,請使用 lunch 指令,後面加上代表目標的字串。例如:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

您應該會看到目標和建構環境的摘要:

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================

代表目標的字串格式如下:

lunch product_name-release_config-build_variant

這個字串的元件包括:

  • product_name 是您要建構的產品名稱,例如 aosp_cf_x86_64_only_phoneaosp_husky。你的product_name可以採用裝置專屬格式,但 Google 裝置使用的格式包含下列元件:

    • aosp 是指 Android 開放原始碼計畫。
    • 如果目標要在 Cuttlefish 模擬器中執行,可以選擇加入 cf
    • 架構和硬體代碼名稱,例如 x86_64_only_phonehusky (Pixel 8 Pro 的代碼名稱)。如需 Google 裝置的代號清單,請參閱「裝置代號」。
  • release_config 設為發布版本設定,例如名為 aosp_current 的開發發布版本設定。發布設定會識別功能啟動旗標後方的特定功能和程式碼,並為建構作業啟用或停用這些項目。如要進一步瞭解發布設定,請參閱「設定功能旗標的發布值」。

  • 字串的 build_variant 部分可以是下表中的其中一個值:

    build_variant 說明
    user 這個建構變化版本提供的安全性存取權有限,適合用於生產。
    userdebug 裝置開發人員可透過這個建構變化版本,瞭解開發中版本的效能和電力。使用 userdebug 建構版本開發時,請遵循 userdebug 指南
    eng 這個建構變化版本的建構時間較短,最適合日常開發環境 (效能和電力較不重要)。

如果執行 lunch 時未提供任何引數,lunch 會提供常見目標的清單。如要建立自訂目標字串,請將目標字串元素與硬體代號合併。如需產品代號清單,請參閱「裝置產品代號」。

查看目前目標

如要查看目前的午餐設定,請執行:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

建構程式碼

執行下列指令來建構目標。視工作站規格而定,第一次建構可能需要不到一小時,也可能需要幾小時。後續建構所需時間大幅減少。

m

建構作業的輸出內容會顯示在 $OUT_DIR 中。如果您建構不同的目標,每個目標建構作業都會顯示在 $OUT_DIR 中。

m 指令會從樹狀結構頂端建構,因此您可以在子目錄中執行 m。如果已設定 TOP 環境變數,m 指令就會使用該變數。如果未設定 TOPm 指令會從目前目錄中查閱樹狀結構,嘗試找出樹狀結構頂端。

m 指令可使用 -jN 引數處理平行工作。如果您未提供 -j 引數,建構系統會自動選取認為最適合您系統的平行工作計數。

您可以在 m 指令列中列出模組名稱,建構特定模組,而非完整的裝置映像檔。此外,m 指令還提供一些稱為「目標」的虛擬目標。舉例來說,m nothing 不會建構任何項目,但會剖析及驗證建構結構。如要查看有效目標清單,請輸入 m help

排解建構錯誤

本節說明如何處理建構錯誤。

唯讀檔案系統錯誤 (Android 17 以上版本)

建構期間,AOSP 來源樹狀結構為唯讀狀態。如果您執行的建構作業嘗試在產品設定或建構作業的任何其他部分修改來源樹狀結構,建構作業可能會失敗,並回報唯讀檔案系統錯誤。您可以使用這些選項暫時將來源樹狀結構變更為讀寫模式:

  • 如要在建構期間將整個來源樹狀結構變更為讀寫模式,請在建構環境中新增 BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true

  • 如要在建構期間將樹狀結構的一部分變更為讀寫,請使用 BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..."。路徑應為允許寫入的目錄路徑,且相對於工作區頂端。

Java 版本錯誤 (Android 8.0 以下版本)

如果您建構 Android 8.0 (API 級別 26) 以下版本,m 遇到 Java 版本問題時可能會中止。舉例來說,你可能會收到以下訊息:

************************************************************
You are attempting to build with the incorrect version of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
https://source.android.com/source/initializing.html
************************************************************

以下是可能的原因和解決方法:

  • 未安裝正確的 JDK。詳情請參閱「設定 AOSP 開發環境 (2.3-8.0)」。
  • 路徑中出現另一個先前安裝的 JDK。在路徑開頭加上正確的 JDK,或移除有問題的 JDK。