DroidConSF 2017 (.droidconSF) の「Make Your Build Great Again」で発表されたビルド高速化Tipsの紹介になります。
はじめに
- スライドはSpeaker Deckに公開されてます。
- 動画は近日中に公開予定だそうです。
- (12/6追記)公開されました https://www.youtube.com/watch?v=rvwAlbtbtmM
- 国内の.droidconSF 2017報告会でも「Build高速化の話」として発表がありました。
非常に役たちそう、かつコードをコピーして使いたかったので記事としてまとめました。 - 各Tipsをやることでなぜ高速化するかや注意点などは上記スライドを参照してください。
- 【Android】Google I/O 2017のSpeeding up your Android Gradle buildsで発表された10のTipsと被っている内容は省略しています。
Tips
gradle.properties最適化
Gradle specific
# Gradle daemon有効化
org.gradle.daemon=true
# daemonのヒープサイズを増やす
org.gradle.jvmargs=-Xmx2048m
# 並列ビルド有効化
org.gradle.parallel=true
# Configure on Demand有効化
org.gradle.configureondemand=true
# キャッシュ有効化
org.gradle.caching=true
Android specific
# ビルドキャッシュ有効化
android.enableBuildCache=true
# 新しいDexコンパイラ有効化
android.enableD8=true
テスト分割実行
tasks.withType(Test) {
def maxCount = gradle.startParameter.maxWorkerCount
maxParallelForks = (maxCount < 2) ? 1 : maxCount / 2
forEvery = 100
}
参照するリポジトリを減らす
repositories {
jcenter()
mavenCentral()
maven{url "https://plugins.gradle.org/m2/"}
google()
maven{url "https://jitpack.io"}
}
↓
repositories {
maven{url "https://plugins.gradle.org/m2/"}
google()
}
インクリメンタルビルドを有効化する
tasks.withType(JavaCompile) {
options.incremental=true
options.fork=true
}
レガシーなMultiDexは避ける
minSdkVersion 19
↓
minSdkVersion rootProject.hasProperty("lollipop") ? 21 : 19
CIでpre-dexライブラリを無効化する
android {
dexOptions {
preDexLibraries = !project.hasProperty("ci")
}
}
補足
間違ってる点あればご指摘ください。
参考
Make Your Build Great Again (DroidConSF 2017) // Speaker Deck
https://speakerdeck.com/jaredsburrows/make-your-build-great-again-droidconsf-2017
Build高速化の話 // Speaker Deck
https://speakerdeck.com/kobitokaba/buildgao-su-hua-falsehua
【Android】Google I/O 2017のSpeeding up your Android Gradle buildsで発表された10のTips - Qiita
https://qiita.com/rkowase/items/808064f16272e131be63
.droidconSF 2017報告会 @ミクシィ - connpass
https://mixi.connpass.com/event/70645/