當您已經建立好編譯的系統、第一次成功地抓了程式碼以及設定好程式碼,您就可以編譯 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
- 決定要用哪個 Gaia 語系檔。這邊我們用
locales/languages_dev.json
和locales/languages_all.json
當做我們 Gaia 的語系檔。 - Clone the appropriate locales
- 從 https://hg.mozilla.org/gaia-l10n 複製適當的語系到目錄下;
這裡我們放於 gaia-l10n/
下。接著您會需要將列於語系檔之內的美個語系的倉儲(repo)都複製下來。 - 您需要將上面步驟二目錄的絕對路徑設定在
LOCALE_BASEDIR
環境變數中。也要把步驟一中檔案的絕對路徑設定在LOCALES_FILE
環境變數中。
如例:
export LOCALE_BASEDIR=$PWD/gaia-l10n export LOCALES_FILE=$PWD/gecko/gaia/shared/resources/languages-dev.json
Gecko
- 決定要用哪個 Gecko 語系檔。這邊我們用 b2g/locales/all-locales 當做我們的 Gecko 語系檔。
- 複製適當的語系到目錄下;像是
gecko-l10n/
。- mozilla-central 要用 https://hg.mozilla.org/l10n-central/
- mozilla-aurora 要用 https://hg.mozilla.org/releases/l10n/mozilla-aurora/
- mozilla-beta 或 mozilla-b2g18 則是 https://hg.mozilla.org/releases/l10n/mozilla-beta/
- 複製 compare-locales.
-
將步驟二目錄的絕對路徑設定在
L10NBASEDIR
環境變數中。將步驟一中的語系以空白分隔方式設定在MOZ_CHROME_MULTILOCALE
環境變數中。 -
將
如例: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 是給模擬器還是給實體手機;細節請參考下列文章: