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
3
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
44
Other Decks in Programming
See All in Programming
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
From Translations to Multi Dimension Entities
alexanderschranz
2
130
testcontainers のススメ
sgash708
1
120
MCP with Cloudflare Workers
yusukebe
2
220
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
250
ドメインイベント増えすぎ問題
h0r15h0
2
300
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
Cloudflare MCP ServerでClaude Desktop からWeb APIを構築
kutakutat
1
540
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1k
선언형 UI에서의 상태관리
l2hyunwoo
0
160
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
220
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Statistics for Hackers
jakevdp
796
220k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
GitHub's CSS Performance
jonrohan
1030
460k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Code Reviewing Like a Champion
maltzj
520
39k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Become a Pro
speakerdeck
PRO
26
5k
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