追加
2017-06-21 これを使ったほうがcoolです。 gojuno/mainframer: Tool for remote builds. Sync project to remote machine, execute command, sync back.
2016-11-21 23:44 テストに対応
2016-11-14 13:12 クラウドでの実行方法追記
この記事を3行で
Androidはビルドが重い。
CPU100%なので開発マシンがその間使えない。
別のマシンでビルドする。
問題
遅い、遅い、AndroidStudioのビルドが、遅い。
とりあえずビルドを始めるとこうなる。
これが、これくらい続く
この間はAndroidStudioでコード入力も出来ない。ブラウジングもできない。本を読むしか無い。お陰で積ん読が減った。でも納期はやってくる。
ビルドが重いのは仕方ない。そこはもうGoogleに任せるしか無い。せめて、ビルドしてる間
- 他のソース読んだり
- コメント書いたり
- ブラウジングしたり
その時間だけでも確保したい。
ここではビルドを高速化する
のではなくビルド中に開発マシンのCPUリソースを食いつぶすのを防ぐ
ことに着目してみました。
重い原因
- kotlinによる開発
- Dagger2, DBFlow などのソースコード自動生成ツール
- ProGuardによる難読化とか
- 共通モジュール参照
などなど色んな事が重なって日に日にビルドが重くなってきた。んだと思う。
対策1 有志によるAndroidStudioPluginを使う
Android Studioでのビルドをクラウドで行い開発を高速化する - Unyablog.
大人気のこの記事で解決するやんけ! で試してみたけど、AndroidStudio 2.2 ではもう動かなくなってた・・・。ちょっといじれば2.2でも使えるかな?と思ったけど、全然わからなかった・・・。
対策2 速くならなくてもいいので開発マシンが専有されないようにする
でもこの仕組み、無理にAndroidStudioでやらなくてもシェルでいいよなぁ。pythonのfabricでいいよなぁと思ったので作ってみた。
また、お金かかるのでクラウドじゃなくて、mac mini が余ってたのでそれでビルドするようにしました。
手元のPCで動かす
スクリプト書いたよ!
https://gist.github.com/shikajiro/90cdbdac652cf37a563840d812d73c5b
クラウドで動かす
@sys1yagi さんが Googleのクラウド GCE で構築したみたいです。オヌヌメ
AndroidアプリケーションをGoogle Compute Engineのインスタンスでビルドする
インストール
1.プロジェクトのルートディレクトリに上のスクリプトファイルを置く
2.ビルドする別マシンのipaddressとか設定する。
3.ビルドするアプリのmodule名、flavor名、debugか否かを設定する。
4.別マシンでもビルドができる環境を作る
5-1.$ fab build
でいつものビルドのように動作する。コンパイル、インストールが終わればActivityが起動する。
5-2.$ fab test
で、テストもできる。結果はブラウザに表示される。 $ fab android_test
,$ fab test_all
もできます。
スクリプトの流れ
1.開発中のコードを空いている別マシンにコピーする。
2.別マシンでビルドする。
3.別マシンからビルドしたapkを持ってきてインストールする。
4.アプリを起動する。
計測結果
普通のビルドより余計にかかる時間を計測しました。
環境
場所 | 回線 | 室内環境 |
---|---|---|
自宅 開発マシン | 光回線 | ルータ -> wifi -> マシン |
事務所 別マシン | 光回線 | ルータ -> wifi -> マシン |
実行時間
- ソースコードの同期・・・2秒超 (変更したテキストファイル3つ)
- apkファイルのダウンロード・・・12秒超 (8MB)
ビルド時間が分超えるなら許容範囲だと思います。
次はLTEでのテザリングで試しました。
環境
場所 | 回線 | 室内環境 |
---|---|---|
カフェ 開発マシン | LTE | Android -> テザリング -> マシン |
事務所 別マシン | 光回線 | ルータ -> wifi -> マシン |
実行時間
- ソースコードの同期・・・3秒超 (変更したテキストファイル3つ)
- apkファイルのダウンロード・・・33秒超 (8MB)
やっぱりapkのダウンロードが遅い。速さを求めるなら控えたほうが良さそうですね。
でも、出先でバッテリー使わないのはすごく良い!!