Build Tools are important. Really important. If you are an Android Developer, understanding Gradle and how to harness its power will increase your productivity and make your life easier in many possible ways.
This talk was presented at The Developer's Conference Floripa 2016, on the Android Track
2. $ whoami
Bonet
Control and Automation Engineer
Master Student in Computer Science
Full Stack / Data Scientist Jr
Android Hobbyist
3. Agenda
● What is Gradle?
● Build Types and Variables
● Flavors
● Cool Tasks
4. Why Gradle?
Building and packaging an android app is complicated
Gradle is a build tool powered by Groovy
You CODE configurations
It's magical!
5. Introducing John
John is a CS student, and his dad has a bakery. He made an
app for his dad's bakery and wants to publish it.
6. John's First Problem
John tested his api calls on his local server during
development. He needs to change his client to point to the
new production server.
16. BakeryAPP Identity Crisis
John will now split the app into two versions: free and
premium. Should he create a new app and copy/paste code?
How will that be maintained, what about new features?
20. Not instead. Flavors WITH BuildTypes! They can be combined!
Why Flavors instead of BuildTypes?
Build Type
Flavor Debug Homolog Release
Free freeDebug freeHomolog freeRelease
Pro proDebug proHomolog proRelease
21. Customizing Flavors and BuildTypes
| -- src
| | --- test (java, res, assets)
| | --- main (java, res, assets)
| | --- free (java, res, assets)
| | --- pro (java, res, assets)
| | --- debug (java, res, assets)
| | --- freeDebug (java, res, assets)
Priority Order
flavorBuild > flavor > build > main
22. John now for some reason wants to add different behavior to
the flavors: all cakes for free version are stored in memory,
while only the pro version queries the API.
28. Example: Specific Code with DI
The D on SOLID! This is where Dependency Injection shines. John first abstracts
the repo and builder into an interface, in the main source set.
src/java/ main /johnsdadbakery/ AwesomeCakeRepository.java
31. Example: Specific Code with DI
Our injector interface will helps us configure flavor specific behaviour
src/java/main/johnsdadbakery/ InjectorInterface.java
32. Example: Specific Code with DI
Finally, we just need to implement the Injector interface on each flavor:
src/java/ free /johnsdadbakery/Injector.java
33. Example: Specific Code with DI
Finally, we just need to implement the Injector interface on each flavor:
src/java/ pro /johnsdadbakery/Injector.java
34. Example: Specific Code with DI
Now we simply ask the injector for the correct CakeRepo Implementation
This is a very naive DI implementation, consider using Dagger2, it is way more
powerful
35. John is tired of typing his Keystore credentials
John hates typing password every time he creates a release
version. Android Studio helps with that, but how a CI server
would handle it?
40. Lost in screenshots
John translated his app to three different languages. And has
support for multiple screens. That means every time he
publishes a new release he has to generate a LOT of
screenshots for the PlayStore.
41. ● Create screenshots with Spoon https://github.com/stanfy/spoon-gradle-plugin
● Frame it with https://github.com/chemouna/frame-gradle-plugin
● Ta-da!
Another way: http://flavienlaurent.com/blog/2014/12/05/screenshot_automation/
Screenshot ALL THE THINGS
44. Am I Pretty? CheckStyle
http://blog.jessitron.com/2012/07/using-checkstyle-in-gradle.html
http://checkstyle.sourceforge.net/config.html
http://www.slideshare.net/marcprengemann/better-code-through-lint-and-
checkstyle
45. OMG Google Play Services! - Dexcount
● https://github.com/mihaip/dex-method-counts
● https://github.com/KeepSafe/dexcount-gradle-plugin
47. And much more!
● Slack: https://github.com/Mindera/gradle-slack-plugin
● Upload to GooglePlay: https://github.com/Triple-T/gradle-play-publisher
● Git: https://github.com/ajoberstar/gradle-git
● Upload your lib to maven repos
…..
● Turn on your coffee machine: Not done yet :)
● Etc etc etc
48. What did John learn today?
● Gradle is a build tool written that runs on Groovy, sky is the limit
Know your build tool, it will help you a lot
Use Build Types to configure Environments
Use Flavors to create App Versions
Great Plugins out there to make you more productive and happy!