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
37
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
Reusable Modules: It's as easy as ABI
jordan_terry
0
5
Resuable Modules - Its as easy as ABI
jordan_terry
0
270
Other Decks in Programming
See All in Programming
ゲームの物理 剛体編
fadis
0
400
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
300
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
450
Python札幌 LT資料
t3tra
7
1.1k
Patterns of Patterns
denyspoltorak
0
420
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
110
Cap'n Webについて
yusukebe
0
160
SQL Server 2025 LT
odashinsuke
0
130
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
650
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
6
2.1k
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
570
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
0
400
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
370
Automating Front-end Workflow
addyosmani
1371
200k
Six Lessons from altMBA
skipperchong
29
4.1k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
110
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Context Engineering - Making Every Token Count
addyosmani
9
590
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
130
So, you think you're a good person
axbom
PRO
0
1.9k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
230
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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