26
Android の新ビルドシステム 横浜 Android and モバイル OS プラットフォーム部 第 39 回勉強会 2015/9/19 @l_b__

Androidの新ビルドシステム

  • Upload
    lb

  • View
    4.535

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Androidの新ビルドシステム

Android の新ビルドシステム

横浜 Android and モバイル OSプラットフォーム部

第 39 回勉強会

2015/9/19@l_b__

Page 2: Androidの新ビルドシステム

今日の内容

● AOSP を眺めていると、すでに master ブランチで採用されているビルドシステムと、現在開発中のシステムがあるのでその辺りを。

● AOSP を眺めただけの妄想ベースなので、内容の保証は ( 参照先のリンク以外は ) ちょっと…

Page 3: Androidの新ビルドシステム

自己紹介

● Twitter ID:@l_b__ ● PF 部の司会進行役 兼 懇親会手配役 兼 配信

係 兼 雑用係● フレームワーク周りが好物です● BeOS 好きだったのと Java-er なので Be 関係者

が多い ( 多かった )Android に惹かれました● 仕事は某 SIer で Android フレームワーク修正か

らアプリ作成までやっていましたが最近はAndroid 全く触っていません

Page 4: Androidの新ビルドシステム

今日のサマリ

● https://github.com/google/kati と https://android.googlesource.com/platform/build/soong/+/master-soong/doc.go を読め

以上

Page 5: Androidの新ビルドシステム

ではありますが一応解説を

● 現状 master ブランチには kati と呼ばれるビルドツールが導入されています

● また soong というビルドシステムも開発が進んでいるようです

Page 6: Androidの新ビルドシステム

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 の代替ツール

Page 7: Androidの新ビルドシステム

kati

● Currently, kati does not offer a faster build by itself. It instead converts your Makefile to a ninja file.

● 今はまだ Makefile を ninja 向けに変換するだけだよ

kati

Page 8: Androidの新ビルドシステム

ninja

● http://martine.github.io/ninja/● ファイル間の依存関係を高速に解決することでビ

ルドの高速化を目指しているビルドシステム● chromium ですでに make の代わりに採用済み

Page 9: Androidの新ビルドシステム

ninja とは

● “ninja は chromium ブラウザの開発者が現行のビルドシステムに嫌気をさして作り始めたビルドシステムです。これまでちょっとしたファイルの変更であってもビルド開始までに 10 秒掛かっていたのが 1 秒以下になるとの事です。 ninja のウリは高速であり、ゴールも高速。 configure の様な依存から解決するのではなく、現行のファイル構成からソースレベルの依存情報を解決します。”

– 「 Big Sky :: 高速なビルドシステム「 ninja 」」 http://mattn.kaoriya.net/software/ninja/20140121141906.htm

Page 10: Androidの新ビルドシステム

ninja とは

● すでにメタビルドシステムの gyp 、 CMake はninja に対応済み

– Makefile の代わりに build.ninja を出力● LLVM や node.js といったプロジェクトが採用● Android(master ブランチ ) で

は /prebuilts/ninja にビルド済みバイナリ有り

Page 11: Androidの新ビルドシステム

kati に戻って

● Android(master ブランチ ) では /build/kati● Go で書かれた kati と C++ で書かれた ckati が含まれている

– 現状は ckati がメインで使われているっぽい

Page 12: Androidの新ビルドシステム

kati を使ったビルド

● $ export USE_NINJA=true● $ source build/envsetup.sh● $ lunch hogehoge● $ make

kati を使ったビルド

Page 13: Androidの新ビルドシステム

kati を使ったビルド

● out/target/product/[ デバイス名 ]/build.ninja が kati によって作成される

● 後は ninja がよしなに計らってくれる● コンパイル、リンクは gcc/llvm clang が行うの

で、初回ビルドが特別に速いということは無さそう

● ビルド進捗が表示されるのは分かりやすい

Page 14: Androidの新ビルドシステム

kati についてその他

● Google 内では export USE_GOMA=true することで社内クラウドコンパイル環境である gomaを使った分散ビルドが出来るよう。

● kati のメイン開発者は日本人 2人の模様– http://shinh.hatenablog.com/– http://ukai.jp/

● kati の意味は不明…

Page 15: Androidの新ビルドシステム

kati について追記

● 9/24追記● 開発者の浜地さんが kati の解説エントリを書い

てくださいました !– 兼雑記 「 kati について」

http://shinh.hatenablog.com/entry/2015/09/24/005803

Page 16: Androidの新ビルドシステム

kati について追記

● 名前の由来は make ( まけ ) に対する kati というダジャレだったようです…

Page 17: Androidの新ビルドシステム

もうひとつのビルドツール

● こちらは鋭意開発中のようですが…

Page 18: Androidの新ビルドシステム

soong

● master-soong ブランチに初出、現在は master にも一部マージ済み

● /build/soong 配下の Go で書かれたツール● ninja 、 blueprint と合わせてビルドを実行

Page 19: Androidの新ビルドシステム

soong?

● スタートレックに出てくるアンドロイドであるデータ少佐の生みの親、ヌニエン・スン博士 (Dr. Noonien Soong) が命名の由来?

– Android をビルドするシステムだからアンドロイドを作った人物の名前なのかな

– トレッキーでは無いのでよく分かりません

Page 20: Androidの新ビルドシステム

blueprint

● blueprint はビルド定義ファイル Android.bp を読み込んで build.ninja を作るメタビルドツール

● /build/blueprint● Android.bp は Android.mk の代わりになる

Pythonデータライクなフォーマットファイル

Page 21: Androidの新ビルドシステム

Android.bp

cc_library(

name = "cmd",

srcs = [

"main.c",

],

deps = [

"libc",

],

)

subdirs = ["subdir1", "subdir2"]

Page 22: Androidの新ビルドシステム

soong

● soong 自体はどのモジュールをどのようにビルドするかコントロールする役目の模様。

● Android.mk を Android.bp に変換するツールを含む模様

● どのデバイス向けか、そのデバイスにどのモジュールをインストールするか、対象アーキテクチャは何かなどコントロール

● しかし lunchコマンドに該当する処理や、 AndroidProducts.mk 、 device.mk などに該当するのが何かは不明

Page 23: Androidの新ビルドシステム

ビルド

● $ ./bootstrap.bash● $ ./soong● でビルドできるのではないか ( 手順説明は見当た

らない )● ただし、 master-soong ブランチも soongコマン

ドですぐにエラー終了する。● Bootstrap.bash は本体 /build/soong/bootstrap.bashへのシンボリックリンク

● soong は本体 /build/soong/soong.bashへのシンボリックリンク

Page 24: Androidの新ビルドシステム

ビルド

● 初期処理として .bootstrap 配下にblueprint 、 soong がビルドされる

● それらを使って各モジュールが .intermediates配下にビルドされる ( はず )

Page 25: Androidの新ビルドシステム

最後のまとめ

● 中の人たちも開発中のビルド時間には辟易しているようです。

● Chrome との開発統合がこんな形で現れています。

● Android の Goへの浸透はまず周辺ホストツールから。デバイス中に入ってくるのはいつでしょう。

● AndroidBuilder も Go覚えないとね

Page 26: Androidの新ビルドシステム

以上

● 次回以降は Android Marshmallow で何か。

以上