We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

Android 版 Firefox の簡単なビルド

このページでは 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 端末を開発用にするのはとても、早く簡単にできます。

  1. 設定メニューの「端末情報」を選び、「ビルド番号」までスクロールダウンします。
  2. 「ビルド番号」を7回タップすることで「開発者モード」という隠しメニューが表示されるようになります。タップするとカウントダウンが表示されたのち、設定メニューに「開発者向けオプション」メニューが表示されるようになります。これはいつでも設定をオフにできるので心配しないでください。
  3. 最後に開発者向けオプションの「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 のフロントエンドから始めてください: 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ベースのプロジェクトが登場するはずです。 [ビルド]> [プロジェクトを再ビルド]を選択して試してみてください。

それは次のようになります:

Choose "Import from Gradle".

Choose the top source directory.

The IDE shows several projects after importing the top source directory.

 

Setting the Run/Debug Configuration and Build Variant

Gradle ビルド構成には、複数のRun / Debug Configurations  を定義できる複数の Gradle モジュールが含まれている場合があります。あなたは "アプリ"を実行したい設定を実行する:

Choose "app" from the Run Configurations list.

詳細についてはこのドキュメントを参照してください。

この構成では、複数の製品味を定義して、バリアントの作成に貢献します。テストデバイスのバージョンに応じて、次のいずれかの組み合わせが必要です。

Testing device or emulator Android API Product Flavor Build Variant
>=21 local localPhotonDebug
<21 localOld localOldDebug

Choose "local" if you have an Android 21+ device; choose "localOld" if you have an Android &lt;21 device.

これについての詳細は Google ビルドドキュメントを参照してください。

IDE でサポートされるもの

  • IDE の Android 版 Firefox の実行、デバッグ、プロファイリングアプリプロジェクトは Android アプリケーションを定義します。
  • mobile/android の下で Java ソースコードを調べるいずれかの Java コードを変更すると、新しくビルドしてインストールする必要があります。
  • mobile/android/base/resources を含む mobile/android 以下のリソースを変更した場合、多くの場合は Android レイアウトエディタが起動します。
  • mobile/android/base/strings.xml.inmobile/android/base/locales/en-US/*.dtd. の文字定義を変更した場合、次のビルドで変更すべきです。今回のビルドで気づかれない場合があります。(これは Android の strings.xml ファイルが作成されビルド時に生成されるためです。)
  • mobile/android/contentmobile/android/components, and mobile/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か所でリストしています。

ドキュメントのタグと貢献者

このページの貢献者: mantaroh, teoli
最終更新者: mantaroh,