SlideShare a Scribd company logo
1 of 26
Download to read offline
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 で何か。
以上

More Related Content

What's hot

FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
ken_kitahara
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 

What's hot (20)

入門!Jenkins
入門!Jenkins入門!Jenkins
入門!Jenkins
 
Android enterpriseで実現できる端末管理の世界
Android enterpriseで実現できる端末管理の世界Android enterpriseで実現できる端末管理の世界
Android enterpriseで実現できる端末管理の世界
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
 
Android™組込み開発基礎コース BeagleBoard編
Android™組込み開発基礎コース BeagleBoard編Android™組込み開発基礎コース BeagleBoard編
Android™組込み開発基礎コース BeagleBoard編
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
Android カスタムROMの作り方
Android カスタムROMの作り方Android カスタムROMの作り方
Android カスタムROMの作り方
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
Unityと.NET
Unityと.NETUnityと.NET
Unityと.NET
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 

Similar to Androidの新ビルドシステム

第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会
Shinya Kinoshita
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
 
Yapf2013
Yapf2013Yapf2013
Yapf2013
l_b__
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
Yohei Oda
 

Similar to Androidの新ビルドシステム (20)

Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Yapc2012資料
Yapc2012資料Yapc2012資料
Yapc2012資料
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
Get started with future C# .Net development with Docker
Get started with future C# .Net development with DockerGet started with future C# .Net development with Docker
Get started with future C# .Net development with Docker
 
210630 python
210630 python210630 python
210630 python
 
unity build on github actions
unity build on github actionsunity build on github actions
unity build on github actions
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
Embedded Master2
Embedded Master2Embedded Master2
Embedded Master2
 
Yapf2013
Yapf2013Yapf2013
Yapf2013
 
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
 
EC-CUBEユーザカンファレンス2016
EC-CUBEユーザカンファレンス2016EC-CUBEユーザカンファレンス2016
EC-CUBEユーザカンファレンス2016
 
Drupal deployment trial on Engine Yard
Drupal deployment trial on Engine YardDrupal deployment trial on Engine Yard
Drupal deployment trial on Engine Yard
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
 
機械学習でテスト実行を効率化するLaunchable.pdf
機械学習でテスト実行を効率化するLaunchable.pdf機械学習でテスト実行を効率化するLaunchable.pdf
機械学習でテスト実行を効率化するLaunchable.pdf
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 

More from l_b__

Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidBinderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroid
l_b__
 
Binderのはじめの一歩
Binderのはじめの一歩Binderのはじめの一歩
Binderのはじめの一歩
l_b__
 
Open binder
Open binderOpen binder
Open binder
l_b__
 

More from l_b__ (14)

Fuchsia概略その1
Fuchsia概略その1Fuchsia概略その1
Fuchsia概略その1
 
Android,Brillo,ChromeOS
Android,Brillo,ChromeOSAndroid,Brillo,ChromeOS
Android,Brillo,ChromeOS
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
 
Androidのリカバリシステム (Androidのシステムアップデート)
Androidのリカバリシステム (Androidのシステムアップデート)Androidのリカバリシステム (Androidのシステムアップデート)
Androidのリカバリシステム (Androidのシステムアップデート)
 
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidBinderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroid
 
Binderのはじめの一歩
Binderのはじめの一歩Binderのはじめの一歩
Binderのはじめの一歩
 
Open binder
Open binderOpen binder
Open binder
 
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグEclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグ
 
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
Intentの概要
Intentの概要Intentの概要
Intentの概要
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 

Recently uploaded

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Androidの新ビルドシステム