今更ながらFirefox for Android(Fennec)をビルドする

本家の情報はここ

Fennec for Androidにあるけど、結構頻繁に書き換えられている感じですね。

  • 下記のビルドは2013/07/04時点での状況です。
  • 今回はマルチロケール対応のapkをビルドする流れになっています。
  • mozilla-releaseをビルドします。mozilla-centalをビルドする場合は読み替えてください。

ビルド環境

前準備

$ sudo apt-get update
$ sudo apt-get install mercurial ccache
$ sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
$ sudo apt-get build-dep firefox // ビルドに必要な諸々
$ sudo apt-get install ia32-libs // 64bit版の場合必要
$ mkdir mozilla // 作業ディレクトリ作成

Javaのインストール

OracleのページからJavaを落としてきます。今はアカウント登録が必要になっています。OpenJDKでビルドできるかは試していません。

jdk-6u35-linux-x64.bin

$ sudo mkdir /opt/java
$ sudo mv jdk-6u35-linux-x64.bin /opt/java
$ cd /opt/java
$ sudo chmod +x ./jdk-6u35-linux-x64.bin
$ sudo ./jdk-6u35-linux-x64.bin
$ sudo ln -f -s /opt/java/jdk1.6.0_35/bin/* /usr/local/bin/

Android SDK/NDKのダウンロード

色々組み合わせを試してみましたが、現時点ではこの組み合わせでビルド可能でした。

$ cd mozilla // 作業ディレクトリ作成
$ wget http://dl.google.com/android/android-sdk_r21.1-linux.tgz
$ wget http://dl.google.com/android/ndk/android-ndk-r8d-linux-x86.tar.bz2
$ tar -xzf android-sdk_r21.1-linux.tgz
$ tar -xjf android-ndk-r8d-linux-x86.tar.bz2

Android SDKのアップデート

リモートログインしている場合、すべてアップデートするしか…(時間がかかる)

./android-sdk-linux/tools/android update sdk -u

ローカルでGUIを使用している場合

./android-sdk-linux/tools/android update sdk

としてGUIを起動し、Android 4.1.2(API16)のみをダウンロードすればOKです

マルチロケール対応

$ mkdir multilocale // 作業ディレクトリ
$ hg clone http://hg.mozilla.org/build/mozharness
cp mozharness/configs/multi_locale/standalone_mozilla-central.py myconfig.py

myconfig.pyを編集

BUILD_DIR = "src-release"
REPO_PATH = "releases/mozilla-release"
L10N_REPO_PATH = "releases/l10n/mozilla-release"

ソースコードの取得

$ mozharness/scripts/multil10n.py --cfg myconfig.py --pull-build-source

mozconfigの作成

$ vim mzconfig

とかでmzconfigを作成(multilocaleディレクトリで)

mozconfigはスクリプト実行時にsrc-release/.mozconfigとしてコピーされるようになっています。

 # Add the correct paths here:
 ac_add_options --with-android-ndk="$HOME/mozilla/android-ndk-r8d"
 ac_add_options --with-android-sdk="$HOME/mozilla/android-sdk-linux/platforms/android-16"
 ac_add_options --with-android-version=9
 ac_add_options --with-android-gnu-compiler-version=4.7

 # android options
 ac_add_options --enable-application=mobile/android
 ac_add_options --target=arm-linux-androideabi
 ac_add_options --with-ccache
 ac_add_options --with-branding=mobile/android/branding/unoffical
 
 mk_add_options MOZ_OBJDIR=./objdir-droid

apkのビルド

$ mozharness/scripts/multil10n.py --cfg myconfig.py

apkの場所は以下に作成されます。

$ mozilla/multilocale/src-release/objdir-droid/dist/gecko.apk

再ビルドする場合の作法

$ cd mozilla/multilocale/src-release/
$ ./mach clobber

$ ./mach build   // ビルド
$ ./mach package // パッケージ化
$ ./mach clobber // クリーン

マルチロケール版作成では、別途スクリプトで実行しているので、上記コマンドは使用ませんが、個別で何かやるときは必要になります。ビルドが可能かどうかテストするときなどに使うといいでしょう。

パッケージ名、アプリ名の修正

configure.shを書き換えて、再度クリーンビルドすることで可能です。

$ mozilla/multilocale/src-release/mobile/android/branding/unofficial/configure.sh

configure.sh

ANDROID_PACKAGE_NAME=com.hoge.fuga
MOZ_APP_DISPLAYNAME=hogefuga