how to improve gradle build speed

31
How to improve Gradle build speed Fate Chang 2016/05/18 Google I/O Extended 2016 Taipei

Upload: fate-chang

Post on 13-Apr-2017

3.930 views

Category:

Mobile


1 download

TRANSCRIPT

Page 1: How to improve gradle build speed

How to improve Gradle build speed

Fate Chang2016/05/18

Google I/O Extended 2016 Taipei

Page 2: How to improve gradle build speed

About me

● Fate Chang● Leopard Mobile● Android developer● Focus on architecture and performance● 1000th member of GCPUG.TW● fb.me/fate.tw● +FateChang

Page 3: How to improve gradle build speed

When build is so slow...It’s easily distracted.

Page 4: How to improve gradle build speed

Why build so slow

● Slow computer● Not enough memory● Complicate project● Old version tools● Wrong setting● Slow network● ...

Page 5: How to improve gradle build speed

We got a chance to try it● Try our Gradle configuration on Mac Pro● Our project CMSecurity release build time around 2 mins.● Can we make it faster?● At this moment Gradle daemon is all I know

Page 6: How to improve gradle build speed

Let’s Do It!Step by step

Page 7: How to improve gradle build speed

Profiling

● Example project : https://github.com/google/iosched● Checkout from github● Setup baseline

○ $ ./gradlew assembleDebug --dry-run○ Run above command several time ○ Get average time○ Total time: 6.371 secs

Page 8: How to improve gradle build speed

--dry-run

● Runs the build with all task actions disabled○ Sometimes you are interested in which tasks are executed in which order

for a given set of tasks specified on the command line, but you don't want the tasks to be executed.

Page 9: How to improve gradle build speed

--profile

● $ ./gradlew assembleDebug --dry-run --profile○ --profile parameter will generate profile report page○ Total build time : 7.809s

● $ open build/reports/profile/profile-2016-05-18-15-18-07.html

Page 10: How to improve gradle build speed

--configure-on-demand

● $ ./gradlew assembleDebug --dry-run --profile --configure-on-demand

● Total build time : 6.704s

Page 11: How to improve gradle build speed

--daemon

● $ ./gradlew assembleDebug --dry-run --profile --configure-on-demand --daemon

● Total build time : 2.663s

Page 12: How to improve gradle build speed

Notes of using Gradle daemon

DON’T USE GRADLE DAEMON ON CI.When should I not use the Gradle Daemon

https://docs.gradle.org/current/userguide/gradle_daemon.html#when_should_i_not_use_the_gradle_daemon

How does the Gradle Daemon make builds faster

https://docs.gradle.org/current/userguide/gradle_daemon.html#N1056F

Page 13: How to improve gradle build speed

--parallel

● $ ./gradlew assembleDebug --dry-run --profile --configure-on-demand --daemon --parallel

● Total build time : 2.382s

Page 14: How to improve gradle build speed

The improvement7.832s -> 2.382s

Page 15: How to improve gradle build speed

Other useful Gradle parameter

● --info○ Output more log during build.

● --offline○ Set Gradle to operate without accessing network

resources.○ Note : should remove --offline to check consistency

when library upgraded.● More docs : https://docs.gradle.

org/current/userguide/gradle_command_line.html

Page 16: How to improve gradle build speed

How to add parameters in Android Studio

Page 18: How to improve gradle build speed

Multidex enabled sample project result

Scenario: Clean project and rebuild.

$ ./gradlew clean

$ ./gradlew assembleXxxxx --configure-on-demand --daemon --parallel --offline --info

minSdkVersion 14

Total time: 63.168s secs

minSdkVersion 21

Total time: 52.029 secs

Page 19: How to improve gradle build speed

That’s All?

Page 20: How to improve gradle build speed

Most recent changes

● Newer Gradle version performance is better○ In 2.13 release notes, measured up to 25% improvements○ Ref : https://docs.gradle.org/2.13/release-notes

● Faster Android Studio Builds with Dex In Process○ Enabled in Android Studio 2.1○ Modify gradle.properties○ org.gradle.jvmargs=-Xmx2048m○ Ref : https://medium.com/google-developers/faster-android-studio-builds-

with-dex-in-process-5988ed8aa37e

Page 21: How to improve gradle build speed

Update Gradle Android Plugin Version.

If you upgrade Android Studio to 2.1.x recently, you’ll see this dialog

Note: Update Gradle plugin up to 2.x, Intstant run is default enabled

Page 22: How to improve gradle build speed

If yout don’t update in previous dialog, you can update configuration manually.

Update Gradle Android Plugin Version Manually In Android Studio

Page 23: How to improve gradle build speed

Android Studio 2.1 new feature

● Dex In Process● This can dramatically increase the speed of

full clean build.● Should update Android plugin version to 2.1.0

as well.

Page 24: How to improve gradle build speed

Make dex in process running

If you add dexOptions in build.gradle

You may see this message.

Page 25: How to improve gradle build speed

Dex in process not working log

Build with --info parameter

If you see Dexing out-of-process log, it’s not working.

Page 26: How to improve gradle build speed

Let’s add setting to gradle.properties

org.gradle.daemon=trueorg.gradle.configureondemand=trueorg.gradle.parallel=trueorg.gradle.jvmargs=-Xmx5120m

Don’t commit these config to version control.or yout can use -Dorg.gradle.jvmargs=-Xmx5120m parameter in command line

Page 27: How to improve gradle build speed

Still not working?

Reduce javaMaxHeapSize

Build with --info parameter

If you see Dexing in-process log, you’re all set.

Page 28: How to improve gradle build speed

Speed Up In CMSecurity

Build time from 2 mins 20s to less than 1 min. (Tested on MBPR 15” mid 2012 16GB Ram)

Page 29: How to improve gradle build speed

Slow in Android Studio but fast in command line?

Try disable Instant Run.

Page 30: How to improve gradle build speed

Summary

● Faster CPU is better!● Use latest gradle version (2.13)● Use latest android plugin (2.1.0)● Adjust setting according to your memory● Disable Instant Run, unless you really need it.

One setting won’t fit all, you need to try the combination for best result

Note : Use retrolambda will cause rebuild each time.