Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

追加

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のダウンロードが遅い。速さを求めるなら控えたほうが良さそうですね。 でも、出先でバッテリー使わないのはすごく良い!!
zozotech
70億人のファッションを技術の力で変えていく
https://tech.zozo.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away