現在の Resurrection Remix のビルド手順を以下に示します。
CyanogenModやその派生でも、概ね似たような手順でビルドできるでしょう。
目次
0. はじめに
0-1. 分岐について
- この記事では、各見出しに英数字を振っています。数字が0から順路を示し、英字は分岐を示します。
- 例えば1から2、そして2-aときたら次は3、といった形です。2-bはそっくり飛ばします。お分かりですね?
0-2. 前提条件について
- ビルド環境は自宅に設置している
mashiro
で検証しています。
パーツ | 構成 | メーカー | 備考 |
---|---|---|---|
CPU | i7-2600K | Intel | |
RAM | 12GB (SMD-4G68NP-13H) | SanMax | DDR3-1333 |
HDD | 3TB (ST3000DM001) | Seagate | システムのインストール先および /home |
SSD | 240GB (SDSSDHII240G) | SanDisk | /ssd 。ビルド用ディレクトリはこっち |
- が、当記事ではビルド用のソースディレクトリは
~/rr
として進めます - 今回のビルドターゲットは Nexus 5 、
hammerhead
です。適宜読み替えてください。
1. ビルド環境 (ハードウェア)
ResurrectionRemix/ResurrectedScripts から適当にかいつまんでます
各構成 | 推奨される要件 |
---|---|
CPU | 64bit対応で2コア以上 |
GPU | 該当無し |
メモリ | 4GB |
ストレージ | 150GB HDD |
インターネット | まともなもの、良いに越したことは無い。20GB程ダウンロードする必要があるのに注意 |
ディスプレイ | 該当無し |
OS | x64なLinux。Ubuntu 14.04以降での動作を確認しています |
各工程 | 見込み所要時間 |
---|---|
パッケージ導入 | 1時間以内 |
ダウンロード | インターネット接続環境による。100Mbps以上なら40分以内、5Mbpsなら6-8時間程度? |
ROMのビルド | PCのスペックによる |
- もしビルド時間を短縮するためにPCのアップグレードを考えているならば、以下の点について考慮しましょう:
- 強いCPU、SSDか回転数の高いHDD、より多いRAM、より高速なインターネット回線
訳注: Seagate曰く、SSHDにおいては7200rpmよりも優れたパフォーマンスを発揮するようなのでSSD買う金無いならこっちもありなんじゃないでしょうか。試したこと無いので保証はできませんが。
2. ビルド環境のセットアップ (ソフトウェア)
大前提として、Gitくらいは入れといてね。あと git config
も。分からなかったらぐぐれ。
sudo apt-get update && sudo apt-get install git
2-a. ResurrectedScripts を使用する
これは Resurrection Remix のビルド用スクリプトです。現在は Marshmallow のみがサポートされています。
- 次の手順だけで以下の工程が完了します:
- パッケージのインストール
repo
のセットアップ- RRのソースコード取得
cloneして実行するだけ!お手軽ですね!
git clone https://github.com/ResurrectionRemix/ResurrectedScripts.git -b marshmallow scripts
cd scripts
./setup.sh
あとは対話型なはずなんで指示に従ってれば以下に示す 2-1 から 2-3 までの工程をやってくれるでしょう。
2-b. 手動でセットアップする
こちらの手順は他のカスタムROMのビルドでも応用できるので覚えておいても損はないです。
2-b-1. パッケージのインストール
sudo apt-get update && sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev openjdk-7-jre openjdk-7-jdk pngcrush schedtool libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev gcc-multilib maven ncftp
2-b-2. repo
のセットアップ
repo
は複数のgitリポジトリを一括で管理できるツールです。
詳細はGoogleによるリファレンス ― Repo command reference | Android Open Source Project を読みましょう。
mkdir ~/bin
PATH=~/bin:$PATH
パスを通したらダウンロードして実行権限を与えます。
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
誤って ~/bin
を削除したりしない限り、この工程は初回のみです。
2-b-3. ソースコードのダウンロード
ビルド用のディレクトリを作成し、入ります
mkdir rr
cd rr
repo
を使って、manifestと呼ばれる「どのリポジトリを取得し、どういったディレクトリ構成で配置するのか」を一覧にした設定ファイルのようなもの(実態はxml)を取得し、設定します。repo init
でセット(initializing)します。-u <URL>
でmanifestのソースを指定し、-b <revision>
でmanifestのブランチやリビジョンを指定します。- この工程は他のROMにも応用できるので覚えると良いです
repo init -u https://github.com/ResurrectionRemix/platform_manifest.git -b marshmallow
- 今度はmanifestで指定されたリポジトリを全てダウンロードします
repo sync
はmanifestに記述された全てのリポジトリを最新の状態に同期します。回線の速度とお使いのマシンの使用可能なスレッド数に応じて-j*
オプションを使用してください。一般的に、100Mbps以上の実効速度であれば-j8
で問題ないとされます。
repo sync -j8 -f --force-sync --no-clone-bundle
3. ビルドの準備
もちろんRRのソース置いてるディレクトリに居ることが前提ですよ?
3-1. 各種端末向けのソースを取得する
3-1-a. CyanogenMod公式サポート済端末の場合
要するに github.com/CyanogenMod 以下にデバイスのリポジトリがあればの話です。
まずはビルド用のコマンド集である envsetup.sh
をロードします。
. build/envsetup.sh
ビルドするターゲット端末のコードネームを確認したら、
breakfast <device>
だけで必要なリポジトリを取得してくれます。Nexus 5だと breakfast hammerhead
とか。
3-1-b. 非公式なデバイスツリーなら存在する場合
この場合は、自分でmanifestを書く必要があります。まずはローカルなmanifestのディレクトリとmanifestのxmlを作成しましょう。
mkdir .repo/local_manifests
touch .repo/local_manifests/roomservice.xml
後はお好みのエディタでmanifestを書きましょう。以下にテンプレートを示します
さっと見てだいたい分かって頂ける通り、name
にリポジトリのパス、 path
にローカルでのパス配置、 remote
はソースがあるサービス等によって指定する必要があります。
少なくとも、デバイス単体のリポジトリ(この例では CyanogenMod/android_device_lge_hammerhead
)は最低限指定しておく必要があります。 cm.dependencies
が適切に記述されたリポジトリを指定していれば依存するリポジトリも後で repo sync
時に取得してくれますが、そうでなければ自分で全て列挙する必要があります。
3-2. vendor
ディレクトリ
残念ながらカスタムROMは完全にオープンなソースだけで動かすことはできないことが多いです。時にはバイナリブロブのお世話になることも有ります。
3-2-a. 実機から取り出す
ビルドしたいターゲットデバイスをPCに接続し、adbが通る状態にしておいてください。
3-1で取得したデバイス固有のソースがあるディレクトリまで移動します
cd device/lge/hammerhead
ここに extract-files.sh
があるので、実行すると、proprietary-blobs.txt
に記載されたバイナリブロブ共を実機から取り出してソースと一緒に配置してくれます。
欠点としては、既にCyanogenModが動いている端末から取り出す必要が有ることが挙げられます。
3-2-b. Factory Imageから取り出す
主にNexusで使用可能な方法です。Factory Imageを展開して、必要なファイルを再配置します。
Nexus 5に関してはスクリプトを用意しています。ご利用ください: extract-from-factory-image.sh · GitHub
cd device/lge/hammerhead
wget -nc -q https://gist.githubusercontent.com/lindwurm/90fc353413ed78c00b32/raw/8d5afc10b02e05870e41fa501462d6437edfcd8e/extract-from-factory-image.sh
chmod +x extract-from-factory-image.sh
./extract-from-factory-image.sh
3-2-c. リポジトリを利用する
4.ビルド
RRは更新が多いので、初回でもここまでの作業中に何かしら更新されていたりしますし、local_manifestsに手を加えたりしているかもしれません。ビルド前に repo sync
し直すと良いです。
repo sync -j8 --force-sync
ビルド用のコマンド集みたいなもの、envsetup
を読み込んで
. build/envsetup.sh
いざビルド!
brunch <device> 2>&1 | tee rr_$(date '+%Y%m%d_%H-%M-%S').log
(ログ残すためにこうしてるだけで、 brunch <device>
だけでもビルドはできます)
5.その他の事項
- ビルドが終わったら、ROMの
.zip
ファイルはout/target/product/<device>
に有ります。忘れずに安全な場所に退避させましょう。 - 4.の工程を行うスクリプトをgistに置いてます。 各ROMのソース置いてる一つ上の階層に置くやつです · GitHub 用法は以下の通りです。詳しくはスクリプトを読んでください。
./mashiro.sh rr hammerhead 1 1 1
- 詰んだらTwitterで@lindwurmに聞いてもらえると分かる範囲で答えられるかもしれません
- UI翻訳の反映確認のためにビルド回してるだけで開発者ではないので…