[Android] ビルドを高速化できるかもしれない方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

背景

ビルド遅いですよね。
私は1ビルド3分くらいかかっているので、その間にトイレに行って帰ってきてもまだビルドが終わっていません。 なんとか早くしたいと思い調べたことを共有します。

対策

  • javaバージョンを最新にする
    もし古いバージョンを使っているのであればアップデートした方が早くなります。

  • gradleバージョンを最新にする
    gradleのバージョンも可能ならアップデートすることで早くなります。

  • Dynamic Versionsを避ける

    compile 'com.google.android.gms:play-services:8.4.+'
    

    [x.y.+]のように記述するとgradleが最新を見に行くのでその分遅くなるそうです。

  • Offline workを有効にする

Android Studioで「Preference」→「Build,Execution,Deployment」→「Gradle」と進み offlinework と書かれたチェックボックスにチェックを入れると、最新を確認する作業をしなくなるので、build.gradleに何も追加していない時はチェックを外してビルドをしても影響はありません。

gradle.propertyに以下の記述を追加することで早くなるそうです。

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true
  • org.gradle.jvmargs
    デーモンプロセスに渡すJVM引数を指定するのでorg.gradle.daemon=trueの時に有効になります。有効デフォルト値はメモリに応じて適切に設定されるようです。
  • org.gradle.parallel=true この設定を行うと、Gradleの並列ビルドモードが有効化されます。
  • org.gradle.configureondemand=true マルチプロジェクトで利用すると効果が有るそうです。
  • org.gradle.daemon=true trueに設定するとデーモンによりビルドが実行されるので2回目以降のビルドが早くなります。

bazelのリリースまで待つ

BazelとはGoogleが社内で使用していたビルドツールをオープンソース版として開発をしているものなので期待しています。
DroidKaigiでbazelについてのお話がありました。

ロードマップのstable版のリリースが伸びたようですね。
それと今は使ってみても早くなかったらしいので、もう少し待つ必要がありそうです。