このページでは Fennec という名で知られている Android 版 Firefox に関する、最新のビルドに必要な基礎ステップをカバーしています。ようこそ!そしてあなたに会えてとても嬉しいです。
もしこのドキュメントについてのトラブルや解決できない壁にぶち当たったら、あなたの問題や、あなたに続く貢献者の問題を解決するために Nick Alexander(nalexander@mozilla.com)に直接メールをしてください。
Android 版 Firefox を Microsoft Windows 上でビルドするためには、Windows 10 クリエーターアップデート以降が必要となります。Firefox 58 から、Windows サブシステム for Linux (WSL / Windows 上の Bash) でビルドすることができるようになりました。もし WSL を使っていれば、Linux と同じ方法で使うことができます。しかし、まだ安定板ではありませんし、Android 版 Firefox のビルドとして WSL を使用することを推奨していません。また、たとえWSL だとしても Android Studio はサポートしていません。
これに加え、さらなる情報を得る場合は、 Firefox for Android wiki とFirefox の一般的なビルドドキュメント を参考にしてください。
開発環境の準備
Fennec(Android 版 Firefox のコードネーム) のハッキングを始めるには、以下の3つが必要となります。
- Linux または OS X を搭載し、30GB 以上の空きスペースがあるマシン。
- テストするための Android 端末
- 高速なインターネット回線
64 ビットの Unix ベース OS が動作しているマシンが必要です。自身のマシンが 64 ビットかどうかは、ターミナルウィンドウで以下のコマンドを実行することで確認できます。
uname -m
もし、「x86_64
」と表示されたら準備はできています。
Fennec は過去4年の Android 端末上で動作します。ARMv6 以前のような古い端末上では動作しませんが、最近の端末では動作します。
マシンと端末が揃ったら、始めましょう!
Android 端末の設定
Android 端末を開発用にするのはとても、早く簡単にできます。
- 設定メニューの「端末情報」を選び、「ビルド番号」までスクロールダウンします。
- 「ビルド番号」を7回タップすることで「開発者モード」という隠しメニューが表示されるようになります。タップするとカウントダウンが表示されたのち、設定メニューに「開発者向けオプション」メニューが表示されるようになります。これはいつでも設定をオフにできるので心配しないでください。
- 最後に開発者向けオプションの「Android デバッグ」を有効にして USB からデバッグできるようにしてください。
ハードウェア条件
このセクションでは Fennec のビルドに必要となるハードウェアの条件をリストしています。
- まともなスピードの CPU。古いハードウェアでビルドすることもできますが、遅いマシン上でコンパイルするととても時間がかかります。RAM が 8GB 以上あることを推奨します。もし、古いマシンでビルドするときは、アーティファクトモード を強く推奨します。
- 高速なインターネット回線もまた強く推奨します。開発環境とソースコードを取得する際に、膨大なファイルをダウンロードするためです。アーティファクトモード は通常大きなバイナリーアーカイブ(50MB) をダウンロードします。
- 64 ビット OS が必要です。2015 年以降、多くの 32 ビットマシンで Firefox をビルドすることはできなくなりました。
- 実機の Android 端末で Android 版 Firefox をインストールしたい場合は、Android Ice Cream Sandwich (API 15) 以降の端末を使ってください。
- エミューレータ上でも開発することは可能です。詳細については MozillaWiki を参照してください。このページで述べられている
mach
コマンドは実機に対しても、エミュレータに対しても動作します。
ソースコードの取得
Mozilla の Mercurial コードレポジトリから最新のソースコードを取得しましょう。ソースコードは膨大なため、これにはしばらく時間がかかります。
もし、Mercurial の 1.5 より低いバージョンを使っている場合は、progress 拡張を Mercurial の設定に追加することを推奨します。これはクローン処理の現在の進捗をフィードバックしてくれます。Mercurial の progress extension を有効にするためのドキュメントを参照してください。
hg clone https://hg.mozilla.org/mozilla-central
もしインターネット回線が不安定な場合、 hg clone
が何らかの割り込みを受けて失敗する可能性があります。この場合、hg clone
を利用する代わりに Mercurial バンドルを使うことを強くお勧めします。
依存関係のブートストラップ
注意:
1. bootstrap は Rust の依存もあります。これは 開発環境を完成させるために2回実行する必要が出てきます。bootstrap を実行する前に事前に Rust をインストールすることをお勧めして、2回目で bootstrap で実行してください。
2. もし、Mac ユーザーの場合、Xcode をインストールする必要があります。もちろん a) ターミナル上で sudo xcodebuild -license を実行し、 b) bootstrap を開始する前にXcode を手動で実行し、ライセンスに同意している必要があります。
3. bootstrap を始める前に Java 8 SDK をインストールしておいてください。Java 9 はいくつかの問題を引き起こします。詳細は bug 1418900 を参照してください。
4. 現在、Fennec はインスタント実行をサポートしていません。Fennec のビルドとインストールを Android Studio で使用する前に無効化してください。
チェックインした mozilla-central
ディレクトリでターミナルから以下のコマンドを実行します。これには Python 2.7 以降が必要となります。
./mach bootstrap
プロンプトで以下の問い合わせがあった場合は、「3. Firefox for Android Artifact Mode」を選択します。
ブートストラップスクリプトは Android SDK (そして必要な場合は NDK)、そして、Android プラットフォームの追加機能をインストールします。もし Bootstrap.py が何をしているか詳細を知りたい場合は、詳細なセットアップ内容を確認してください。設定が完了するまではターミナルの指示に従ってください。もしgit を使いたい場合、Mercurial 設定ウィザードを実行した際の質問で選択「2. No」を選択することで可能です。
ブートストラップスクリプトは設定が完了した時に設定オプションを表示します(以下のあるような)。今はこれを安全なところへコピーして次に進みましょう。この情報を再度表示したい場合は、ブートストラップスクリプトを再実行することで表示できます。
これで依存関係のインストールは完了です。Firefox のレポジトリのクローンをする必要があります。
Android 版 Firefox の変更したい箇所を選ぶ
Android 版 Firefox は2つのレイヤーから構成されています。Android 版 Firefox の「フロントエンド」と呼ばれるホームパネルや、設定 UI / メニューその他 / Firefox Sync / 多くのデータストレージなどです。これらは完全に Java / Android SDK / JavaScript / HTML / CSSで構築されています。Android 版 Firefox は Gecko プラットフォームバックエンド上で動作しています。Gecko はMozilla のレンダリングエンジンで、Edge / Blink / Webkit などと似ており、Web コンテンツをレンダリングしたり、JavaScript を実行したり、ページに対してWeb API を提供する責務があります。Gecko は C++ と JavaScript を使って構築されています。
それぞれのメリット・デメリットを表にまとめると以下のようになります。
設定 | 制限 | 使用言語 | ビルド速度 | 統合開発環境 |
---|---|---|---|---|
front-end | UI のみをメインで変更できるが、web プラットフォームはできない | Java, JavaScript | 高速ビルド | Android Studio |
back-end | 注意:何でも変更可能 | C++, JavaScript | 低速ビルド | 注意:テキストエディタを利用する必要がある |
Android 版 Firefox を変更しますか?それとも、Gecko プラットフォームを変更したいですか?
- フロントエンドの変更をしたい:Android 版Firefox の見た目や使用感を見てください。
- バックエンドを変更したい: Web API / HTML レンダリング / Gecko プラットフォームの他の部品を確認してください。
注意:もし変更内容の確信が持てない場合は Android 版 Firefox のフロントエンドから始めてください: Gecko バックエンドのビルドをしない場合、ビルド時間は劇的に早くなります。
しかし、心配しないでください。いつでもバックエンドをビルドするための設定は変更可能で、その切り替えはとても簡単です。
Android 版 Firefox の mozconfig ファイルの準備
mozilla-central
をクローンしたディレクトリ内に mozconfig
という名前のファイルを作成します。ビルドスクリプトは mozconfig
からビルドしたい製品の種類を確認します。必要に合わせてこのファイルは変更できます。このファイル内では ~
の代わりに必ず $HOME
を使用してください。mozconfig 内では ~
は継承されず認識できません。
初期値では、ビルドシステムは公式リリースの Android 版 Nightly と同等の Android 版 Firefox を作成します。これを望まない場合、多くの選択肢がビルド設定オプションに存在します。完全に理解した上でこのオプションを使うことを強く推奨します。設定した Android パスを設定し、上記ステップ(bootstrap.py) で取得したバージョンを使用することを強く推奨します。これは元の開発環境での互換問題を防ぐためです。
フロントエンドの変更をしたい
Android 版 Firefox はアーティファクトビルド(時々モバイルチームのマネージャはこれをマネージャモードと呼びます。まれにコードを書いた時にとても役に立つためです)と呼ばれる高速ビルドをサポートしています。アーティファクトモードは、ローカルで C++ コンポーネントをビルドする代わりに事前にビルドされた C++ コンポーネントをダウンロードし、時間を節約します。
アーティファクトモードを利用するために以下の行を mozconfig
に貼り付けます
# Build Firefox for Android: ac_add_options --enable-application=mobile/android ac_add_options --target=arm-linux-androideabi # With the following Android SDK: ac_add_options --with-android-sdk="/absolute/path/to/.mozbuild/android-sdk" # Enable artifact building: ac_add_options --enable-artifact-builds # Write build artifacts to: mk_add_options MOZ_OBJDIR=./objdir-frontend
上記設定にある Android SDK 関連のパスは自身のパスに設定してください。
これでアーティファクトモードの準備は整いました。
バックエンドの変更をしたい。
重要: 現在の mach bootstrap は依存関係により、rust のクロスコンパイルに失敗します。最新情報や回避手段については bug 1384231 を確認してください。
以下の行を mozconfig
に追加してください。
# Build Firefox for Android: ac_add_options --enable-application=mobile/android ac_add_options --target=arm-linux-androideabi # With the following Android SDK and NDK: ac_add_options --with-android-sdk="/absolute/path/to/.mozbuild/android-sdk" ac_add_options --with-android-ndk="/absolute/path/to/.mozbuild/android-ndk-r11c" # Write build artifacts to: mk_add_options MOZ_OBJDIR=./objdir-droid
Android NDK は自身の環境に合わせて設定してください。(上述の r11c は例です。)
もし、C/C++ コードをハッキングすることを計画している場合、リリースビルドの代わりにデバッグビルドをする必要があります。以下の行を mozconfig
に追加してください。
ac_add_options --enable-debug ac_add_options --enable-debug-symbols
設定オプション
x86 の Android 版 Firefox をビルドしたい場合
重要: API 15 以上のみが x86 アーキテクチャをサポートしています。
重要: もし仮想マシンの入れ子(Nested virtualization)を有効にしている場合、Android エミュレータ上ではハードウェアアクセラレーションが動作しません。
バージョン 23 以降のハードウェアアクセラレーション有効にした Android x86 エミュレータはローカル開発環境では高速です。最新のマシンを持っていて古い Android 端末を持っている(もしくは端末を持っていない)人にとっては魅力的な選択肢です。アーティファクトビルドと通常のビルド両方ともに x86 アーキテクチャの APK ビルドをサポートしています。ac_add_options --target=arm-linux-androideabi
の行を以下のように書き換えるだけです。
ac_add_options --target=i386-linux-android
(この設定を変更した場合、 MOZ_OBJDIR
も一緒に変更した方が良いです)これでビルドすると、x86 の Android 版 Firefox が作成されます。
もっと詳細な設定オプションを知りたい場合は、一般的な Firefox の ビルドオプションを設定するドキュメントを参照してください。
Android 版 Firefox を実機で動作させる
クイックスタート
以下のコマンドはビルドやパッケージング・インストール・そして Android デバイス上に Android 版 Firefox を実行させるため時間がかかります。
./mach build ./mach package ./mach install ./mach run
ビルド
mozilla-central
に入ります。(hg clone
で作成したものです。)
Android 版 Firefox をビルドするために以下のコマンドを実行します(全ての C/C++ / Java / JavaScript のコードをコンパイルしてリンクします)
./mach build
ビルドには多くの時間が必要となります。この時間は選択したビルドオプション、自身のハードウェアに依存します。最速の Linux ビルドでも 15 分、遅いマシンだと数時間以上かかることがあります。もしアーティファクトモードを使った場合ビルド時間は5分以下になります。詳しくは Tips のファストビルドを参照してください。
注意: mach build
を初回実行すると、mach
コマンドは .mozbuild
ディレクトリを作成するか聞いてきます。これは 20 秒間待ちます。これはデフォルトロケーションとして良いもので、このディレクトリを作成することを許可するべきです。
再ビルド
変更を加えた後にビルドする場合は、以下のコマンドを実行します。
./mach build
これは変更があり、ビルドが必要なものを再びるどします。これは以下のコマンドを使うことでも可能です。
./mach build mobile/android
これは Android 版 Firefox のフロントエンドに関わるものをびるどします。もしアーティファクトモードを利用している場合、これを常に使うべきです。もし Gecko のバックエンドをビルドするときは、これを用いるのは誤りで、使うべきではありません。
パッケージング
実機で Android アプリを実行させるためには、デスクトップ版 Firefox バイナリを実行させるよりも少し巻き込むものが多いです。最初に Android パッケージに全てのものを入れ込む必要があります。APK を作成するために以下のコマンドを実行します。
./mach package
作成された APK ファイルは $OBJDIR/dist
フォルダに配置され、fennec-56.0a1.en-US.android-arm.apk
のようなファイルになります。
インストールして実行する
Android パッケージをデバイスにインストールして実行するためにAndroid 端末を接続して USB デバッグを有効にする必要があります。そして以下のコマンドを実行します。
./mach install ./mach run
Android 端末上に表示されるアプリケーション名は「Fennec $USER」となり、$USER にはコードをビルドした際の自身の名前が入ります。
注意: Android 端末で実行するためには Android Ice Cream Sandwich (API 15) 以上が必要となります。
コンパイル中。。。
あなた自身のセットアップ
コンパイルには時間がかかります。それが終了するまで Bugzilla のアカウントを作成しましょう。
Bugzilla.mozilla.org は Mozilla のバグ管理システムです。バグにコメントしたり、パッチを提出するためにはアカウントを作成する必要があります。
Bugzilla 同様に、多くの Mozilla のインターナルなコミュニティ手段として Internet Relay Chat (IRC) があります。ここから Limechat をダウンロードできます。そして、ここからIRC 経由で Mozilla に接続する方法を学ぶことができます。もしセットアップを開始しようとして質問があれば、"#introduction channel" に参加することができ、そこでは新しい貢献者に対して回答をしてくれるコミュニティメンバーが接続しています。
Mozilla.org に参加しましょう
待ってる間に、自身のためにもう1つやってほしいことがあります。それは Mozillians のアカウントを作成することです。
Mozillans はあなたの興味・プロジェクト・国を共有した人と繋がることができる Mozilla のコミュニティディレクトリです。このステップはオプションですが、登録する価値はあると思います。
はじめの一歩
ソースコードを入手して、Firefox のビルドが終わり、./mach run
でそれを実行することができたので、ハッキング開始の準備はできました。次のステップは IRC の "#introduction channel"に参加したり、Twitter の StartMozilla をフォローしたり、最初のバグを探したりすることです。
謝辞
Mozilla の強みはコミュニティが背後にいることです。Firefox 製品作成や、全ての人々にオープンな Web をより良いものにする協力をしていただき、ありがとうございます。
Android Studio 上で Firefox 版 Android を開発する
developer.android.com から Android Studio をダウンロードします。Android 版 Firefox のフロントエンドチームの開発は Android Studio で行なっています。すでに Gradle ビルドの設定が存在し、並列して mach build
の設定が存在します。結果、mach build
のGradle 設定を使用します。
Gladle 設定は現在「ソースコードディレクトリ」にあります。全てを確認するために、パッケージングとビルドができることを確認し、以下のコマンドを実行します。
./mach gradle clean app:assembleLocalPhotonDebug
次に、一番上のソースディレクトリ(hg clone
が作成した mozilla-central
,)をAndroid Studioにインポートします。 Android StudioからGradleプラグインを更新するかどうか尋ねられる場合は、このプロジェクトに対してもう一度通知しないでください。新しいGradleバージョンに変更すると、ビルドに問題が発生する可能性があります。 Androidスタジオに新しいGradleベースのプロジェクトが登場するはずです。 [ビルド]> [プロジェクトを再ビルド]を選択して試してみてください。
それは次のようになります:
Setting the Run/Debug Configuration and Build Variant
Gradle ビルド構成には、複数のRun / Debug Configurations を定義できる複数の Gradle モジュールが含まれている場合があります。あなたは "アプリ"を実行したい設定を実行する:
詳細についてはこのドキュメントを参照してください。
この構成では、複数の製品味を定義して、バリアントの作成に貢献します。テストデバイスのバージョンに応じて、次のいずれかの組み合わせが必要です。
Testing device or emulator Android API | Product Flavor | Build Variant |
---|---|---|
>=21 | local | localPhotonDebug |
<21 | localOld | localOldDebug |
これについての詳細は Google ビルドドキュメントを参照してください。
IDE でサポートされるもの
- IDE の Android 版 Firefox の実行、デバッグ、プロファイリングアプリプロジェクトは Android アプリケーションを定義します。
mobile/android
の下で Java ソースコードを調べるいずれかの Java コードを変更すると、新しくビルドしてインストールする必要があります。mobile/android/base/resources
を含むmobile/android
以下のリソースを変更した場合、多くの場合は Android レイアウトエディタが起動します。mobile/android/base/strings.xml.in
とmobile/android/base/locales/en-US/*.dtd
. の文字定義を変更した場合、次のビルドで変更すべきです。今回のビルドで気づかれない場合があります。(これは Android のstrings.xml
ファイルが作成されビルド時に生成されるためです。)mobile/android/content
・mobile/android/components
, andmobile/android/modules
を含むmobile/android
以下のJavaScript リソースである「omnijar」や、toolkit/
以下を変更すると変更点は次回ビルド時に反映されます。この変更は omnijar を再びるどしビルドとインストールを再度反映させる必要があります。mobile/android/content
、およびtoolkit/
を含む、mobile/android
の下での "omnijar"クロームXHTML、CSS、およびJSリソースの編集
IDE でサポートされないもの
- ビルドシステムの設定や定義・
mobile/android/base/AndroidManifest.xml.in
の変更やサブマニフェストの変更詳細は bug 1221344 を確認してください。 - 自動生成された
mobile/android/base/java/org/mozilla/gecko/AppConstants.java.in
のような Java コード - C++ ソースツリーの変更
mobile/android
以外の「omnijar」JavaScriptソースコードを変更する(mobile/android
以外のJavaScriptを変更した場合、dom/
の下にあると、mobile/android
の「omnijar」ファイルが次に編集されたときに変更が認識されます)。- Robocop のテスト実行 ( これらのテストをローカルで実行するには
mach robocop
を実行してください) mochitest-chrome
テストの実行(mach test
を実行させるためにローカルで実行してください。)
トラブルシューティング
-
最初に Gralde 設定が正しいか実行してください。
./mach gradle clean app:assembleLocalPhotonDebug
これは完全に成功するべきです。
-
次に正しい Gradle モジュールがビルドされ正しいビルド変数がされていることを確認してください。されていない場合、以下のようなエラーが表示されます。
A/GeckoLoader: Couldn't load mozglue. Trying native library dir. A/GeckoLoader: Library doesn't exist when it should.
おそらく "自動化" 変数を実行しているでしょう。ビルド変数に関するドキュメントと bug 1246055 の説明を参照してください。 -
第3に、端末にAPKをインストールできることを確認します。
./gradlew clean app:install{Local,LocalOld}Debug
ターゲットデバイスに応じて、 "Local" または "LocalOld" を選択すると、正常に完了します。ビルド変数に関するドキュメントを参照してください。
- ソースディレクトリの状態について IDE と混同する可能性があります。回復するには、以下を試してください:
- ルートプロジェクトを選択肢 IDE の全てを更新します。
build.gradle
ファイルを開き、もし Gradle 設定が変更になった渓谷がある場合は、指示に従って同期してください。- Gradle モデルを手動で更新する:View> Tool Windows> Gradle の順に選択し、左上の青い同期ボタンをクリックします。 Android スタジオには、メインツールバーにこれを行うためのアイコンがあります。これは、「プロジェクトを Gradle ファイルと同期」というラベルが付けられています。
- IDE キャッシュを手動でクリアします。ファイル/キャッシュの無効化を選択し、IDE を再起動します。 (これは決して必要ありません。)
Android SDK および Android NDK の必要なバージョン
Fennec ビルドシステムには、以下のバージョンが必要です。
Android または Google の要件の1つが欠落してビルドに失敗した場合は、最初に mach bootstrap
を実行する必要があります。ブートストラップを実行したくない場合は、Android SDK マネージャを実行して手動でインストールできます:mach android
または $ANDROID_SDK/tools/android
を試してみてください。
Requirement | Version required |
---|---|
Android SDK Platform | Android 6.0 (API 23) |
SDK Build Tools | 23.0.3 |
SDK Platform Tools | 23.0.1 |
Android SDK Tools | 23.0.1 |
Android Support Repository | 21 (or later) |
Google Repository | 22 (or later) |
Android NDK | r15c |
bug 1207680 は、これらのバージョン要件をソースコードの1か所でリストしています。