building android apps with gradle (greach 2015)

Post on 16-Jul-2015

313 Views

Category:

Software

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

BUILDING ANDROID APPSBUILDING ANDROID APPSWITH GRADLEWITH GRADLEGREACH 2015, MadridRené GröschkePrincipal Engineer Gradleware

INTRO, DEMO & FORECASTINTRO, DEMO & FORECAST

WHY A NEW BUILDWHY A NEW BUILDSYSTEM?SYSTEM?

GRADLE 2.3GRADLE 2.3RELEASED 16TH FEBRUARY 2015RELEASED 16TH FEBRUARY 2015

OLD ANDROID BUILDSOLD ANDROID BUILDSTwo (official) build mechanism

ADT (Eclipse based)AntMaven

Customization?

Nothing in ADTManually hacking xml in ant scripts

REQUIREMENTS OF THEREQUIREMENTS OF THENEW BUILD SYSTEMNEW BUILD SYSTEM

Use same system forCommandLineCI ServerIDE

Support for application/library variantsDependency ManagementProvide a plugin ecosystem

WHY GRADLEWHY GRADLEAllows custom DSL to express build logicVery flexible for customizationWell integrated with CI ecosystem (Ant, Maven, Ivy, CIserver)Allow User / 3Party tools to configure, extend andcustomize the build processTooling API for IDE integration...

GRADLE IN A NUTSHELLGRADLE IN A NUTSHELLapply plugin:'java'

version = file("version.txt").text

task helloWorld << { println "Hello World - version '$version'!"}

THE ANDROID GRADLE PLUGINTHE ANDROID GRADLE PLUGINMINIMAL ANDROID BUILDMINIMAL ANDROID BUILD

plugins { id 'com.android.application' version '1.1.+'}

android { compileSdkVersion 22 buildToolsVersion '22.0.1'}

>gradle check assemble>gradle build

THE ANDROID GRADLE PLUGINTHE ANDROID GRADLE PLUGINBASIC BUILD CUSTOMIZATIONBASIC BUILD CUSTOMIZATION

android { compileSdkVersion 22 buildToolsVersion '22.0.1'

defaultConfig { versionCode 12 versionName "2.0" minSdkVersion 19 targetSdkVersion 22 multiDexEnabled = true }}

THE ANDROID GRADLE PLUGINTHE ANDROID GRADLE PLUGINREMEMBER, IT'S GROOVY!REMEMBER, IT'S GROOVY!

def calculateVersionName() { ...}android { compileSdkVersion 22 buildToolsVersion '22.0.1'

defaultConfig { versionName calculateVersionName() }}

BUILD TYPESBUILD TYPES"controls how an app is built"

Customize app parametersdebuggable flagnative debug compilation flagpackage suffixdebug signingproguard options2 default types (debug + release)

Source code + resources overlayCustom dependencies

PRODUCT FLAVORSPRODUCT FLAVORS"a way to generate several versions of the same app"

Customize app parameterspackage namemin/targetSdkVersionversionCodeNamesigning info

Source code + resources overlayCustom dependencies

BUILD VARIANTSBUILD VARIANTS"a variant is always a flavor + a type"

debug releasefree free-debug free-release

payed payed-debug payed-release

BUILD VARIANTS IIBUILD VARIANTS IIPRODUCT FLAVOR GROUPSPRODUCT FLAVOR GROUPS

debug releasefree x86 free-x86-debug free-x86-release

ARM free-ARM-debug free-ARM-release

payed x86 payed-x86-debug payed-x86-release

ARM payed-ARM-debug payed-ARM-release

FLAVOR GROUPSFLAVOR GROUPS

flavorDimensions "group1", "group2"

productFlavors { arm { flavorDimension "group1" } x86 { flavorDimension "group1" } free { flavorDimension "group2" } pro { flavorDimension "group2" }}

SOURCE CODE + RESOURCES OVERLAYSOURCE CODE + RESOURCES OVERLAY

~/dev/androidApp/src>tree |____main | |____java | |____res |____androidTest | |____java | |____res |____free | |____java | |____res |____debug | |____java ~/dev/androidApp/src>

Build Type > Product Flavor > main

DEMO IDEMO IVARIANTS IN ACTIONVARIANTS IN ACTION

BUILD CUSTOMIZATION IBUILD CUSTOMIZATION IDEX CONFIGURATIONDEX CONFIGURATION

android { dexOptions { incremental true preDexLibraries = false jumboMode = false }}

BUILD CUSTOMIZATION IIBUILD CUSTOMIZATION IIAAPT CONFIGURATIONAAPT CONFIGURATION

android { aaptOptions { noCompress 'foo', 'bar' ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc" }}

BUILD CUSTOMIZATION IIIBUILD CUSTOMIZATION IIIAND MOREAND MORE

lintjava compile optionsproguard

DEMO IIDEMO IIMANIPULATING TASKSMANIPULATING TASKS

TESTINGTESTINGno separate test project neededvariant aware testsrun against (all) connected devicesexperimental unit test support (android build tools 1.1)

android { // ... testOptions { unitTests.returnDefaultValues = true }}

PLENTY OF MORE THINGSPLENTY OF MORE THINGSandroid libraries (aar)vivid plugin ecosystem

crashlyticsroboelectricstestfairyinstabug...

UNDER CONSTRUCTIONUNDER CONSTRUCTIONNDK supportvariant aware dependency managementsignificant performance improvements

LINKS AND POINTERSLINKS AND POINTERShttp://tools.android.com/tech-docs/new-build-system/user-guidehttps://groups.google.com/forum/#!forum/adt-devgradle.orggradleware.comhttps://github.com/breskeby/android-demo-app

Q&AQ&A

¡MUCHAS¡MUCHASGRACIAS!GRACIAS!

! @breskeby

" github.com/breskeby

# rene.groeschke@gradleware.com

top related