プロジェクトによっては少しプログラムを修正するだけで、ビルドに数分間かかりゲンナリします・・・
1秒でも早くしようと色々ネットの情報を寄せ集めたり、他の開発者から聞いてみたりと色々調べました。
怪しい情報もあるので、試しながら自分の環境で本当に早くなるのか?を確認しつつがよいかと思います。
(間違っていたり、他に情報があればご指摘頂ければと思います。)
1.とにかくCPUとメモリのパワーアップ
GradleビルドはCPUの速さとメモリの容量でスピードが決まるそうです。
マシン、パーツの買い替え、増設、オーバークロックなど物理的変更により速度を上げる。
これができればいうことないです。
2.Instant Runを使う
Instant Runはビルドし直さなくても修正を反映させる方法。
GradleのバージョンやターゲットAPI等を満たせば使えるということですが、
すべて満たしても巨大プロジェクトになると使えなかったり、
修正が反映されなかったりと意外と使えない・・・
小規模プロジェクトでは重宝。
3.gradle.propertiesに設定を記載
お馴染みのやつです。
あまり知られていないですが、
ユーザーディレクトリの下(C:\Users\名前\.gradle)とプロジェクトルートの下と2つあり、
どちらに記載してもよいのですが、同じ項目がある場合はユーザーディレクトリが優先になります。
常に速度を上げたい場合はユーザーディレクトリの下でよいかと思います。
#プロセス内 dex と増分 Java コンパイルを有効
org.gradle.jvmargs=-Xms2048M -Xmx5120M -XX:MaxPermSize=2048M
#並列ビルドモードを有効
org.gradle.parallel=true
#必要な部分をビルド
org.gradle.configureondemand=true
#デーモンプロセスを使う
org.gradle.daemon=true
-Xmx( 最大ヒープサイズ )は公式
https://developer.android.com/studio/run/
によると
javaMaxHeapSize + 1024MBだそうです。
build.gradleの設定が
javaMaxHeapSize "4g"
だったら 5120Mですね。
-XX:MaxPermSizeは クラスファイルをメモリ上に読み込む最大サイズ。
-Xmsは 起動時のヒープサイズでこちらも設定すると早くなりました。
しかし、Xmsは強制的にメモリをとるので、複数プロジェクトを立ち上げるとメモリ不足で怒られます。
ちなみにタスクマネージャーを見ながら色々数字を上げて行ったら(20Gぐらいまで)、数字を上げれば上げるだけ速くなりました。
途中から気のせいぐらいの速度アップですけど・・・
4.build.gradleでリソースを制限
画像ファイルが多いプロジェクトで有効。
defaultConfig {
resConfigs "ja", "xxhdpi"
などテストする端末のリソースだけをコンパイルするように設定する。
リリース時はもちろん忘れずに戻す。
5.Gradleをオフラインに設定
setting → Build.Execution,Deployment → Gradle
にある[Offline work]にチェックを入れる。
必要になったらチェックを外さないといけないのはやや面倒。
6.ハードディスクをSSDに変更
こちらも物理的な変更。
プロジェクトの保存ディスクをSSDにして読み書きを少しでも早くする。
身近で1割ぐらい早くなったという報告がありましたが、体感なので具体的にはわからない。
7.GradleのキャッシュをRAM DISKに変更
キャッシュの読み書き部分をRAM DISKへのリンクにする。
これも若干早くなる可能性があるとのことだったが、実感できなかった。
結構面倒。
8.不要なプラグインを削除
SDKマネージャーからいらないと思われれるPluginを削除することで高速化ができるとのこと。
確かにCVSとかkotlinとか環境によってはいらない。
9.minSdkVersionを23以上にする
Android SDKの最低バージョンを23に設定することで速くなるらしい。
これはとても効果を実感できた。
これもリリースの時は忘れずに戻す。
10.Gradleのバージョンを上げる。
最新のほうが早いとのことです。