firefox os カスタム rom の作成
TRANSCRIPT
第 3 回 Tizen 勉強会
Firefox OS カスタム ROM の作成2012/08/25
自己紹介
Twitter: @masap 職業: 組み込みプログラマ(主に Wi-Fi) ハッシュタグ: #FirefoxOSjp
概要
Firefox OSとは
Mozilla が作ったスマートフォンOS 思想: アプリケーションは全て HTML5 になるべき
iOS で購入したアプリは Android でも動くべき
アプリケーション開発環境の比較Android Tizen Firefox OS
開発言語 Java JavaScript JavaScript
画面設計 XML HTML5 HTML5
ネイティブ C++ EFL なし
OS Linux Linux Linux
Firefox OSとは(続き)
シェア 通信キャリアは 7 社
(米)Sprint、(独)Deutsche Telekom、(アラブ首長国連邦)Etisalat、(フィリピン)Smart、(伊)Telecom Italia、(スペイン)Telefonica、(ノルウェー)Telenor。
端末メーカーは 2 社 (中)TCL Communication Technology、(中)ZTE。
投入時期 2013年初頭に最初の端末をブラジルにて発売予定。
Firefox OS Phone の使用感
操作性 起動、停止が速い。 15 秒で起動。停止は 1 秒以内。
例としてGalaxy S2 WiMAX は 30 秒で起動、 7 秒で停止。
もたつきなくスルスル動く。
UI Android よりも iPhone に似ている。 物理ホームキーが必要。
Firefox OS の特徴
プラットフォーム自体をHTML5でカスタマイズ可能 アプリではなくプラットフォームをHTML5で書ける
Tizen はプラットフォーム自体はネイティブ (EFL) で書かれている。
これは Firefox OS 固有の特徴。今日はこの点を中心に説明。
カスタマイズ(入門編)
壁紙セレクタ
壁紙セレクタに項目を追加してみる。
準備
Galaxy S2 (SC-02C) を用意 日本で入手できるモデルでWWモデルに最も近いらしい
Android 4.0 以上を焼く 鬼門!⇐ Firefox OS のスクリプトが認識できるFWであること
Firefox OS をダウンロード/ビルド/焼く 基本的に公式手順通り
https://developer.mozilla.org/en-US/docs/Mozilla/Boot_to_Gecko/B2G_build_prerequisites
フルビルドは Athlon X2 4400 で 2 – 3 時間
Firefox OSの構造
3層構造
Gaia JavaScriptで書かれたUIレイヤ
Gecko レンダリングエンジン
ハードウェア仮想化レイヤ
ユーザ空間
Linux カーネル カーネル空間
Gonk
修正箇所
Settings画面はひとつの HTML でできている gaia/apps/settings/index.html
壁紙設定画面はsection要素で定義 <section role="document" id="wallpaper">
画像ファイルの置き場所 gaia/apps/system/resources/images/backgrounds/
に 480x800 の pngを置く。
最後にGaiaを焼く ./flash.sh gaia で約 30 秒。
修正前
修正前のホーム
修正後
修正後のホーム
カスタマイズ(初級編)
Wi-Fi 機能の追加
WPS(Wi-Fi Protected Setup) を追加する。
Wi-Fi Protected Setup とは 「ボタンを押すだけでつながる」 SSID や暗号キーの入力等 Wi-Fi 接続に必要な手間が省ける。
画面イメージ
WPS 追加イメージ
wpa_supplicant
Firefox OS は Wi-Fi 接続のためのネィティブアプリとして wpa_supplicant を使用している。
広く使われている スマートフォン: Android, Meego, Tizen。 デスクトップ: Ubuntu, Fedora。
コマンドで操作 “SCAN” のような文字列でコマンドを実行。 Android,
Firefox OS。 D-Bus 経由での操作も可能。 Meego, Tizen。
WPS 移植概要
下記作業が必要
Gaia- WPS 向け UI を追加- Gecko の WPS API を呼ぶ
Gecko- WPS 向け API を追加- WPS コマンド発行機能を追加
wpa_supplicant WPS 機能は既存なので修正不要
JavaScript とネイティブアプリ
そもそも JavaScript とネイティブアプリはどうやって通信するのか?
js-ctypes を使用して JavaScript から共有ライブラリを呼べる。
let cutils = ctypes.open("libcutils.so"); Android 等向けに開発した既存資産を有効活用でき
る。
Js-ctypes について詳しく知りたい方はこちら @makoto_kato さんのスライド
http://www.slideshare.net/djraven/jsctypes-2464200
コミット
せっかく作ったので本家にコミットしてみる。 Gaia: GitHub から Pull Request。
lint チェックに注意。
Gecko: Bugzilla に報告。 バグじゃないけどバグとして報告。
master ブランチに merge されたのでぜひ使ってみてください。
まとめ
カスタマイズしやすい! Android 等では敷居が高かったカスタマイズだが、今後
は Web デザイナの皆さんからの Pull Request にも期待。
Gaia の Mozilla 内開発者は 18 人。意外に少ない。 日本の携帯電話会社さんもぜひ!。