This document discusses how to improve the speed of Gradle builds. It recommends using the Gradle daemon, configuring on demand, building in parallel, and using newer versions of Gradle and the Android Gradle plugin. Profiling a sample project showed build times could be improved from 7.8 seconds to 2.4 seconds using these techniques. Updating dependencies and disabling Instant Run in Android Studio may also help increase build speeds.
1. How to improve Gradle build
speed
Fate Chang
2016/05/18
Google I/O Extended 2016 Taipei
2. About me
● Fate Chang
● Leopard Mobile
● Android developer
● Focus on architecture and performance
● 1000th member of GCPUG.TW
● fb.me/fate.tw
● +FateChang
4. Why build so slow
● Slow computer
● Not enough memory
● Complicate project
● Old version tools
● Wrong setting
● Slow network
● ...
5. 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
7. 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
8. --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.
9. --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
11. --daemon
● $ ./gradlew assembleDebug --dry-run --profile --configure-
on-demand --daemon
● Total build time : 2.663s
12. 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
13. --parallel
● $ ./gradlew assembleDebug --dry-run --profile --configure-
on-demand --daemon --parallel
● Total build time : 2.382s
15. 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
20. 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
21. 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
22. If yout don’t update in previous dialog, you can update
configuration manually.
Update Gradle Android Plugin Version Manually
In Android Studio
23. 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.
24. Make dex in process running
If you add dexOptions in build.gradle
You may see this message.
25. Dex in process not working log
Build with --info parameter
If you see Dexing out-of-process log, it’s not
working.
26. Let’s add setting to gradle.properties
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx5120m
Don’t commit these config to version control.
or yout can use -Dorg.gradle.jvmargs=-Xmx5120m parameter in command
line
27. Still not working?
Reduce javaMaxHeapSize
Build with --info parameter
If you see Dexing in-process log, you’re all set.
28. Speed Up In CMSecurity
Build time from 2 mins 20s to less than 1 min.
(Tested on MBPR 15” mid 2012 16GB Ram)
29. Slow in Android Studio but fast in
command line?
Try disable Instant Run.
30. 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.
31. References
● 6 tips to speed up your Gradle build
○ https://medium.com/@shelajev/6-tips-to-speed-up-your-gradle-build-
3d98791d3df9
● Faster Android Studio Builds with Dex In
Process
○ https://medium.com/google-developers/faster-android-studio-builds-with-
dex-in-process-5988ed8aa37e