Androidのビルド&インストール&確認をコマンドラインにしたらなぜか高速化した

Android StudioのRUNが遅い

2017年3月現在、Android Studio 2.3 (Gradle Plugin 2.3) から普通にappモジュールをRUNしてビルド&インストールするとめちゃくちゃ時間がかかる。
Gradle > Offline work にチェックを入れているし Instant Run も有効にしているが、自分のプロジェクトはビルド&インストール完了に2分もかかる。
コマンドラインからビルド&インストール&起動用のIntent発行するようにしたら劇的に早くなったので共有したい。

(追記:本記事は「わたしの環境で」「なぜかコマンドラインでやるのと同様の設定をしてもAndroid Studio上では遅い」のをコマンドラインにしたら「たまたま速くなった」という例であり、読者全員にこの設定を推奨するものではないのでご容赦願いたい。タイトルも若干修正した。)

gradle.properties

gradle.properties に次の設定を仕込んで置くと2回目以降のビルドが劇的に速くなる。

# デーモン化
org.gradle.daemon=true

# Xmxはお使いの環境に合わせて調整ください
org.gradle.jvmargs=-Xmx2560m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# 並列ビルド
org.gradle.parallel=true

# 関係のあるプロジェクトのみビルド
org.gradle.configureondemand=true

この設定は入れてるんだけどAndroid Studioからだと遅い。なぜだ。

コマンドラインからビルド

一回だけ ./gradlew check 1とかして Dependencies を解決し、以後は --offline でひたすらビルドするという流れ。

% ./gradlew check    # 1度だけ実行
% ./gradlew --offline assembleDebug
% adb install -r ./app/build/outputs/apk/app-debug.apk
% adb shell monkey -p [com.your.package] -c android.intent.category.LAUNCHER 1

これを alias builddebug みたいにして全部つなげてコマンド1発で実行できるようにする。

まとめ

% export PROJECT_HOME="$HOME/path/to/your_project"
% alias builddebug="cd $PROJECT_HOME && ./gradlew --offline assembleDebug && adb install -r ./app/build/outputs/apk/app-debug.apk && adb shell monkey -p [com.your.package] -c android.intent.category.LAUNCHER 1"
% builddebug
(中略)
BUILD SUCCESSFUL
Total time: 20.864 secs

20秒!これなら捗る。

謝辞

  • Xmx に関する注意書きを追加
  • XX:MaxPermSize -> XX:MaxMetaspaceSize
  • assemble clean を削除

詳しくはコメント欄と編集履歴を参照ください。
@kimukou さんありがとうございます(^o^)


  1. ここでの自分の意図は、 Dependency Resolution をキャッシュしてしまうことです。従って ./gradlew tasks でも ./gradlew assemble で1回ビルドしてしまっても何でも構いません。とにかくその後 ./gradlew --offline できれば良いです。 

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.