ブログネタ
FirefoxOS に参加中!
8796.jp管理日誌 の人から Peak を譲ってもらってので、
妄想ではなく実際の動作を確認してみた。
まずは Peak 向けに Firefox OS をビルドしてみる の通りにビルドして動作確認した。
指摘のあった通り、スクリーンショットを撮ると 360x640 で保存されていた。
1980-01-07-10-01-30
Peak の解像度は 540x960 なのでおかしい。

原因を簡単に書くと、master からソースを取得したのがまずいらしい。
gaia は Nexus S や Galaxy Nexus で master を使用していて問題無いので、
おそらく gecko か gonk-misc に原因がある。
後で詳細は調べる事にする。

以下、ビルド手順の修正版。
ビルドする環境については、Keon と Peak が届かないので、Nexus S を Firefox OS 端末にしてみた を参照。

Firefox OS のソースコードをダウンロード
  • 作業用のフォルダを作成する(場所はホーム直下でなくて良い)
  • $ mkdir ~/b2g_work
    $ export B2G_WORK=~/b2g_work
  • ソースコードの取得
  • $ cd $B2G_WORK
    $ git clone git://github.com/mozilla-b2g/B2G.git
    $ cd B2G
    $ ./config.sh keon
    ※peak 指定ではソースコードを落とせないので、keon を指定して落とす。
  • Peak に必要なソースコードを取得し直す
  • $ cd .repo/manifests
    $ cp keon.xml peak.xml
    peak.xml の最後を以下のように修正する。
    変更前
    <!-- Keon specific things -->
    <project path="device/qcom/msm7627a" name="device_qcom_msm7627a" remote="gp-b2g" revision="master" />
    <project path="device/geeksphone/keon" name="device-gp-keon" remote="b2g" revision="master" />
    <project path="kernel" name="gp-keon-kernel" remote="gp-b2g" revision="master" />
    <project path="external/compat-wireless" name="external_compat-wireless" remote="gp-b2g" revision="master" />
    <project path="frameworks/base" name="frameworks_base" remote="gp-b2g" revision="master" />
    <project path="hardware/ril" name="hardware_ril" remote="gp-b2g" revision="keon" />
    <project path="hardware/qcom/display" name="hardware_qcom_display" remote="gp-b2g" revision="master" />
    <project path="hardware/libhardware" name="hardware_libhardware" remote="gp-b2g" revision="master" />
    <project path="hardware/libhardware_legacy" name="hardware_libhardware_legacy" remote="gp-b2g" revision="master" />
    変更後
    <!-- Peak specific things -->
    <project path="device/qcom/msm7627a" name="device_qcom_msm7627a" remote="gp-b2g" revision="master" />
    <project path="device/geeksphone/peak" name="device-gp-peak" remote="gp-b2g" revision="master" />
    <project path="kernel" name="gp-peak-kernel" remote="gp-b2g" revision="master" />
    <project path="external/compat-wireless" name="external_compat-wireless" remote="gp-b2g" revision="master" />
    <project path="frameworks/base" name="frameworks_base" remote="gp-b2g" revision="master" />
    <project path="hardware/ril" name="hardware_ril" remote="gp-b2g" revision="peak" />
    <project path="hardware/qcom/display" name="hardware_qcom_display" remote="gp-b2g" revision="master" />
    <project path="hardware/libhardware" name="hardware_libhardware" remote="gp-b2g" revision="master" />
    <project path="hardware/libhardware_legacy" name="hardware_libhardware_legacy" remote="gp-b2g" revision="master" />
    $ cd $B2G_WORK/B2G/.repo
    $ rm manifest.xml
    $ ln -s manifests/peak.xml manifest.xml
    $ cd $B2G_WORK/B2G
    $ repo sync
  • ビルドの設定を Peak 向けに変更する
  • $B2G_WORK/B2G/.config の DEVICE_NAME、DEVICE を変更して LUNCH を追加する。
    変更前
    DEVICE_NAME=keon
    DEVICE=keon
    変更後
    DEVICE_NAME=peak
    DEVICE=peak
    LUNCH=full_peak-userdebug
高解像度のディスプレイ(HVGAよりも大きなもの)に対応する
  • gaia を master ブランチに変更
  • $ cd $B2G_WORK/B2G/gaia
    $ git checkout -b master mozillaorg/master
  • 高解像度用にビルドするために環境変数を設定する
  • export HIDPI=1
