View
337
Download
1
Category
Tags:
Preview:
Citation preview
Gradle-based Android Build System
REZA MOALLEMI
REZA MOHAMMADI
What do we use?
Problems?
Heavy builds?
Long integration cycles?
Build projects?
Apache Ant - 2000
Complexity
Hard to reuse
Heavy build.xml files
Apache Maven - 2001
Maven central
Dependency management
Heavy xmls
Hard to implement custom behaviour
How we build?
What we have done?
Build integration tool
Declarative builds
Scalable – multi project builds
Dependency management
Ease of migration
Deep API
Groovy-based DSL
Gradle
A feature-rich
Java friendly
Dynamic language
For the Java platform
Groovy
Tasks
Task Dependencies
Project dependencies
Dependency
File dependencies
Dependency
Repository dependencies
Dependency
Repository
Use gradle without even downloading it manually
Every developer uses the same version
Specify version or full url
Gradle Wrapper
Plugins
Android Java scalagroovy cppcheckstylefindbugs pmdmaven git
Arbitrary multi-project layout
Configuration injection
Separate config/execution tree
Partial builds
Multi-project builds
Multi-project builds
Build Types
Product Flavors
Variants = build type + product flavors
no flavor: variant = build type
Base concepts
control how the app is build
debug flag
minify using proguard
Signing config
application version name suffix
Build types
product flavors: free, paid
application id flag
min-max sdk version
version code name
signing config
Product Flavors
Src/main/AndroidManifest.xml
Src/main/java/
Src/main/res/
Src/main/aidl/
Src/main/jni/
Src/main/rs/
…
Android SourceSets
Src/main/…
Src/debug/…
Src/release/…
Src/paid/…
Src/free/…
Available SourceSets
1. Varinat-specific(paidJBDebug)
2. Build Type (debug)
3. Multi-Flavor (paidJB)
4. Flavors
a) paid
b) JB
5. Default (main)
Variant SourceSet Priority
Src/main/…
Src/debug/…
Src/release/…
Src/freeDebug/…
Src/paidRelease/…
Src/paid/…
…
Android SourceSets
BuildConfig File
Change output file
Gradle Advanced Build Version Pluginhttps://github.com/moallemi/gradle-advanced-build-version
Automatic versionCode and versionName
Gradle Advanced Build Version Pluginhttps://github.com/moallemi/gradle-advanced-build-version
Automatic versionCode and versionName
Gradle Advanced Build Version Pluginhttps://github.com/moallemi/gradle-advanced-build-version
Automatic versionCode and versionName
Gradle Advanced Build Version Pluginhttps://github.com/moallemi/gradle-advanced-build-version
versoinCode = 931130
versoinName = 1.3.6.8
Automatic versionCode and versionName
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
It's about automation.
It's about continuous integration.
Testing & Gradle
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.
./gradlew connectedAndroidTest
< 1.1.0-rc1
./gradlew test
>= 1.1.0-rc1
The Tricks
Sample
https://github.com/congenialmobile/Hop
Reza Moallemi Reza Mohammadi
@moallemi @remohammadi
Recommended