兆候
今日はいつになくAndroid Studioの挙動が重かった。
前の仕事でもビルドが重いことがあった。
ビルドに3分4分かかることなんてザラで、ビルドするデーモンプロセスを常駐化させたりとチューニングしても効果が薄かった。
でも今日は違った。
大したコード量も書いてないし、確かにDataBinding使ったり、DIツール導入したりしたけど、そんなビルドで重くなるような要素にはならないなと。
それでも、ビルドするのに12分かかった。
どんどん重くなっていった。
そしてビルドエラーにたどり着いた。
GC overhead limit exceeded
またポエム書いちゃった。
単刀直入に言えば、
transformJackWithjackfordebug
というタスクでビルドエラー吐く。
そのあとに続くメッセージが
GC overhead limit exceeded
だった。
詳しく分析してないけど、gradleのスクリプト走らせる時のJVMのヒープサイズが小さいとよく起こる問題らしい。
jackコンパイラがヒープめっちゃ使うのかも。
なお
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
を指定している前提でした。
解決方法
android {
dexOptions {
javaMaxHeapSize "2g"
}
}
これ指定するだけで、ビルドからエミュレータまでの転送時間が2、3秒になった。
うそでしょ
追記
Androidアプリのビルドを高速化するDex In Processが有効になる条件
この記事によると、 gradle.properties
の
org.gradle.jvmargs
の値を javaMaxHeapSize
を超えてないとダメみたい。
こういう関係性
javaMaxHeapSize
< org.gradle.jvmargs
追伸
同じエラーで、これで解決しなかったらごめんなさいm(_ _)m