android編譯準備工作

原文鏈接:https://source.android.com/setup/building.html

編譯準備工作
以下關於編譯 Android 源代碼樹的說明適用於所有分支,包括 master。編譯命令的基本順序如下:

下載專有二進制加粗樣式文件

您不能只通過純源代碼來使用 AOSP,還需要運行與硬件相關的其他專有庫(例如用於硬件圖形加速的專有庫)。如需其他資源的下載鏈接和設備二進制文件,請參閱以下各部分。

部分設備會將這些專有二進制文件打包到其 /vendor 分區。

下載專有二進制文件

對於運行帶標記的 AOSP 版本分支的受支持設備,您可以從 Google 的驅動程序下載相關的官方二進制文件。有了這些二進制文件,您將有權使用那些採用非開源代碼的其他硬件功能。要編譯 AOSP 的 master 分支,請使用二進制文件預覽。在針對某種設備編譯 master 分支時,請使用適用於最新編號版本的二進制文件或具有最新日期的二進制文件。

解壓專有二進制文件

每組二進制文件都是壓縮包中的一個自解壓腳本。解壓每個壓縮包,從源代碼樹的根目錄運行附帶的自解壓腳本,然後確認您同意附帶的許可協議的條款。二進制文件及其對應的 Makefile 將會安裝在源代碼樹的 vendor/ 層次結構中。

清理

爲了確保新安裝的二進制文件在解壓後會被適當考慮在內,請使用以下命令刪除所有以前編譯操作的已有輸出:

make clobber

設置環境

使用 envsetup.sh 腳本初始化環境。請注意,將 source 替換成 .(一個點)可以省去一些字符,這種簡寫形式在文檔中更爲常用。

source build/envsetup.sh

. build/envsetup.sh

選擇目標

使用 lunch 選擇要編譯的目標。確切的配置可作爲參數進行傳遞。例如以下命令:

lunch aosp_arm-eng

該命令表示針對模擬器進行完整編譯,並且所有調試功能均處於啓用狀態。

如果您沒有提供任何參數就運行命令,lunch 將提示您從菜單中選擇一個目標。

所有編譯目標都採用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能組合的代號。

BUILDTYPE 是以下類型之一:

編譯類型 使用情況

user	權限受限;適用於生產環境
userdebug	與“user”類似,但具有 root 權限和可調試性;是進行調試時的首選編譯類型
eng	具有額外調試工具的開發配置

要詳細瞭解如何針對實際硬件進行編譯以及如何在實際硬件上運行編譯系統,請參閱運行編譯系統。

編譯代碼

請注意,本部分只是一個摘要,用於確保設置已完成。如需關於編譯 Android 的詳細說明,請參閱運行編譯系統。

您可以使用 make 編譯任何代碼。GNU Make 可以藉助 -jN 參數處理並行任務,通常使用的任務數 N 介於編譯時所用計算機上硬件線程數的 1-2 倍之間。例如,在一臺雙核 E5520 計算機(2 個 CPU,每個 CPU 4 個內核,每個內核 2 個線程)上,要實現最快的編譯速度,可以使用介於 make -j16 到 make -j32 之間的命令。

make -j4

開始運行!

您可以在模擬器上運行自己的版本,也可以將其刷到設備上。請注意,因爲您之前已使用 lunch 選擇編譯目標,因此很可能無法在編譯目標之外的目標上運行您的編譯系統。

注意:請記得下載專有二進制文件,否則您的編譯系統將無法在目標硬件上成功啓動。如果您在此時下載二進制 Blob,則需要將其解壓、make clobber 並重新編譯。

使用 fastboot 刷機

要對設備進行刷機,您需要使用 fastboot(編譯成功後,它應該會包含在您的路徑中)。如需相關說明,請參閱對設備進行刷機。

模擬 Android 設備

編譯流程會自動將模擬器添加到您的路徑中。要運行模擬器,請輸入以下命令:

emulator

排查常見編譯錯誤

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
************************************************************

這可能是由以下原因引起的:

  • 未能安裝 JDK 要求中指定的正確 JDK。
  • 之前安裝的另一個 JDK 出現在您的路徑中。將正確的 JDK
    附加到路徑開頭,或者移除有問題的 JDK。

Python 版本 3

Repo 是基於 Python 2.x 中的特定功能構建的,但遺憾的是與 Python 3 不兼容。要使用 Repo,請安裝 Python 2.x:

apt-get install python

不區分大小寫的文件系統

您在 Mac OS 中的 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 採用新的配置重啓。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章