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
を確認してください。