41
Gradle-based Android Build System REZA MOALLEMI REZA MOHAMMADI

Gradle-based Android Build System

Embed Size (px)

Citation preview

Page 1: Gradle-based Android Build System

Gradle-based Android Build System

REZA MOALLEMI

REZA MOHAMMADI

Page 2: Gradle-based Android Build System

What do we use?

Page 3: Gradle-based Android Build System

Problems?

Heavy builds?

Long integration cycles?

Build projects?

Page 4: Gradle-based Android Build System

Apache Ant - 2000

Complexity

Hard to reuse

Heavy build.xml files

Page 5: Gradle-based Android Build System

Apache Maven - 2001

Maven central

Dependency management

Heavy xmls

Hard to implement custom behaviour

Page 6: Gradle-based Android Build System

How we build?

Page 7: Gradle-based Android Build System

What we have done?

Page 8: Gradle-based Android Build System

Build integration tool

Declarative builds

Scalable – multi project builds

Dependency management

Ease of migration

Deep API

Groovy-based DSL

Gradle

Page 9: Gradle-based Android Build System

A feature-rich

Java friendly

Dynamic language

For the Java platform

Groovy

Page 10: Gradle-based Android Build System
Page 11: Gradle-based Android Build System

Tasks

Page 12: Gradle-based Android Build System

Task Dependencies

Page 13: Gradle-based Android Build System

Project dependencies

Dependency

Page 14: Gradle-based Android Build System

File dependencies

Dependency

Page 15: Gradle-based Android Build System

Repository dependencies

Dependency

Page 16: Gradle-based Android Build System

Repository

Page 17: Gradle-based Android Build System

Use gradle without even downloading it manually

Every developer uses the same version

Specify version or full url

Gradle Wrapper

Page 18: Gradle-based Android Build System

Plugins

Android Java scalagroovy cppcheckstylefindbugs pmdmaven git

Page 19: Gradle-based Android Build System

Arbitrary multi-project layout

Configuration injection

Separate config/execution tree

Partial builds

Multi-project builds

Page 20: Gradle-based Android Build System

Multi-project builds

Page 21: Gradle-based Android Build System

Build Types

Product Flavors

Variants = build type + product flavors

no flavor: variant = build type

Base concepts

Page 22: Gradle-based Android Build System

control how the app is build

debug flag

minify using proguard

Signing config

application version name suffix

Build types

Page 23: Gradle-based Android Build System

product flavors: free, paid

application id flag

min-max sdk version

version code name

signing config

Product Flavors

Page 24: Gradle-based Android Build System

Src/main/AndroidManifest.xml

Src/main/java/

Src/main/res/

Src/main/aidl/

Src/main/jni/

Src/main/rs/

Android SourceSets

Page 25: Gradle-based Android Build System

Src/main/…

Src/debug/…

Src/release/…

Src/paid/…

Src/free/…

Available SourceSets

Page 26: Gradle-based Android Build System

1. Varinat-specific(paidJBDebug)

2. Build Type (debug)

3. Multi-Flavor (paidJB)

4. Flavors

a) paid

b) JB

5. Default (main)

Variant SourceSet Priority

Page 27: Gradle-based Android Build System

Src/main/…

Src/debug/…

Src/release/…

Src/freeDebug/…

Src/paidRelease/…

Src/paid/…

Android SourceSets

Page 28: Gradle-based Android Build System

BuildConfig File

Page 29: Gradle-based Android Build System

Change output file

Page 30: Gradle-based Android Build System

Gradle Advanced Build Version Pluginhttps://github.com/moallemi/gradle-advanced-build-version

Automatic versionCode and versionName

Page 31: Gradle-based Android Build System

Gradle Advanced Build Version Pluginhttps://github.com/moallemi/gradle-advanced-build-version

Automatic versionCode and versionName

Page 32: Gradle-based Android Build System

Gradle Advanced Build Version Pluginhttps://github.com/moallemi/gradle-advanced-build-version

Automatic versionCode and versionName

Page 33: Gradle-based Android Build System

Gradle Advanced Build Version Pluginhttps://github.com/moallemi/gradle-advanced-build-version

versoinCode = 931130

versoinName = 1.3.6.8

Automatic versionCode and versionName

Page 34: Gradle-based Android Build System

We're not going to talk about importance of testing.

But testing is important!

Hey! We're not talking about that.

ok

...

TESTING IS SO IMPORTANT

Testing

Page 35: Gradle-based Android Build System

It's about automation.

It's about continuous integration.

Testing & Gradle

Page 36: Gradle-based Android Build System

How to ask gradle to run tests

Verification tasks

------------------

connectedAndroidTest - Installs and runs the

tests for Build 'debug' on connected devices.

lint - Runs lint on all variants.

test - Run all unit tests.

Page 37: Gradle-based Android Build System

./gradlew connectedAndroidTest

< 1.1.0-rc1

Page 38: Gradle-based Android Build System

./gradlew test

>= 1.1.0-rc1

Page 39: Gradle-based Android Build System

The Tricks

Page 40: Gradle-based Android Build System

Sample

https://github.com/congenialmobile/Hop

Page 41: Gradle-based Android Build System

Reza Moallemi Reza Mohammadi

@moallemi @remohammadi