Android の新ビルドシステム
横浜 Android and モバイル OS
プラットフォーム部
第 39 回勉強会
2015/9/19
@l_b__
今日の内容
●
AOSP を眺めていると、すでに master ブランチで
採用されているビルドシステムと、現在開発中
のシステムがあるのでその辺りを。
●
AOSP を眺めただけの妄想ベースなので、内容
の保証は ( 参照先のリンク以外は ) ちょっと…
自己紹介
●
Twitter ID:@l_b__
●
PF 部の司会進行役 兼 懇親会手配役 兼 配信
係 兼 雑用係
●
フレームワーク周りが好物です
●
BeOS 好きだったのと Java-er なので Be 関係者
が多い ( 多かった )Android に惹かれました
●
仕事は某 SIer で Android フレームワーク修正か
らアプリ作成までやっていましたが最近は
Android 全く触っていません
今日のサマリ
●
https://github.com/google/kati と
https://android.googlesource.com/platf
orm/build/soong/+/master-soong/doc.go
を読め
以上
ではありますが一応解説を
●
現状 master ブランチには kati と呼ばれるビルド
ツールが導入されています
●
また soong というビルドシステムも開発が進んで
いるようです
kati
●
kati is an experimental GNU make clone.
The main goal of this tool is to speed-up
incremental build of Android.
– https://github.com/google/kati/blob/mas
ter/README.md
●
インクリメンタルビルドの高速化を目標とした
make の代替ツール
kati
●
Currently, kati does not offer a faster build
by itself. It instead converts your Makefile
to a ninja file.
●
今はまだ Makefile を ninja 向けに変換するだけ
だよ
kati
ninja
●
http://martine.github.io/ninja/
●
ファイル間の依存関係を高速に解決することでビ
ルドの高速化を目指しているビルドシステム
●
chromium ですでに make の代わりに採用済み
ninja とは
●
“ninja は chromium ブラウザの開発者が現行
のビルドシステムに嫌気をさして作り始めたビ
ルドシステムです。これまでちょっとしたファイル
の変更であってもビルド開始までに 10 秒掛
かっていたのが 1 秒以下になるとの事で
す。 ninja のウリは高速であり、ゴールも高
速。 configure の様な依存から解決するので
はなく、現行のファイル構成からソースレベルの
依存情報を解決します。”
– 「 Big Sky :: 高速なビルドシステム
「 ninja 」」 http://mattn.kaoriya.net/softwar
e/ninja/20140121141906.htm
ninja とは
●
すでにメタビルドシステムの gyp 、 CMake は
ninja に対応済み
– Makefile の代わりに build.ninja を出力
●
LLVM や node.js といったプロジェクトが採用
●
Android(master ブランチ ) で
は /prebuilts/ninja にビルド済みバイナリ有り
kati に戻って
●
Android(master ブランチ ) では /build/kati
●
Go で書かれた kati と C++ で書かれた ckati が
含まれている
– 現状は ckati がメインで使われているっぽい
kati を使ったビルド
●
$ export USE_NINJA=true
●
$ source build/envsetup.sh
●
$ lunch hogehoge
●
$ make
kati を使ったビルド
kati を使ったビルド
●
out/target/product/[ デバイス
名 ]/build.ninja が kati によって作成される
●
後は ninja がよしなに計らってくれる
●
コンパイル、リンクは gcc/llvm clang が行うの
で、初回ビルドが特別に速いということは無さそ
う
●
ビルド進捗が表示されるのは分かりやすい
kati についてその他
●
Google 内では export USE_GOMA=true する
ことで社内クラウドコンパイル環境である goma
を使った分散ビルドが出来るよう。
●
kati のメイン開発者は日本人 2 人の模様
– http://shinh.hatenablog.com/
– http://ukai.jp/
●
kati の意味は不明…
kati について追記
●
9/24 追記
●
開発者の浜地さんが kati の解説エントリを書い
てくださいました !
– 兼雑記 「 kati について」
http://shinh.hatenablog.com/entry/201
5/09/24/005803
●
kati について追記
●
名前の由来は make ( まけ ) に対する kati とい
うダジャレだったようです…
●
もうひとつのビルドツール
●
こちらは鋭意開発中のようですが…
soong
●
master-soong ブランチに初出、現在は master
にも一部マージ済み
●
/build/soong 配下の Go で書かれたツール
●
ninja 、 blueprint と合わせてビルドを実行
soong?
●
スタートレックに出てくるアンドロイドであるデータ
少佐の生みの親、ヌニエン・スン博士 (Dr.
Noonien Soong) が命名の由来 ?
– Android をビルドするシステムだからアンドロイド
を作った人物の名前なのかな
– トレッキーでは無いのでよく分かりません
blueprint
●
blueprint はビルド定義ファイル Android.bp を
読み込んで build.ninja を作るメタビルドツー
ル
●
/build/blueprint
●
Android.bp は Android.mk の代わりになる
Python データライクなフォーマットファイル
Android.bp
cc_library(
name = "cmd",
srcs = [
"main.c",
],
deps = [
"libc",
],
)
subdirs = ["subdir1", "subdir2"]
soong
●
soong 自体はどのモジュールをどのようにビルド
するかコントロールする役目の模様。
●
Android.mk を Android.bp に変換するツールを
含む模様
●
どのデバイス向けか、そのデバイスにどのモ
ジュールをインストールするか、対象アーキテク
チャは何かなどコントロール
●
しかし lunch コマンドに該当する処理
や、 AndroidProducts.mk 、 device.mk など
に該当するのが何かは不明
ビルド
●
$ ./bootstrap.bash
●
$ ./soong
●
でビルドできるのではないか ( 手順説明は見当た
らない )
●
ただし、 master-soong ブランチも soong コマン
ドですぐにエラー終了する。
●
Bootstrap.bash は本
体 /build/soong/bootstrap.bash へのシン
ボリックリンク
●
soong は本体 /build/soong/soong.bash への
シンボリックリンク
ビルド
●
初期処理として .bootstrap 配下に
blueprint 、 soong がビルドされる
●
それらを使って各モジュールが .intermediates
配下にビルドされる ( はず )
最後のまとめ
●
中の人たちも開発中のビルド時間には辟易して
いるようです。
●
Chrome との開発統合がこんな形で現れていま
す。
●
Android の Go への浸透はまず周辺ホストツー
ルから。デバイス中に入ってくるのはいつでしょ
う。
●
AndroidBuilder も Go 覚えないとね
以上
●
次回以降は Android Marshmallow で何か。
以上

Androidの新ビルドシステム