Gradle not just an ANT
replacement
Goals of Gradle (from official docs)
● Make it easy reuse code and resources (.aar)
● Make it easy to create several variants of an application
● Make it easy to configure, extend and customize the
build process
● Good IDE integration
About Gradle
●

Is based on groovy:
○ binary-compatible with java
○ Most java code is syntactically valid on Groovy
○ The gradle installation comes with groovy

●

You better use a gradle wrapper for your
android projects
Android Studio
● If something goes wrong, use gradle on the command
line
● use this button:
● One update can “break” your project
● If something goes wrong, use gradle on the command
line
Basic gradle config
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.0+'
}
}
apply plugin: 'android'
android {
compileSdkVersion 19
}
Adding libs
dependencies {
//

MavenCentral deps
compile 'com.android.support:support-v4:19.0.0'
compile 'com.android.support:appcompat-v7:19.0.0'
compile 'com.squareup.retrofit:retrofit:1.2.2'
compile 'com.squareup.okhttp:okhttp:1.2.1'

//

project dep:
compile project(“:libraries:lib1”)

//

jar dep:
compile files(‘libs/a.jar”, “libs/b.jar”)
compile fileTree(dir: “libs”, include: “*.jar”)

}
Basic gradle commands
$ gradle tasks
$ gradle tasks --all
$ gradle assembleDebug
$ gradle assembleRelease
$ gradle clean
$ gradle installDebug
$ gradle uninstallAll
Gradle build customization
android {
compileSdkVersion 19
defaultConfig {
versionCode 1
versionName "1.0"
minSdkVersion 16
targetSdkVersion 16
}
}
Build Types
buildTypes {
debug {
packageNameSuffix ".debug"
}
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-androidoptimize.txt')
}
}

$ gradle installFreeDebug
Build Variants
productFlavors {
free {
packageName "com.bitcoinlab.android.free"
buildConfig “public static final boolean FULL_VERSION =
false;”
}
full {
packageName "com.bitcoinlab.android.full"
versionName "2.0"
versionCode 20
buildConfig “public static final boolean FULL_VERSION =
true;”
signingConfig signingConfigs.myConfig
}
}
Build Variants specific files & deps
src/full/java/src/”packagename”/file.java
src/full/res/values/strings.xml
src/full/AndroidManifest.xml

dependencies {
fullCompile ‘com.squareup.okhttp:okhttp:1.2.1'
}
A source file can’t exists on main src folder and at
the same time on a flavour src folder: put a class into
main, or in every buildType but not both.
BuildConfig
import java.text.SimpleDateFormat
def buildTime() {
def df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'")
df.setTimeZone(TimeZone.getTimeZone("UTC"))
return df.format(new Date())
}
defaultConfig {
buildConfig """
public static final String GIT_SHA = "${gitSha()}";
public static final String BUILD_TIME = "${buildTime()}";
"""
}
Android Studio Integration
Some things you can do with gradle
●

free/paid apk

●

debug/release version

●

beta/alpha/”any git branch” apk

●

Use multiple flavors + multiple-apk play store support to distribute
smaller apks (depending on screen size or android version)

●

build your customized integration and test server in minutes
Oriol Jiménez
@oriolj
oriolj@gmail.com

Gradle presentation

  • 1.
    Gradle not justan ANT replacement
  • 2.
    Goals of Gradle(from official docs) ● Make it easy reuse code and resources (.aar) ● Make it easy to create several variants of an application ● Make it easy to configure, extend and customize the build process ● Good IDE integration
  • 3.
    About Gradle ● Is basedon groovy: ○ binary-compatible with java ○ Most java code is syntactically valid on Groovy ○ The gradle installation comes with groovy ● You better use a gradle wrapper for your android projects
  • 4.
    Android Studio ● Ifsomething goes wrong, use gradle on the command line ● use this button: ● One update can “break” your project ● If something goes wrong, use gradle on the command line
  • 5.
    Basic gradle config buildscript{ repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.0+' } } apply plugin: 'android' android { compileSdkVersion 19 }
  • 6.
    Adding libs dependencies { // MavenCentraldeps compile 'com.android.support:support-v4:19.0.0' compile 'com.android.support:appcompat-v7:19.0.0' compile 'com.squareup.retrofit:retrofit:1.2.2' compile 'com.squareup.okhttp:okhttp:1.2.1' // project dep: compile project(“:libraries:lib1”) // jar dep: compile files(‘libs/a.jar”, “libs/b.jar”) compile fileTree(dir: “libs”, include: “*.jar”) }
  • 7.
    Basic gradle commands $gradle tasks $ gradle tasks --all $ gradle assembleDebug $ gradle assembleRelease $ gradle clean $ gradle installDebug $ gradle uninstallAll
  • 8.
    Gradle build customization android{ compileSdkVersion 19 defaultConfig { versionCode 1 versionName "1.0" minSdkVersion 16 targetSdkVersion 16 } }
  • 9.
    Build Types buildTypes { debug{ packageNameSuffix ".debug" } release { runProguard true proguardFile getDefaultProguardFile('proguard-androidoptimize.txt') } } $ gradle installFreeDebug
  • 10.
    Build Variants productFlavors { free{ packageName "com.bitcoinlab.android.free" buildConfig “public static final boolean FULL_VERSION = false;” } full { packageName "com.bitcoinlab.android.full" versionName "2.0" versionCode 20 buildConfig “public static final boolean FULL_VERSION = true;” signingConfig signingConfigs.myConfig } }
  • 11.
    Build Variants specificfiles & deps src/full/java/src/”packagename”/file.java src/full/res/values/strings.xml src/full/AndroidManifest.xml dependencies { fullCompile ‘com.squareup.okhttp:okhttp:1.2.1' } A source file can’t exists on main src folder and at the same time on a flavour src folder: put a class into main, or in every buildType but not both.
  • 12.
    BuildConfig import java.text.SimpleDateFormat def buildTime(){ def df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'") df.setTimeZone(TimeZone.getTimeZone("UTC")) return df.format(new Date()) } defaultConfig { buildConfig """ public static final String GIT_SHA = "${gitSha()}"; public static final String BUILD_TIME = "${buildTime()}"; """ }
  • 13.
  • 14.
    Some things youcan do with gradle ● free/paid apk ● debug/release version ● beta/alpha/”any git branch” apk ● Use multiple flavors + multiple-apk play store support to distribute smaller apks (depending on screen size or android version) ● build your customized integration and test server in minutes
  • 15.