14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AndroidAdvent Calendar 2017

Day 22

MainframerでAndroidアプリのビルドを爆速化する

Posted at

Androidアプリのビルド、遅くて重くて、辛いですよね?
ビルド中に、ブラウジングなり、Twitterなりをすれば良いんですが、マシンが重くてまともに見れないときもあります。ラップトップのバッテリー消費も激しいですよね。

長い間、Androidアプリのビルド高速化については議論されており、様々な解決法がありますが、今回は高性能なリモートマシンを用いる方法でこれらの問題を解決します。
一見、リモートビルドは面倒な印象があると思いますが、今回はMainframerというツールとそのプラグインを用いることでサクッと仕組みを構築していきたいと思います。

Mainframerとは、リモートマシンビルドをサポートするツールのことです。ファイルの同期、ビルドコマンドの実行、生成物の転送を自動で行ってくれます。このツールがGradleに対応していて、Androidのビルドに使うことができるので、今回はこれを用います。

Mainframe、皮肉なことに時代は繰り返していくのでしょうか。

リモートマシンの準備

まず、ローカルマシンよりも高性能なリモートマシンを用意します。
自宅、学校、会社のマシンか、EC2やGCEを用いても良いでしょう。

マシンの用意ができたら、Androidアプリのビルドができるよう下準備を行いましょう。
基本的に必要なのはJDK8のインストール、Android SDKの設定(インストール、ライセンス承諾、環境変数ANDROID_HOMEの設定)です。
ここでは説明を省きますが、Androidアプリのビルド用Dockerfile作成の記事などを参考にすると良いと思います。
DockerでAndroidアプリをビルドする

少し引っかかってしまったのですが、環境変数ANDROID_HOMEをSSH経由の接続でも利用できるようにしておいてください。
[FREEBSD][LINUX] SSH経由でコマンド実行すると環境変数を読まないでござる

そして、SSH経由で公開鍵認証を用いてリモートマシンにアクセスできるように~/.ssh/configを設定してください。
また、configに以下の記述を加えることで、連続的な接続を高速化します。

ControlMaster auto
ControlPath ~/.ssh/mux-%r@%h:%p
ControlPersist 1h

ローカルマシンの設定

リモートマシンの準備ができたので、次はローカルマシンの設定を行いましょう。

Mainframerの作者が利用を推奨しているMainframer Integrationというプラグインを、Android Studioに導入します。
導入が完了したらCtrl+Shift+Aで表示されたダイアログでConfugure Mainframer in Projectを選択します。

Screenshot from 2017-12-24 12-10-43.png

Remote machine nameは先程~/.ssh/configで設定したリモートマシンのホスト名を入力します。
Default build commandはリモートマシンで実行したいビルドコマンドを入力します。
基本的には./gradlew assembleDebugになると思いますが、Build Variantsを切り替えたい場合は、タスク名を適宜置き換えてください。

Screenshot from 2017-12-24 12-17-19.png

入力が終われば、OKをクリックします。

再度、Ctrl+Shift+Aでダイアログを表示させ、Inject or restore Configurationを選択します。

Screenshot from 2017-12-24 12-24-59.png

このダイアログにて、既存のConfigurationを変更します。
基本的に画像の通りにチェックすればいいでしょう。
Screenshot from 2017-12-24 12-25-28.png

OKをクリックします。

ビルド

さて、各種設定が終わったのでいつものようにビルドしてみましょう。
初回はSDKのダウンロード等があるので結構時間がかかります。
また、ツールバーに追加されたTurn Mainframer on/offボタンでリモートビルドするかローカルビルドするかスイッチすることができます。

結論

どうでしょうか。どれくらいビルドが高速化されましたか?
高速化というだけではなく、端末が重くならないというのも良いところですよね。
個人で使う分には贅沢ですが、GCEでそこそこのコア数のマシンを用いると、ビルド時間が圧倒的に短くなりますね!
みなさんも快適なビルド生活を送りましょう!

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?