Upload
lb
View
4.535
Download
0
Embed Size (px)
Citation preview
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/platform/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/master/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/software/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/2015/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 で何か。
以上