建構Android

請按照以下說明開始建立 Android。

設定環境

使用envsetup.sh腳本初始化環境:

source build/envsetup.sh

或者

. build/envsetup.sh

有關相關命令的說明,請參閱platform/build/envsetup.sh中的腳本,包括用於選擇設備目標的午餐和用於構建非捆綁應用程式(例如參考電視應用程式)的小吃

您需要在每次repo sync後重新發出此命令,以取得對該腳本的任何變更。請注意,將source替換為. (一個點)可以節省一些字符,縮寫形式在文件中更常用。

envsetup.sh腳本匯入多個命令,使您能夠使用 Android 原始程式碼,包括本練習中使用的命令。

若要查看可用命令的完整列表,請執行:

hmm

選擇目標

午餐

選擇lunch時要設定的目標。 lunch product_name - build_variant選擇product_name作為要建置的產品,選擇build_variant作為要建置的變體,並將這些選擇儲存在環境中,以便在後續呼叫m和其他類似指令時讀取。

確切的配置可以作為參數傳遞。例如,以下命令指的是模擬器的完整構建,並啟用了所有調試:

lunch aosp_arm-eng

如果不帶參數運行, lunch會提示您從選單中選擇一個目標,但請注意,選單並不包含所有可能性。請參閱選擇設備版本以取得 AOSP 支援的所有設備的建置配置,或與您團隊中的人員討論適合您正在使用的設備的正確午餐。

所有建造目標均採用BUILD-BUILDTYPE形式,其中BUILD是指特定功能組合的代號。 BUILDTYPE是以下之一。

建置類型使用
使用者存取權限有限;適合生產
用戶偵錯與使用者類似,但具有 root 存取權限和調試能力;非常接近生產性能
英語具有更快建置時間的開發配置;最適合日常開發

userdebug建置的行為應與user建置相同,並且能夠啟用通常違反平台安全模型的額外偵錯。這使得userdebug建置有利於了解該版本所使用的效能和功能。使用userdebug版本進行開發時,請遵循userdebug 指南

eng構建優先考慮在平台上工作的工程師的工程生產力。 eng建置關閉了用於最大化運行時效能的各種最佳化。除此之外, eng建置與useruserdebug建置非常相似,以便裝置開發人員可以了解程式碼在這些環境中的行為。

要查看當前的午餐設置,請執行以下命令:

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

有關在實際硬體上建置和運行的更多信息,請參閱閃爍設備

小吃

tapas命令配置非捆綁應用程式的建置。它選擇由 Android 建置系統建置的各個應用程式。與lunch不同, tapas不要求為設備建立圖像。

執行tapas help以取得有關該命令的更多資訊。

建構程式碼

本節是一個快速摘要,以確保設定完成。

m建構一切。 m可以使用-jN參數處理並行任務。如果您不提供-j參數,建置系統會自動選擇它認為最適合您的系統的平行任務計數。

m

如上所述,您可以透過在m命令列中列出特定模組的名稱來建立特定模組,而不是完整的裝置映像。此外, m也提供了一些用於特殊目的的偽目標。一些例子是:

  • droid - m droid是正常版本。該目標位於此處是因為預設目標需要名稱。
  • all - m all構建m droid所做的所有內容,以及沒有droid標籤的所有內容。建置伺服器運行此命令以確保樹中包含Android.mk檔案的所有內容均已建置。
  • m - 從樹的頂部運行建置。這很有用,因為您可以從子目錄中執行make 。如果您設定了TOP環境變量,它將使用它。如果沒有,它會從目前目錄尋找樹,嘗試找到樹的頂部。您可以透過執行不含參數的m來建立整個原始碼樹,也可以透過指定目標名稱來建置特定目標。
  • mma - 建立目前目錄中的所有模組及其相依性。
  • mmma - 建置提供的目錄中的所有模組及其相依性。
  • croot - cd到樹的頂部。
  • clean - m clean刪除此配置的所有輸出和中間檔案。這與rm -rf out/相同。

執行m help查看m提供的其他偽目標。

運行建置

您可以在模擬器上運行您的構建,也可以在設備上刷新它。因為您已經透過lunch選擇了建置目標,所以它不太可能在與建置目標不同的目標上運行。

使用 fastboot 進行閃爍

要刷新設備,請使用fastboot ,成功建置後它應該包含在您的路徑中。有關說明,請參閱閃爍設備

模擬 Android 裝置

模擬器會透過建置過程自動新增到您的路徑中。若要運行模擬器,請鍵入:

emulator

了解建構指紋

要追蹤和報告與特定 Android 建置相關的問題,了解建立指紋非常重要。版本指紋是一個唯一的、人類可讀的字串,其中包含發布給每個版本的製造商資訊。有關精確語法,請參閱 Android 相容性定義文件 (CDD) 的建置參數部分中的FINGERPRINT描述。

建立指紋代表特定的 Android 實作和修訂。這個獨特的密鑰允許應用程式開發人員和其他人報告特定韌體版本的問題。請參閱報告 Android 問題報告流程的錯誤

建立指紋封​​裝了所有 Android 實作細節:

  • API:Android 和本機,以及軟 API 行為
  • 核心API和一些系統UI行為
  • CDD 中定義的兼容性和安全性要求
  • 應用程式用於滿足預期要求的目標設備的產品規格和使用功能設置
  • 硬體和軟體組件的實現

有關完整詳細信息,請參閱CDD ;有關建立全新 Android 裝置的說明,請參閱新增新裝置

排除常見建置錯誤

Java 版本錯誤

如果您嘗試建立與您的 Java 版本不一致的 Android 版本, make使用下列訊息中止:

************************************************************
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 要求中指定的方式安裝正確的 JDK。確保您已按照設定環境選擇目標中的步驟進行操作。
  • 先前安裝的另一個 JDK 出現在您的路徑中。將正確的 JDK 新增到路徑的開頭或刪除有問題的 JDK。

沒有USB權限

預設情況下,在大多數 Linux 系統上,非特權使用者無法存取 USB 連接埠。如果您看到權限被拒絕錯誤,請按照配置 USB 存取中的說明進行操作。

如果ADB已經在運行並且在設定這些規則後無法連接到設備,您可以使用adb kill-server終止它。該命令會導致 ADB 使用新配置重新啟動。