ソースがないのにドキュメントだけがある。なんででしょうね?
公式Discordサーバー「HelloFloko」があります。
日本語と英語のどちらでも開発者に質問などのやりとりができます。
もちろん強いに越したことはないんですが…
スレッド数 * 2~4GB
程度を目安に 16GB 以上 が必要ccache
に割り当てるだけの余裕がもう30-50GBほどあるとなおよい以下の構成だと ccache によるキャッシュ有効時でフルビルド (make clean
実行後 brunch
) の所要時間が約30分です。
部品 | 品目 |
---|---|
CPU | AMD Ryzen 9 3950X (16コア/32スレッド) |
RAM | Team DDR4-3200(PC4-25600) 64GB (16GBx4) |
SSD | Seagate FireCuda 520 1TB (NVMe, PCIe 4.0) |
VirtualBox や Windows Subsystem for Linux などで Ubuntu を動作させるための設定などについては、インターネット上に情報がいくらでも存在するのでここではわざわざ説明しません。
20.04.x
amd64
/ x86_64
版であることは絶対条件(現状)NOTE: この手順は一回のみ必要です。既にビルド環境の準備ができてソースコードのダウンロードが済んでいる場合は、この章はスキップしてください。
過去に adb
と fastboot
をインストールしたことがなければ、Google からダウンロードすることができます。
以下の通りに実行して展開します:
unzip platform-tools-latest-linux.zip -d ~
TIP: 実際のファイル名は上記のコマンドと必ずしも一致するとは限らないので、適宜調整してから実行してください。
次に、 adb
と fastboot
を環境変数(PATH)に追加する必要があります。 ~/.profile
を開いて以下を追記します:
# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
PATH="$HOME/platform-tools:$PATH"
fi
そして、 source ~/.profile
を実行して適用します。
FlokoROM のビルドにはいくらかのパッケージが必要です。お使いの Linux ディストリビューションのパッケージ管理システムを使用して、これらをインストールすることができます。
TIP: Linux における パッケージ管理システム とは、ソフトウェア(ふつう、インターネット経由で提供されます)をコンピューターにインストールしたり、削除したりするために使用されるシステムのことです。Ubuntu では Ubuntu ソフトウェアセンター を使うことができますが、ターミナルを開いて
apt install
コマンドを直接使用するほうがおすすめです。
Ubuntu 20.04 以上の場合、 FlokoROM をビルドするには以下のパッケージが必要です:
bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
他の Linux ディストリビューションを使用している場合は適宜調べて読み替えてください。
FlokoROM(というより、LineageOS)の最近のバージョンでは、必要な JDK (Java Development Kit) はソースコードの取得時に一緒にダウンロードされます。特に考慮する必要はありません。
ビルド環境にいくつかのディレクトリを用意する必要があります。
以下の通りに実行して作成してみましょう:
mkdir -p ~/.bin
mkdir -p ~/android/floko
~/.bin
ディレクトリには git-repo (主に "repo" と呼ばれます) というツールが、 ~/android/floko
ディレクトリには FlokoROM のソースコードがそれぞれ格納されます。
repo
コマンドをインストールする以下の通りに実行することで、 repo
のバイナリをダウンロードして実行可能な権限を付与します:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+rx ~/.bin/repo
環境変数 PATH
に ~/.bin
を追加します。
export PATH="${HOME}/.bin:${PATH}"
repo
は Android のソースコードを同期するために Git を用います。ユーザー情報を設定したことがなければ以下のコマンドを(名前とメールアドレスを適宜読み替えながら)実行しましょう。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
今後のビルドを高速化したい場合は、ccache
をインストール後に以下のように実行してください。
export USE_CCACHE=1
export CCACHE_EXEC=$(which ccache)
また、ccache がキャッシュの保存先として使用するディレクトリを CCACHE_DIR
で設定するとよいでしょう。
export CCACHE_DIR=${HOME}/ccache
そして ccache
に使って欲しいディスク領域の上限を以下のように指定します:
ccache -M 50G
ここでの 50G
は 50GB のキャッシュに相当します。これは一度だけ実行する必要があります。25GB~100GB の範囲で、ビルドを非常に高速にできます(例えば、通常なら1時間のビルドが20分にまで短縮されたりします)。1台向けにビルドする場合は、25GB~50GB で十分です。同じカーネルソースを共有しない複数の端末向けにビルドする場合は、75GB~100GB を目安にしてください。ここで指定するサイズはドライブ上で恒久的に確保・占有されることを十分考慮に入れるようにしてください。
また、オプションで ccache
の圧縮を有効にすることもできます。パフォーマンスに若干の低下が予想されます(大した差ではなかったとも言われています)が、キャッシュに収まるファイルの数が増えます。以下の通りに実行することで有効化できます:
ccache -o compression=true
あるいは
export CCACHE_COMPRESS=1
NOTE: 圧縮を有効にすると、
ccache
が使用するキャッシュサイズを抑えることができます(1台の場合で約20GBが目安になります)。
まずは FlokoROM のソースコードを格納するディレクトリに入ります:
cd ~/android/floko
このコマンドは初回のみ実行します。 repo
を現在のディレクトリで初期化し、リポジトリを指定します。
まだ
12.1
ブランチは提供されていません。
repo init -u https://github.com/FlokoROM/manifesto.git -b 12.1
最新のソースコードに同期します。
repo sync
は -j
オプションでジョブ数の調整ができますが、以下の例では利用可能な CPU コア数を適用します。
repo sync -j$(nproc) -c --no-clone-bundle --no-tags
repo
コマンドの用法やオプションについてもっと詳しく知りたい場合は、
repo <command> help
- 公式ドキュメントである Repo コマンド リファレンス | Android Open Source Project
- または(古い記事になりますが) Android ビルドで学ぶ git-repo 入門 - dev:mordiford
のいずれかを読んでください。
ここをすっ飛ばしてビルドを始めるとこのようなエラーを吐かれると思います:
LineageOS などには roomservice
が存在し、指定したターゲットのリポジトリが見当たらなければ GitHub から取得してくる…という非常にお節介親切な機能が備わっていますが、 FlokoROM には OFFICIAL とかいう概念がなくなったので、この機能は削除されました。
つまり、自分で local_manifests
を書くことになります。そう難しくはないので、緊張する必要はありません。自分で書くときは roomservice
は結構邪魔になるので、ここできちんと覚えておくと他のカスタムROMをビルドするときにも役立ちます。
WIP: あとで書く
- 参考: https://dev.maud.io/entry/2017/04/07/learn-git-repo/#manifest-について
- 一応 local_manifests の書き方は 茜ちゃんの薄い本 に記事があります…が、内容がちょっと古くなりつつあるのでアレ.
例: .repo/local_manifests/miatoll.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!-- miatoll / Redmi Note 9S -->
<project name="mordiford/device_xiaomi_miatoll" path="device/xiaomi/miatoll" revision="12.0" />
<project name="mordiford/device_xiaomi_sm6250-common" path="device/xiaomi/sm6250-common" revision="12.0" />
<!-- 中略 -->
</manifest>
意味や理由を説明しようとすると初心者向けの範疇を超えてこの記事が長くなるので許してください。おまじないです。
export ALLOW_MISSING_DEPENDENCIES=true
今度はビルドに使うコマンド集やらなんやらの一覧を読み込むやつです。
. build/envsetup.sh
もしも中身が気になる場合は以下から見ることができます。よかったですね。
別に brunch <device>
だけでビルドできるんですが、ビルド中の出力はログとして残してもおきたいし、やっぱり画面に流れると嬉しいのでどっちもやります。
brunch <device> 2>&1 | tee ~/log/floko_$(date '+%Y%m%d_%H-%M-%S').log