AOSPをビルドするのにopenstf/docker-aospを使ったら便利だった
以前 AOSP環境構築 [備忘録] という記事を書いたのですが、AOSPをビルドするのに用意しなければいけないものが多く、Dockerでビルドしたいと思っていたところ openstf/docker-aosp が便利だったので、その紹介をしたいと思います。
checkout-branch (repo sync)
android9.0.0_r1 をダウンロードする場合、下のように利用できます。
docker run -ti --rm -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -v $PWD:/aosp -u $(id -u $USER):$(id -g $USER) openstf/aosp:jdk8 /aosp.sh checkout-branch --no-mirror android-9.0.0_r1 -j32
上の例では openstf/aosp に jdk8 というタグを指定していますが、この部分は下の対応表に沿って対応したものを選ぶようにします。
| Branch | SDK | Docker image to build with |
|---|---|---|
| android-2.3_r1 | 9 | openstf/aosp:jdk6 |
| android-2.3.3_r1 | 10 | openstf/aosp:jdk6 |
| android-4.0.1_r1 | 14 | openstf/aosp:jdk6 |
| android-4.0.3_r1 | 15 | openstf/aosp:jdk6 |
| android-4.1.1_r1 | 16 | openstf/aosp:jdk6 |
| android-4.2_r1 | 17 | openstf/aosp:jdk6 |
| android-4.3_r1 | 18 | openstf/aosp:jdk6 |
| android-4.4_r1 | 19 | openstf/aosp:jdk6 |
| android-5.0.1_r1 | 21 | openstf/aosp:jdk7 |
| android-5.1.0_r1 | 22 | openstf/aosp:jdk7 |
| android-6.0.0_r1 | 23 | openstf/aosp:jdk7 |
| android-7.0.0_r1 | 24 | openstf/aosp:jdk8 |
| android-7.1.0_r1 | 25 | openstf/aosp:jdk8 |
| android-8.0.0_r1 | 26 | openstf/aosp:jdk8 |
| android-8.1.0_r1 | 27 | openstf/aosp:jdk8 |
| android-9.0.0_r1 | 28 | openstf/aosp:jdk8 |
/aosp.sh というスクリプトファイルが用意されていて、
/aosp.sh checkout-branch --no-mirror android-9.0.0_r1 -j32 のようにすることで、ブランチのチェックアウトが可能です。
※dockerでvolumeをマウントした際、作成されたファイルのownerがrootになってしまうのを防ぐため、/etc/group と /etc/passwd をマウントしています。(参考: dockerでvolumeをマウントしたときのファイルのowner問題)
build-all
docker run -ti --rm -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -v $PWD:/aosp -u $(id -u $USER):$(id -g $USER) openstf/aosp:jdk8 /aosp.sh build-all aosp_x86-eng -j32
ビルドも /aosp.sh build-all aosp_x86-eng -j32 のように実行できます。
openstf/docker-aospでできること
-
create-mirror [sync-options]- AOSPのミラーを作成
-
checkout-branch [--no-mirror] <branch> [sync-options]- 指定したブランチをチェックアウト、ミラーを利用しない場合[--no-mirror]オプションを付ける
-
build-all <target> [make-options]- 全てのモジュールをビルド
-
build <target> <local-module> [make-options]- 指定したモジュールをビルド
紹介した checkout-branch と build-all 以外にも上のような機能があります。
詳しくは、docker run -ti --rm openstf/aosp:jdk8 /aosp.sh help を確認してください。