ArchLinuxでAndroidビルド

久々にAndroidビルドの需要が自分の中で高まった。何年も前にP-01D向けCyanogenmodのビルドにチャレンジした事はあるが、その時のソースコードは人の作ったものだったので、今回は自分でやってみたい。自分で試行錯誤したい。 大抵Ubuntu向け記事ばかりだが(そもそも公式の文書がUbuntu向け)急にUbuntuホストを用意するのも面倒。手元のArchLinuxでそのままやりたい。というわけで、一先ずソース修正の類は何もせず、Pixel用でビルドしてみる。 それっぽいパッケージ群のインストール。必要なもののみかどうかは自信無い。

$ yay -S base-devel
$ yay -S git gperf zip curl zlib lib32-glibc ccache mesa libxslt unzip jdk8-openjdk rsync
$ yay -S multilib-devel # lib32-ncurses5-compat-libsに必要
$ yay -S lib32-ncurses5-compat-libs # 実際必要かどうかは不明
$ yay -S ncurses5-compat-libs
$ yay -S python2

repoコマンドのインストール、pythonリンク作成、git初期設定。

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ ln -s /usr/bin/python2 ~/bin/python
$ ln -s /usr/bin/python2-config ~/bin/python-config
$ git config --global user.email "hoge@fuga.com"
$ git config --global user.name "hoge"

Androidソースコードの入手。バージョンは8.0.0の最新にしてみる。

$ mkdir ~/git/aosp/android-8.0.0_r36
$ cd ~/git/aosp/android-8.0.0_r36
$ repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r36 # すぐ終わる
$ repo sync # めっちゃかかる

ビルド。

$ source build/envsetup.sh
$ lunch # 好きなデバイスを選択。今回はsailfish向けにしていた
$ make -j2

エラー出るので修正。pythonが無いよって言うけど、まさかパス決め打ちじゃないよね…?

/bin/bash: prebuilts/clang/host/linux-x86/clang-3859424/bin/clang++: /usr/bin/python: bad interpreter: No such file or directory
$ cd /usr/bin
$ sudo ln -s /usr/bin/python2 python
$ sudo ln -s /usr/bin/python2-config python-config

Jack serverと通信できないみたいなエラーが出るのでぐぐって対応。

Communiction error with Jack server (52). Try 'jack-diagnose'
$ ./prebuilts/sdk/tools/jack-admin stop-server
Stopping background server
No Jack server running. Try 'jack-admin start-server'
$ ./prebuilts/sdk/tools/jack-admin start-server

メモリがいっぱいになる件。

Out of memory error (version 1.3-rc6 'Douarn' (4418000 22a11d4b264ae70e366aed3025ef47362d1522bb
by android-jack-team@google.com)).
Java heap space.   
Try increasing heap size with java option '-Xmx<size>'.
$ ./prebuilts/sdk/tools/jack-admin stop-server
Stopping background server
$ ./prebuilts/sdk/tools/jack-admin cleanup-server
$ export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
$ ./prebuilts/sdk/tools/jack-admin start-server

あとはビルドが終わるまでひたすら待ち。Pixelデバイスが手元に無いので動作確認すら取れない。どうしよう…買うか…?