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

Using Gradle for Android

Using Gradle for Android

GDG DevFest Netherlands 2014
Source code for the example:
https://github.com/ipanag/Gradle-presentation

Avatar for Ioannis Panagiotopoulos

Ioannis Panagiotopoulos

November 08, 2014

Other Decks in Programming

Transcript

  1. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. GDG DevFest 2014

    Using Gradle for Android By Ioannis Panagiotopoulos 1 Sunday 9 November 14
  2. Adding emotion to transactional loyalty Meaning... We create digital solutions

    that help, reward and inspire people shopping, enjoy food every day. 2 Sunday 9 November 14
  3. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. Continuous integration •

    Automation: compile, package, test, on every commit • Quality Java build tools • Ant • Maven • ADT plugin for eclipse (uses customized Ant) • Gradle Build tools 5 Sunday 9 November 14
  4. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. Google introduced Gradle

    in Google I/O 2013 "Gradle combines the power and flexibility of Ant with the dependency management and conventions of Maven into a more effective way to build." Source: gradle.org Why Gradle? 6 Sunday 9 November 14
  5. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. Gradle user guide

    • http://www.gradle.org/docs/current/userguide/ userguide_single.html Android Gradle plugin • http://tools.android.com/tech-docs/new-build-system Documentation 7 Sunday 9 November 14
  6. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. • Easy to

    use multiple versions • No need to manually install • Switch between projects • Wrapper script in both Unix-like and Windows environment • Ensures all team members run the same version within a project Gradle wrapper 8 Sunday 9 November 14
  7. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. Configure wrapper •

    File: gradle/wrapper/gradle-wrapper.properties distributionUrl=http\://services.gradle.org/distributions/ gradle-2.1-all.zip Gradle version 9 Sunday 9 November 14
  8. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. Configure • File:

    build.gradle dependencies { classpath 'com.android.tools.build:gradle:0.14.1' } Good practices • Avoid auto-increment version (‘+’) • Test before upgrade plugins Android Gradle plugin version 10 Sunday 9 November 14
  9. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. • Task definition

    • doFirst • doLast • << • Task dependencies Gradle tasks 11 Sunday 9 November 14
  10. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. List of tasks

    (only tasks in groups are listed) > gradlew tasks Compile Debug build type (default types: Debug, Release) > gradlew clean assembleDebug Use task name abbreviation > gradlew cle asDe GUI tool > gradlew --gui& Running Gradle tasks 12 Sunday 9 November 14
  11. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. • Library JAR

    file compile fileTree(dir: 'libs', include: '*.jar') • Library project compile project(':libraries/lib1') • Maven repo • http://mvnrepository.com/ compile 'com.android.support:support-v4:21.0.0' compile 'com.google.code.gson:gson:2.3' androidTestCompile 'org.robolectric:robolectric:2.3' Dependencies 13 Sunday 9 November 14
  12. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. Build file buildConfigField

    "String", "BUILD_NUMBER", "\"123\"" Output public final class BuildConfig { public static final String BUILD_NUMBER = "123"; } Custom variables 14 Sunday 9 November 14
  13. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. Build Variant =

    flavor + type • Build type (default types: Debug, Release) • Build flavor Task suffix • FlavornameDebug • FlavornameRelease Compile > gradlew assembleMyflavorDebug Build variants 15 Sunday 9 November 14
  14. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. productFlavors { free

    { applicationId "com.example.free" } paid { applicationId "com.example.paid" } } Different applicationId per variant 16 Sunday 9 November 14
  15. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. • Ability to

    separate sources • Merging • Java sources • Manifest SourceSets 17 Sunday 9 November 14
  16. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. android { variantFilter

    { variant -> if(variant.buildType.name.equals('debug') && variant.getFlavors().get(0).name.equals('paid')) { variant.setIgnore(true); } } } Disable a variant 18 Sunday 9 November 14
  17. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. applicationVariants.all { variant

    -> String newName = project.name + "_" + variant.getFlavorName() + "_" + variant.buildType.name + "_" + ciBuildNumber + ".apk" variant.outputs.get(0).setOutputFile(new File(variant.outputs.get(0).getOutputFile().parentFile, newName)) } Change output APK filename 19 Sunday 9 November 14
  18. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. Configuration file: settings.gradle

    Difference • include ':libs/lib1' • include ':libs:lib1' • Run > gradlew :project:task Multiple projects 20 Sunday 9 November 14
  19. Copyright © Ioannis Panagiotopoulos, All Rights Reserved. • Save time

    on subsequent builds • Overhead on first build • Not useful in build servers (fresh build) • Option to disable PreDex PreDex 21 Sunday 9 November 14