建構 Android

請按照本頁的操作說明建構 Android。

設定建構環境

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

source build/envsetup.sh

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

選擇目標

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

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

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

============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MAIN
OUT_DIR=out
============================================

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

lunch product_name-release_config-build_variant

這個字串的組成部分如下:

  • product_name 是您要建構的產品名稱,例如 aosp_cf_x86_64_phoneaosp_husky。您的特定 product_name 可以遵循裝置專屬格式,但 Google 為其裝置使用的格式包含下列元件:

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

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

    build_variant 說明
    user 這個建構變化版本提供有限的安全存取權,適合用於正式版。
    userdebug 這個建構變化版本可協助裝置開發人員瞭解開發中版本的效能和效能。使用 userdebug 版本進行開發時,請遵循userdebug 指南
    eng 如果您不重視效能和電力,這個版本變化可縮短建構時間,最適合用於日常開發作業。

如果您在執行 lunch 時未指定任何引數,系統會提供常見目標清單。您也可以使用本頁資訊和裝置代號,將目標字串的元素拼湊在一起,自行建立目標字串。這些元素代表特定 Google 硬體。

查看目前目標

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

$ 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

排解建構錯誤 (8.0 以下版本)

如果您建構 AOSP 8 或更早版本,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
************************************************************

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

  • 您未依照「AOSP 開發設定 (2.3 - 8.0) 」一文的 JDK 部分所述,安裝正確的 JDK。
  • 路徑中顯示另一個先前安裝的 JDK。在路徑開頭加上正確的 JDK,或移除有問題的 JDK。