Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Boris Farber & Nikita Kozlov - The_Build_Side_o...

Boris Farber & Nikita Kozlov - The_Build_Side_of_Android_App

droidcon Berlin

July 17, 2018
Tweet

More Decks by droidcon Berlin

Other Decks in Programming

Transcript

  1. The Build Side of an Android App Nikita Kozlov Zalando

    SE @Nikita_E_Kozlov Boris Farber Google @borisfarber
  2. Background • Build improvement is the most requested feature from

    developers • Worked with a few companies to speed up their builds • Share best practices and patterns
  3. Problem • You add new features, libraries and frameworks. •

    You refactor your code to smaller classes, add tests • Somehow, the build times add up
  4. Build challenge • Analysing build takes time • Difficult to

    estimate and prioritize • Build improvement might be ambiguous
  5. Our process Create a test project Implement suggestion Test &

    Measure Implement within a real project Android Studio Poet Gradle Profiler*
  6. Versions we tested • Gradle: 4.3.1 to 4.8 • Android

    Gradle Plugin: from 3.0.1 to 3.1.2 • Kotlin: from 1.1.60 to 1.2.50
  7. Dexing is a limiting step .CLASS .CLASS .CLASS .DEX .DEX

    .DEX Will be faster if min SDK is 21 .CLASS
  8. Incremental build with min SDK 21 Set min SDK to

    21 during development to increase your build speed
  9. Hardware MacBook Pro 2015 • 13-inch • 2.7 GHz Intel

    Core i5 • 16 GB 1867 MHz DDR3 MacBook Pro 2017 • 15-inch • 2,8 GHz Intel Core i7 • 16 GB 2133 MHz LPDDR3 vs
  10. Modularization - theory Module 2 Module 3 Module 1 App

    Module App Module Key principles: 1. Parallelization 2. Caching 3. Compile avoidance
  11. Compile Avoidance App Feature Incremental build after a change of

    method’s body in Feature: 8s Incremental build after a adding a public method to Feature: 10s
  12. Extracting rarely-changed code reduces build time App Incremental build with

    a change in App: 55s Incremental build with a change in App: 39s App Utils
  13. Work against tests whenever you can App Incremental build of

    App with a change in App: 55s Incremental build of Utils module: 26s App Utils
  14. Change in the library module vs application module App Utils

    Incremental build of App module: 39s Incremental build of Utils module: 26s
  15. Intermodule dependencies increase build time Incremental build with change in

    Feature 3: 1m 5s Incremental build with change in Feature 3: 1m 11s Feature 1 Feature 3 Feature 2 App Feature 2 Feature 3 Feature 1 App
  16. Start simple if you don’t have time App Tracking Utils

    Core UI Networking App Feature Feature Feature Common code
  17. Use a topology that works for you App App Monolith

    Incremental build with change in App: 81s Incremental build with change in Main: 92s
  18. Use a topology that works for you App Feature App

    Monolith Feature Incremental build with change in Feature: 10s Incremental build with change in Feature: 7s
  19. Modularization rules of thumb • Extract utils and other rarely-changed

    code • Keep in mind the intermodule dependencies • Developing library modules in TDD way helps • Measure on a test project first
  20. Our process Create a test project Implement suggestion Test &

    Measure Implement within a real project Android Studio Poet Gradle Profiler
  21. • Tool to generate large self contained Android projects •

    https://github.com/android/android-studio-poet • Accepts JSON config file for the parameters Android Studio Poet
  22. Features Java Butterknife Kotlin External Libraries Gradle Plugins Flavours Build

    Types Intermodule dependencies Build Tools versioning String resources Images Layouts Activities Data Binding External repositories Dependency visualization Packages Classes Methods Fields
  23. Learn more • Extend Android Studio Poet - https://github.com/android/android-studio-poet/blob/master/exten d/Extending.md

    • For this talk we made about 50 configs and more then 500 builds • Our configs, we used for this presentation https://github.com/android/android-studio-poet/tree/master/config s