建置 Boot to Gecko

由 3 位貢獻者:

當您已經建立好編譯的系統、第一次成功地抓了程式碼以及設定好程式碼,您就可以編譯 Boot to Gecko。

更新程式碼

如果您不是第一次編譯B2G,您需要在編譯之前先抓取最新的程式碼。您可以執行以下指令來更新B2G工具及相依套件:

git pull
./repo sync

您可以藉由指定名稱來更新某部分的倉儲:

./repo sync gaia

repo指令也有其他您可能會有興趣的選項可用;您可執行 repo help 指令來獲取有用的資訊。

編譯

注意:在編譯前,您可以設置一個 .userconfig 檔案來訂製這次編譯。使用 .userconfig 檔案來客製 有更多詳細資訊。

執行 build.sh 就可以開始編譯 Boot to Gecko:

cd B2G
./build.sh

是時候該再喝杯咖啡,或小睡一下了(尤其是第一次編譯)。

專程編譯某些模組

如果您只想要編譯某個模組,例如 Gecko,您可以指定名稱:

./build.sh gecko

您也可以用這個指令來取得您編譯的模組的列表:

./build.sh modules

設定要使用的處理器數目

B2G 的編譯 scripts 預設使用系統的 cores 數量加二作為平行工作的數量。您可以再執行 build.sh 的時候指定 -j 參數來改變這個預設值。如果您想要把編譯工作丟到背景、並且減輕 CPU 負載來做其他事情的話,這對您就很方便。當您面臨到編譯問題時,如果您一次就只執行一個編譯工作的話、設定處理器數目也可以讓您更容易讀取編譯的錯誤輸出,真的很方便。

舉例來說,設定同時只會有兩個工作來編譯:

./build.sh -j2

對於此對常見的使用案例就是防止不要平行編譯。這會讓編譯的輸出更加容易閱讀,更容易釐清編譯的問題。執行下面指令:

./build.sh -j1

多語系編譯

建立多語系的編譯版本:

Gaia

  1. 決定要用哪個 Gaia 語系檔。這邊我們用 locales/languages_dev.jsonlocales/languages_all.json 當做我們 Gaia 的語系檔。
  2. Clone the appropriate locales
  3. http://hg.mozilla.org/gaia-l10n 複製適當的語系到目錄下;這裡我們放於 gaia-l10n/ 下。接著您會需要將列於語系檔之內的美個語系的倉儲(repo)都複製下來。
  4. 您需要將上面步驟二目錄的絕對路徑設定在 LOCALE_BASEDIR 環境變數中。也要把步驟一中檔案的絕對路徑設定在 LOCALES_FILE 環境變數中。

如例:

export LOCALE_BASEDIR=$PWD/gaia-l10n
export LOCALES_FILE=$PWD/gecko/gaia/shared/resources/languages-dev.json

Gecko

  1. 決定要用哪個 Gecko 語系檔。這邊我們用 b2g/locales/all-locales 當做我們的 Gecko 語系檔。
  2. 複製適當的語系到目錄下;像是 gecko-l10n/
  3. 複製 compare-locales.
  4. 將步驟二目錄的絕對路徑設定在 L10NBASEDIR 環境變數中。將步驟一中的語系以空白分隔方式設定在 MOZ_CHROME_MULTILOCALE 環境變數中。

  5. compare-locales/scripts 目錄加入到 PATH 變數、 compare-locales/lib 加入到 PYTHONPATH 變數中.

    如例:
    export L10NBASEDIR=$PWD/gecko-l10n
    export MOZ_CHROME_MULTILOCALE="ja zh-TW"
    export PATH="$PATH:$PWD/compare-locales/scripts"
    export PYTHONPATH="$PWD/compare-locales/lib"
    

    當您完成這些設定之後,就可以執行 build.sh 了。

    看起來您也可以用 .userconfig 來做這些事情。

    當我們整理好之後,可能會修改這些指令。

已知的錯誤

  • KeyedVector.h:193:31: error: indexOfKey was not declared in this scope

當您的 gcc 版本太新的時候會出現這個錯誤。請安裝 gcc/g++/g++-multilib 4.6.x 版本.

設置您的編譯環境 有更多資訊。

社群上的提醒: 用 4.7.x 加上修改一些 B2G 程式碼可能可以 (gcc 會告訴你要改哪些地方) 但是這邊就沒人能幫你了!但是不改就不會碰到這些問題。

  • arm-linux-androideabi-g++: Internal error: Killed (program cc1plus)

如果看到這個訊息,通常是代表記憶體不夠。在執行 ./build.sh 之前請確認有足夠的記憶體,如果您的系統記憶體有4G的話,應該可以跑的很順利。

  • If you get build errors while the build system is running tests

有時候(尤其是在作業系統或是編譯工具更新後)您在編譯系統執行編譯後測試時,會碰到一些靈異現象就像下面這樣:

Generating permissions.sqlite...
test -d profile || mkdir -p profile
run-js-command  permissions
WARNING: permission unknown:offline-app
WARNING: permission unknown:indexedDB-unlimited
build/permissions.js:122: NS_ERROR_UNEXPECTED: Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIPermissionManager.add]
make[1]: *** [permissions] Error 3
make: *** [gaia/profile.tar.gz] Error 2

這種情況下試著刪除 gaia/xulrunner-sdk 目錄然後再重新抓程式碼:

rm -r gaia/xulrunner-sdk

這樣會刪掉由編譯系統自動抓取、預先編譯的 XULRunner;在下一次編譯的時候,XULRunner 會再被自動抓取一份。

接著的步驟

在編譯後,下個步驟就取決於您編譯的 Boot to Gecko 是給模擬器還是給實體手機;細節請參考下列文章:

Document Tags and Contributors

Contributors to this page: teoli, Jamin_Liu, naihsi
最近更新: teoli,
隱藏側邊欄