日本語データの取得と設定
  • mercurial のインストール
  • $ sudo apt-get install mercurial
  • 日本語データの取得と設定
  • $ cd $B2G_WORK
    $ hg clone http://hg.mozilla.org/gaia-l10n/ja gaia-l10n/ja
    $ export LOCALE_BASEDIR=$PWD/gaia-l10n
    $ wget http://sola-dolphin-1.net/data/B2G/source/languages-japan.json -O $PWD/B2G/gaia/shared/resources/languages-japan.json
    ※languages-japan.json は英語と日本語のみを定義したファイル。
    $ export LOCALES_FILE=$PWD/B2G/gaia/shared/resources/languages-japan.json
    $ hg clone http://hg.mozilla.org/l10n-central/ja gecko-l10n/ja
    $ export L10NBASEDIR=$PWD/gecko-l10n
    $ export MOZ_CHROME_MULTILOCALE="ja"
    ※MOZ_CHROME_MULTILOCALE には追加するものを記述する。
    今回追加するのは日本語のみなので、ja だけを記述した。
    $ hg clone http://hg.mozilla.org/build/compare-locales
    $ export PATH="$PATH:$PWD/compare-locales/scripts"
    $ export PYTHONPATH="$PWD/compare-locales/lib"
スクリーンキャプチャの修正、official ビルドへの変更、日本語フォントの追加、日本語辞書の設定
  • スクリーンキャプチャの修正
  • DDMSでスクリーンキャプチャを撮ると色が狂っているので修正する。
    ※Peak は DDMS でキャプチャ撮れないので、やらなくても良い。
    $ cd $B2G_WORK/B2G/external/screencap-gonk
    $ wget http://sola-dolphin-1.net/data/B2G/patch/0001-fix-screencap.patch
    $ git apply 0001-fix-screencap.patch
  • official ビルドへの変更
  • gaia/Makefile に MOZILLA_OFFICIAL=1 を追加する。
    ※MOZILLA_OFFICIAL を参照してる箇所の前に書く事。
    $ cd $B2G_WORK/B2G/gaia
    $ wget http://sola-dolphin-1.net/data/B2G/patch/0001-change-official-build.patch
    $ git apply 0001-change-official-build.patch
  • 日本語フォントを追加する
  • 標準だと中華フォントしかないので、Android(AOSP)にあるフォントを使う。
    $ cd $B2G_WORK/B2G/build
    $ wget http://sola-dolphin-1.net/data/B2G/patch/0001-build_Add-Japanese-font.patch
    $ git apply 0001-build_Add-Japanese-font.patch
    $ cd $B2G_WORK/B2G/external/moztt
    $ wget http://sola-dolphin-1.net/data/B2G/patch/0001-moztt_Add-Japanese-font.patch
    $ git apply 0001-moztt_Add-Japanese-font.patch
  • 日本語辞書の設定
  • 辞書を http://sourceforge.jp/projects/naist-jdic/releases/ からダウンロードする。
    ダウンロードするファイルは naist-jdic-0.4.3.tar.gz とする。
    ダウンロード先は $B2G_WORK とする。ダウンロード後、以下を実行。
    $ cd $B2G_WORK
    $ tar zxvf naist-jdic-0.4.3.tar.gz
    $ cd $B2G_WORK/B2G/gaia/apps/keyboard/js/imes/jskanji/dict
    $ mkdir ipadic
    $ cp $B2G_WORK/naist-jdic-0.4.3/naist-jdic.dic ipadic/
    $ make json
Firefox OS のビルドと Peak への書き込み
  • 実機(Peak)から必要なファイルを吸い出す
  • ビルドする PC と Peak を USB ケーブルで繋いでから実行すること。
    $ cd $B2G_WORK/B2G/device/geeksphone/peak
    $ ./extract-files.sh
  • Firefox OS のビルド
  • $ cd $B2G_WORK/B2G
    $ ./build.sh
  • Peak への書き込み&起動
  • $ cd $B2G_WORK/B2G
    $ fastboot flash boot out/target/product/peak/boot.img
    $ fastboot flash system out/target/product/peak/system.img
    $ fastboot flash userdata out/target/product/peak/userdata.img
    $ fastboot reboot
Peak で Firefox OS が動作してる様子
1980-01-08-03-03-201980-01-08-03-04-35
540x960 でキャプチャ撮れていた。

Keon は昨日 Geeksphone から発送されたので、
近いうちに Keon も妄想だけでなく実物で動作確認出来る予定。