Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
How to improve Gradle build
speed
Fate Chang
2016/05/18
Google I/O Extended 2016 Taipei
About me
● Fate Chang
● Leopard Mobile
● Android developer
● Focus on architecture and performance
● 1000th member of GCPU...
When build is so slow...
It’s easily distracted.
Why build so slow
● Slow computer
● Not enough memory
● Complicate project
● Old version tools
● Wrong setting
● Slow netw...
We got a chance to try it
● Try our Gradle configuration on Mac Pro
● Our project CMSecurity release build time around 2 m...
Let’s Do It!
Step by step
Profiling
● Example project : https://github.com/google/iosched
● Checkout from github
● Setup baseline
○ $ ./gradlew asse...
--dry-run
● Runs the build with all task actions disabled
○ Sometimes you are interested in which tasks are executed in wh...
--profile
● $ ./gradlew assembleDebug --dry-run --profile
○ --profile parameter will generate profile report page
○ Total ...
--configure-on-demand
● $ ./gradlew assembleDebug --dry-run --profile --configure-
on-demand
● Total build time : 6.704s
--daemon
● $ ./gradlew assembleDebug --dry-run --profile --configure-
on-demand --daemon
● Total build time : 2.663s
Notes of using Gradle daemon
DON’T USE GRADLE DAEMON ON CI.
When should I not use the Gradle Daemon
https://docs.gradle.or...
--parallel
● $ ./gradlew assembleDebug --dry-run --profile --configure-
on-demand --daemon --parallel
● Total build time :...
The improvement
7.832s -> 2.382s
Other useful Gradle parameter
● --info
○ Output more log during build.
● --offline
○ Set Gradle to operate without accessi...
How to add parameters in Android
Studio
Optimizing Multidex Development Builds
Ref:https://developer.android.com/studio/build/multidex.
html#dev-build
Multidex enabled sample project result
Scenario: Clean project and rebuild.
$ ./gradlew clean
$ ./gradlew assembleXxxxx --...
That’s All?
Most recent changes
● Newer Gradle version performance is better
○ In 2.13 release notes, measured up to 25% improvements
...
Update Gradle Android Plugin Version.
If you upgrade Android Studio to 2.1.x recently,
you’ll see this dialog
Note: Update...
If yout don’t update in previous dialog, you can update
configuration manually.
Update Gradle Android Plugin Version Manua...
Android Studio 2.1 new feature
● Dex In Process
● This can dramatically increase the speed of
full clean build.
● Should u...
Make dex in process running
If you add dexOptions in build.gradle
You may see this message.
Dex in process not working log
Build with --info parameter
If you see Dexing out-of-process log, it’s not
working.
Let’s add setting to gradle.properties
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
o...
Still not working?
Reduce javaMaxHeapSize
Build with --info parameter
If you see Dexing in-process log, you’re all set.
Speed Up In CMSecurity
Build time from 2 mins 20s to less than 1 min.
(Tested on MBPR 15” mid 2012 16GB Ram)
Slow in Android Studio but fast in
command line?
Try disable Instant Run.
Summary
● Faster CPU is better!
● Use latest gradle version (2.13)
● Use latest android plugin (2.1.0)
● Adjust setting ac...
References
● 6 tips to speed up your Gradle build
○ https://medium.com/@shelajev/6-tips-to-speed-up-your-gradle-build-
3d9...
Upcoming SlideShare
Loading in …5
×

How to improve gradle build speed

4,370 views

Published on

Some tips to help you reduce build time of an Android project.
Based on Android Studio 2.1.1 and the most recent change of android gradle plugin 2.1.0

Published in: Mobile
  • Be the first to comment

How to improve gradle build speed

  1. 1. How to improve Gradle build speed Fate Chang 2016/05/18 Google I/O Extended 2016 Taipei
  2. 2. About me ● Fate Chang ● Leopard Mobile ● Android developer ● Focus on architecture and performance ● 1000th member of GCPUG.TW ● fb.me/fate.tw ● +FateChang
  3. 3. When build is so slow... It’s easily distracted.
  4. 4. Why build so slow ● Slow computer ● Not enough memory ● Complicate project ● Old version tools ● Wrong setting ● Slow network ● ...
  5. 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
  6. 6. Let’s Do It! Step by step
  7. 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. 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. 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
  10. 10. --configure-on-demand ● $ ./gradlew assembleDebug --dry-run --profile --configure- on-demand ● Total build time : 6.704s
  11. 11. --daemon ● $ ./gradlew assembleDebug --dry-run --profile --configure- on-demand --daemon ● Total build time : 2.663s
  12. 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. 13. --parallel ● $ ./gradlew assembleDebug --dry-run --profile --configure- on-demand --daemon --parallel ● Total build time : 2.382s
  14. 14. The improvement 7.832s -> 2.382s
  15. 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
  16. 16. How to add parameters in Android Studio
  17. 17. Optimizing Multidex Development Builds Ref:https://developer.android.com/studio/build/multidex. html#dev-build
  18. 18. 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
  19. 19. That’s All?
  20. 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. 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. 22. If yout don’t update in previous dialog, you can update configuration manually. Update Gradle Android Plugin Version Manually In Android Studio
  23. 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. 24. Make dex in process running If you add dexOptions in build.gradle You may see this message.
  25. 25. Dex in process not working log Build with --info parameter If you see Dexing out-of-process log, it’s not working.
  26. 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. 27. Still not working? Reduce javaMaxHeapSize Build with --info parameter If you see Dexing in-process log, you’re all set.
  28. 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. 29. Slow in Android Studio but fast in command line? Try disable Instant Run.
  30. 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. 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

×