Gaia Build System
(這篇部分的資訊我也寫到 MDN 上面去了。)
Gaia Build System 基本上是由 make, node.js script 跟 xpcshell script 所構成的(以前還有 Python Script 不過已經被消滅了)。前兩個大家都清楚,所以只介紹一下 xpcshell。
xpcshell 是一個放在 xulrunner 裡面的一個執行環境,它的用處跟 node.js 一樣,可以直接執行 javascript,所以可以拿它來處理一些 build system 要做的一些工作,另外 gaia 的 build system 也有使用 commonjs 的環境,所以基本上使用 xpcshell 跟用 node.js 寫東西差不多,只是可以用的 library 跟 API 不同。
當你執行 make
的時候實際上會發生的事情是 make 會去設置 xpcshell 跟 node.js 的執行環境,並且在不同的地方他們兩種執行環境,我相信 node.js 比較容易理解,但為什麼需要在 xpcshell 上面可以跑呢?因為這樣 build system 就可以在 firefox extension 上面跑,下面的影片展示了如何在 Firefox extension 裡面直接造出並且執行 Gaia。
Build process
當你執行 make
會發生的事情如下:
- Looking for .b2g.mk & local.mk
- build system 會去找 local.mk 跟 .b2g.mk 是否存在,有找到的話會引入他們
- Download xulrunner
- 因為 xpcshell scripts 全都要在 xulrunner 上面跑,所以要先下載 xulrunner
- preference.js
- 產生給 Firefox OS 用,預設的 preferences,最後的產出是 user.js,Gaia 執行的時候 gecko 會讀取這個檔案,另外環境變數(像是 DEBUG=1)會影響到這些數值。
- variant.js
- 會從 GAIA_DISTRIBUTION_DIR/variant.json 讀取客製化 gaia 所需的設定資訊,這可以拿來針對不同電信商以及區域產生不同的 app 集合,桌布以及鈴聲。
- applications-data.js
- 有些 app 會需要一些初始化的資訊如 homescreen 要如何排列 app 跟網頁瀏覽器預設的搜尋引擎,這個 script 會負責產生這些資料檔案
- app makefiles
- 如果 app 的目錄底下有 makefile 的話在這個時間點會被執行
- setup test-agent
- 設置 test-agent 是兩個 make rules "test-agent-config" 跟 "test-agent-bootstrap-apps",這兩個會針對每個 app 設定測試所需的環境。
- webapp-optimize.js
- 拿來做 minify javascript,把 l10n 的檔案集合成一個 json 以及產生預設語言的 HTML 檔案等等最佳化的一些步驟。
- webapp-zip.js
- 把每個 app 壓縮成 application.zip 並且放到 profile 目錄底下
- optimize-clean.js
- 如果針對預設語言有產生 html 檔案的話,會在這邊被刪除
- contact
- 如果 GAIA_DISTRIBUTION_DIR 裡面有預設的聯絡人資訊在這邊會被複製到 profile 目錄
- extensions
- 複製 GAIA_DIR/tools/extensions 裡面的擴充套件到 profile,不同的設定會複製不同的擴充套件。
- settings.js
- 產生給 Gaia 用預設的 settings
- create-default-data
- 把一些預設的複製到 profile 目錄底下
- additional-extensions.js
- 下載特定的擴充套件並且複製到 profile 目錄