Google I/O 2017のSpeeding up your Android Gradle builds(ビルド高速化)で発表された10のTipsです。
Tips
Tips 1: 最新のGradle Pluginを使う
https://maven.google.com から最新のgradle pluginを使う。
Tips 2: レガシーなMultiDexは避ける
レガシーなMultiDexとは、MultiDexかつminSdkVersionが21未満のこと。
開発buildのときだけ21にすれば良いらしい。
Tips 3: multi-APKを無効化する
sprits()
ブロックは開発中は不要なので開発buildのときは無効化する。
Preferencesの左カラムでBuild, Excution, Deployment
->Compiler
を選択後、Command-line Options
に-PdevBuild
を入力。
build.gradleに以下を追記。(セッションで紹介されていた例)
android {
if (project.hasProperty('devBuild')) {
splits.abi.enable = false
splits.density.enable = false
}
}
Tips 4: 最小のリソースを含める(言語とDPIを指定する)
開発buildは言語とDPIを指定する。
例: resConfig("en", "xxhdpi")
Tips 5: PNGのcrunchingは無効化する
Android Studioが最適化してくれるので不要。
aaptOptions.cruncherEnables = false
を指定する。
もしくはWebPを使えないか検討する。
Tips 6: Instant Runを使う
(^-R
) :
(⌘-F10
)
Tips 7: Manifestの不用な変更は避ける
ManifestのversionCodeが動的に変わるような設定(例えば日時がversionに付与されるような設定)だとFull Buildが走るので避ける。
開発buildは固定値になるようにする。
Tips 8: dependenciesの動的バージョンは避ける
compile 'com.android.support:appcompat-v7:+'の+
のこと。
最新バージョンがないかを探しにいってしまうので固定バージョンにする。
Tips 9: メモリに注意する
gradle.propertiesのorg.gradle.jvmargs=-Xmx1536m
を試してみる。
build.gradleのdexOption
でjavaMaxHeapSize = "4g"
とかになってる場合は注意。
Tips 10: Gradleのキャッシュを有効化する
Gradle 3.5からgradle.propertiesにorg.gradle.caching
が追加されたので有効化する。
おまけTips: Crashlyticsを無効化する
以下の設定すれば開発buildのときはCrashlyticsを無効に出来ます。
android {
buildTypes {
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
...
(参考)
[Build Tools — Fabric for Android documentation]
(https://docs.fabric.io/android/crashlytics/build-tools.html?gradle#build-tools)
結果
以上のTipsを全部やったらこのくらい各種build早くなったそうです。(Santa Trackerの場合)
Full Build | Incremental Build (Java Change) | Incremental Build (Resource Change) |
---|---|---|
3倍 | 12倍 | 3倍 |
各種Tipsの効果
Tips | Full Build | Incremental Build (Java Change) | Incremental Build (Resource Change) |
---|---|---|---|
1: 最新のGradle Pluginを使う | -25% | -38% | -16% |
2: レガシーなMultiDexは避ける | -12% | -53% | 0% |
3: multi-APKを無効化する | -12% | -6% | -26% |
4: 最小のリソースを含める(言語とDPIを指定する) | -17% | -24% | -21% |
5: PNGのcrunchingは無効化する | -33% | 0% | 0% |
6: Instant Runを使う | +37% | -54% | -42% |
7: Manifestの不用な変更は避ける | - | +130% | +90% |
8: dependenciesの動的バージョンは避ける | - | - | - |
9: メモリに注意する | - | - | - |
10: Gradleのキャッシュを有効化する | -25% | 0% | +12% |