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
Practical Modularisation for Android Developers
Search
Jordan Terry
April 21, 2022
Programming
0
10
Practical Modularisation for Android Developers
How can you use Gradle and an extremely opinionated module structure to reduce your build times?
Jordan Terry
April 21, 2022
Tweet
Share
More Decks by Jordan Terry
See All by Jordan Terry
Resuable Modules - Its as easy as ABI
jordan_terry
0
140
Other Decks in Programming
See All in Programming
Go製CLIツールをnpmで配布するには
syumai
2
1.2k
新しいモバイルアプリ勉強会(仮)について
uetyo
1
260
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
150
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
140
書き捨てではなく継続開発可能なコードをAIコーディングエージェントで書くために意識していること
shuyakinjo
1
290
Constant integer division faster than compiler-generated code
herumi
2
670
UbieのAIパートナーを支えるコンテキストエンジニアリング実践
syucream
2
620
Scale out your Claude Code ~自社専用Agentで10xする開発プロセス~
yukukotani
9
2.4k
CLI ツールを Go ライブラリ として再実装する理由 / Why reimplement a CLI tool as a Go library
ktr_0731
3
1.1k
The State of Fluid (2025)
s2b
0
180
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
13
3.2k
AIエージェント開発、DevOps and LLMOps
ymd65536
1
280
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Unsuck your backbone
ammeep
671
58k
Agile that works and the tools we love
rasmusluckow
329
21k
Rails Girls Zürich Keynote
gr2m
95
14k
A better future with KSS
kneath
239
17k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Into the Great Unknown - MozCon
thekraken
40
2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
How to Ace a Technical Interview
jacobian
279
23k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Transcript
Practical modularisation for Android developers Jordan Terry 1
Agenda • Introduction • What is modularisation? • What is
your codebase? • Cohesion, Coupling & Gradle • Build times • Reusability • Defining a strategy • Questions? 2
3 Introduction 🇹 Then Now 2015 2018 2021 @JordNullable
What is modularisation? 4
5 What is modularisation? Large system Modules
6
7 Android modularisation Large System Modules Codebase Gradle Modules
Talking about modularisation 8
The benefits of modularisation 9 Build Times Reusability
What is your codebase? 10 • Define a way to
measure modularisation • Apply that to your codebase
11 Monolithic Modular What is your codebase? You are somewhere
here…
12 Monolithic Modular What is your codebase? = code base
with a module that takes more time to compile than other modules = code base with no modules that take more time to compile than the sum of other modules
What is your codebase? 13 Monolithic Modular
14 Monolithic Very Modular What is your codebase? Modular
15
Cohesion, Coupling & Gradle 16
High Cohesion Low Cohesion Cohesion 17 Low Cohesion High Cohesion
High Coupling Low Coupling Coupling 18 Low Coupling High Coupling
Gradle 19 • Module definition • Connecting Modules • Incremental
Compilation
20 import ':app' import ':login' import ':profile' import ':networking' import
':okhttp' settings.gradle.kts app/ -> login/ -> src/ -> build.gradle.kts -> profile/ -> src/ -> build.gradle.kts -> networking/ -> src/ -> build.gradle.kts -> okhttp/ -> src/ -> build.gradle.kts -> settings.gradle.kts app/ -> login/ -> src/ -> build.gradle.kts -> profile/ -> src/ -> build.gradle.kts -> networking/ -> src/ -> build.gradle.kts -> okhttp/ -> src/ -> build.gradle.kts -> settings.gradle.kts app/ -> login/ -> src/ -> build.gradle.kts -> profile/ -> src/ -> build.gradle.kts -> networking/ -> src/ -> build.gradle.kts -> okhttp/ -> src/ -> build.gradle.kts -> settings.gradle.kts app/ -> login/ -> src/ -> build.gradle.kts -> profile/ -> src/ -> build.gradle.kts -> networking/ -> src/ -> build.gradle.kts -> okhttp/ -> src/ -> build.gradle.kts -> settings.gradle.kts build.gradle.kts plugins { id("kotlin-android") } android { ... } dependencies { ... } Defining Modules
21 :networking :login :profile :okhttp :app Defining modules
dependencies { implementation project(":login") implementation project(":profile") } 22 app/build.gradle.kts Connecting
modules
23 :networking :login :profile :okhttp :app Connecting Modules
:profile :profile 24 :profile Incremental compilation
:login :profile :profile :login :networking :networking 25 :okhttp :app Incremental
compilation
The benefits of modularisation 26 Build Times Reusability
Incremental Build times 27 • How important are build times?
• When incremental build times go wrong • Some tips on cohesion
XKCD 303 - https://xkcd.com/303/ 28 Build Times
@vRallev on Twitter - https://mobile.twitter.com/vRallev/status/1485430862850125824 29 Build Times
@softwarejameson on Twitter - https://twitter.com/softwarejameson/status/1455971162060697613?lang=en 30 Build Times
Build times 600 engineers * $1.42/minutes * 42 builds/week *
44 work weeks/year = $1,600,000/year 31 Gradle vs Maven: Performance Comparison - https://gradle.org/gradle-vs-maven-performance/ Money Saved Equation
:timelines :profile :login :network models 32 Build times - comparing
structures :app :timelines :login :profile :networking :networking :network models
:timelines :login :login models :profile models :timeline models :profile :networking
33 Build times - comparing structures :app :timelines :login :profile :networking :login models :profile models :timeline models :json
Reusability 34 • What are reusable components • Reusable libraries
• Reusable modules
Reusability 35 OkHttp Play Billing Toast API
:timelines :profile :okhttp-4 :login Reusability - Third Parties 36 :timelines
:login :profile :okhttp-3 :okhttp-4 :networking :networking :okhttp-3
:navigation :navigation jetpack :navigation compose :login :timelines :timelines :login :profile
:profile Reusability - APIs & Implementations 37 :navigation :api :navigation: impl compose :navigation: impl jetpack :navigation :impl
A modularisation strategy 38 • Training • Discipline ◦ Cohesion
& Coupling
Coming up with a plan 39 :foundation :feature :feature :feature
:feature High Cohesion Low Coupling
Where to find me? 40 • @JordNullable
Any questions? 41