請按照以下說明開始構建Android。
搭建環境
使用envsetup.sh
腳本初始化環境:
source build/envsetup.sh
或者
. build/envsetup.sh
有關相關命令的描述,請參見platform / build / envsetup.sh上的腳本,包括用於選擇設備目標的午餐和用於構建未捆綁應用程序(例如參考TV應用程序)的小吃。
您需要在每次repo sync
之後重新發出此命令,以獲取對該腳本的任何更改。請注意,將source
替換為.
(單個點)可節省一些字符,而縮寫形式在文檔中更常用。
envsetup.sh
腳本導入了幾個命令,這些命令使您能夠使用Android源代碼,包括本練習中使用的命令。
要查看可用命令的完整列表,請運行:
hmm
選擇目標
午餐
選擇lunch
搭配的目標。 lunch product_name - build_variant
選擇product_name作為要構建的產品,選擇build_variant作為要構建的變體,並將這些選擇存儲在環境中,以供後續調用m
和其他類似命令讀取。
確切的配置可以作為參數傳遞。例如,以下命令引用了模擬器的完整版本,並啟用了所有調試功能:
lunch aosp_arm-eng
如果不帶任何參數運行, lunch
會提示您從菜單中選擇一個目標。有關所有現有設備的構建配置,請參閱選擇設備構建。
所有構建目標均採用BUILD-BUILDTYPE
的形式,其中BUILD
是引用特定功能組合的代號。 BUILDTYPE
是下列之一。
建造類型 | 使用 |
---|---|
用戶 | 訪問受限;適合生產 |
用戶調試 | 與用戶類似,但具有root訪問和調試功能;調試首選 |
eng | 使用其他調試工具進行開發配置 |
userdebug版本的行為應與用戶版本相同,並具有啟用通常會破壞平台安全模型的其他調試功能。這使用戶調試程序具有更好的診斷功能,可以很好地進行用戶測試。使用userdebug構建進行開發時,請遵循userdebug準則。
eng版本優先考慮在平台上工作的工程師的工程效率。 eng版本會關閉用於提供良好用戶體驗的各種優化。否則,eng版本的行為與用戶和userdebug版本的行為類似,因此設備開發人員可以查看代碼在這些環境中的行為。
有關在實際硬件上構建和運行的更多信息,請參閱閃存設備。
小吃
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版本
如果你正在試圖建立一個版本的Android這是您的Java的版本不一致, 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 ************************************************************
以下是可能的原因和解決方案:
不區分大小寫的文件系統
如果要在macOS上的HFS文件系統上構建,則可能會遇到諸如以下的錯誤:
************************************************************ You are building on a case-insensitive filesystem. Please move your source tree to a case-sensitive filesystem. ************************************************************
按照創建區分大小寫的磁盤映像中的說明進行操作。
沒有USB權限
在大多數Linux系統上,默認情況下,非特權用戶無法訪問USB端口。如果看到拒絕權限錯誤,請按照配置USB訪問中的說明進行操作。
如果設置了這些規則後, ADB已經在運行並且無法連接到設備,則可以使用adb kill-server
殺死它。該命令使ADB以新配置重新啟動。