Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Understanding Gradle for Android
Search
Kevin Pelgrims
November 12, 2015
Programming
2
770
Understanding Gradle for Android
Presented at Big Android BBQ Europe 2015
Kevin Pelgrims
November 12, 2015
Tweet
Share
More Decks by Kevin Pelgrims
See All by Kevin Pelgrims
Data binding on Android
kevinpelgrims
5
4.6k
Other Decks in Programming
See All in Programming
Zennの運営完全に理解した #完全に理解したTalk
wadayusuke
1
170
iOSアプリ開発もLLMで自動運転する
hiragram
6
2.3k
MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
taniiicom
2
620
イベントストーミングから始めるドメイン駆動設計
jgeem
3
740
バランスを見極めよう!実装の意味を明示するための型定義 TSKaigi 2025 Day2 (5/24)
whatasoda
2
810
Efficiency and Rock 'n’ Roll (Really!)
hollycummins
0
670
TypeScript製IaCツールのAWS CDKが様々な言語で実装できる理由 ~他言語変換の仕組み~ / cdk-language-transformation
gotok365
7
400
生成AIで日々のエラー調査を進めたい
yuyaabo
0
220
Webからモバイルへ Vue.js × Capacitor 活用事例
naokihaba
0
150
インターフェース設計のコツとツボ
togishima
2
670
GoのWebAssembly活用パターン紹介
syumai
2
960
コードに語らせよう――自己ドキュメント化が内包する楽しさについて / Let the Code Speak
nrslib
6
1.3k
Featured
See All Featured
The Invisible Side of Design
smashingmag
299
50k
GitHub's CSS Performance
jonrohan
1031
460k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
How to Ace a Technical Interview
jacobian
276
23k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
Fireside Chat
paigeccino
37
3.5k
Scaling GitHub
holman
459
140k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
Transcript
Understanding Gradle for Android Kevin Pelgrims
About me • Mobile Developer at Drivr • Just launched
Forward • Working with Android since 2011 • .NET developer in a previous life • Big interest in web technology
Schedule • The build file • Groovy basics • Back
to the build file • Custom tasks • Tasks for Android • Tips and tricks
The build file
The build file apply plugin: 'com.android.application' android { compileSdkVersion 23
buildToolsVersion "23.1.0" defaultConfig { applicationId "com.muchgradle" } } dependencies { compile 'com.android.support:appcompat-v7:23.1.0' }
Groovy basics To get Gradle, you need to get Groovy
Verbosity System.out.println("Hello, Java"); println("Hello, Java"); println("Hello, Java") println "Hello, Java"
println 'Hello, Groovy'
Dynamic typing String name = "Andy" def name = 'Andy'
String interpolation def name = 'Andy' def greeting = "Hello,
$name" def name_size = "Your name is ${name.size()} characters long"
Methods public int square(int num) { return num * num;
} square(2); def square(def num) { num * num } square 4
Closures def square = { num -> num * num
} square 8 Closure square = { it * it } square 16
Closures void runClosure(Closure closure) { closure() } runClosure({ println 'Yo!'})
runClosure() { println 'Yo!'} runClosure { println 'Yo!'}
Lists List list = [1, 2, 3, 4, 5] list.each
{ element -> println element } list.each { println it }
Maps Map map = [one:1, two:2, three:3] map.get('one') map['two'] map.three
Maps void print(Map args, String message) { println args println
message } print(one:1, two:2, three:3, 'hello')
The build file
Back to the build file apply plugin: 'com.android.application' android {
compileSdkVersion 23 buildToolsVersion "23.1.0" defaultConfig { applicationId "com.muchgradle" } } dependencies { compile 'com.android.support:appcompat-v7:23.1.0' }
Back to the build file apply plugin: 'com.android.application' project.apply([plugin: 'com.android.application']);
Back to the build file dependencies { compile 'com.android.support:appcompat-v7:23.1.0' }
project.dependencies({ add('compile', 'com.android.support:appcompat-v7:23.1.0', { // Configuration statements }); });
Back to the build file android { compileSdkVersion 23 buildToolsVersion
"23.1.0" defaultConfig { applicationId "com.muchgradle" } } Android plugin: https://developer.android.com/tools/building/plugin-for-gradle.html
Custom tasks
Gradle build lifecycle Initialization Discover all modules
Gradle build lifecycle Initialization Configuration Configure project objects
Gradle build lifecycle Initialization Configuration Execution Execute selected tasks
Defining a task task hello { doLast { println 'Hello,
world!' } } task hello << { println 'Hello, world!' }
Defining a task task hello { println 'Configuration' doLast {
println 'Goodbye' } doFirst { println 'Hello' } }
Ordering task actions task hello { doFirst { println 'Not
really first' } doFirst { println 'First' } doLast { println 'Not really last' } doLast { println 'Last' } }
Ordering tasks (1) task task1 << { println 'Task 1'
} task task2 << { println 'Task 2' } task2.mustRunAfter task1 > gradlew task2 task1 task1 task2
Ordering tasks (2) task task1 << { println 'Task 1'
} task task2 << { println 'Task 2' } task2.dependsOn task1 > gradlew task2 task1 task2
Android tasks
Hooking into the Android plugin android.applicationVariants.all { variant -> println
variant }
Hooking into the Android plugin task hello << { println
'Hello' } android.applicationVariants.all { variant -> variant.assemble.dependsOn hello }
Automatically renaming APKs android.applicationVariants.all { variant -> variant.outputs.each { output
-> } } def file = output.outputFile output.outputFile = new File(file.parent, file.name.replace(".apk", "${variant.versionName}.apk"))
Tips and tricks
The Gradle Wrapper • It’s there by default • It’s
everywhere • It’s always the right version • You can use different versions of Gradle for different projects
Speeding up the build • Use the latest version of
Gradle distributionUrl=https\://services.gradle.org/distributions/ gradle-2.8-all.zip
Speeding up the build • Use the latest version of
Gradle • Change your Gradle properties org.gradle.parallel=true org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m
Speeding up the build • Use the latest version of
Gradle • Change your Gradle properties • Build modules separately gradlew :app:build :moduledirectoryname:build
Speeding up the build • Use the latest version of
Gradle • Change your Gradle properties • Build modules separately • Exclude modules from the build gradlew assemble -x :libraryproject:assemble
Speeding up the build • Use the latest version of
Gradle • Change your Gradle properties • Build modules separately • Exclude modules from the build • Do some profiling gradlew task --profile
Optimizing the APK • ProGuard android { buildTypes { release
{ minifyEnabled true proguardFiles getDefaultProguardFile ('proguard-android.txt'), 'proguard-rules.pro ...
Optimizing the APK • ProGuard • Automatic resource shrinking android
{ buildTypes { release { minifyEnabled true shrinkResources true ...
Optimizing the APK • ProGuard • Automatic resource shrinking •
Manual resource shrinking android { defaultConfig { resConfigs "en", "da", "nl" } }
Optimizing the APK • ProGuard • Automatic resource shrinking •
Manual resource shrinking android { defaultConfig { resConfigs "hdpi", "xhdpi", "xxhdpi", "xxxhdpi" } }
Resources
Resources • Groovy SDK • http://www.groovy-lang.org/download.html • Gradle DSL •
https://docs.gradle.org/current/dsl/ • Android plugin documentation • https://developer.android.com/tools/building/plugin-for-gradle.html
Resources I wrote a book! https://www.packtpub.com/ application-development/gradle- android
Understanding Gradle for Android twitter.com/kevinpelgrims google.com/+kevinpelgrims kevinpelgrims.com