AndroidのBuildを別マシンで行うスクリプト書いたった

  • 72
    いいね
  • 0
    コメント

追加

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のビルドが、遅い。
とりあえずビルドを始めるとこうなる。
Screen Shot 2016-11-03 at 23.52.31.png
これが、これくらい続く
Screen Shot 2016-11-03 at 23.55.37.png
この間は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のダウンロードが遅い。速さを求めるなら控えたほうが良さそうですね。 でも、出先でバッテリー使わないのはすごく良い!!