【Android】Google I/O 2017のSpeeding up your Android Gradle buildsで発表された10のTips

  • 45
    いいね
  • 3
    コメント

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
    }
}

a.png

Tips 4: 最小のリソースを含める(言語とDPIを指定する)

開発buildは言語とDPIを指定する。
例: resConfig("en", "xxhdpi")

Tips 5: PNGのcrunchingは無効化する

Android Studioが最適化してくれるので不要。
aaptOptions.cruncherEnables = falseを指定する。
もしくはWebPを使えないか検討する。

Tips 6: Instant Runを使う

:arrow_forward: (^-R) : :no_good:
:zap: (⌘-F10) :ok_woman:

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のdexOptionjavaMaxHeapSize = "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

結果

以上の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%

ソース: https://github.com/google/santa-tracker-android