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
9
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
120
Other Decks in Programming
See All in Programming
コンポーネントライブラリで実現する、アクセシビリティの正しい実装パターン
schktjm
1
670
當開發遇上包裝:AI 如何讓產品從想法變成商品
clonn
0
2.6k
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
1.6k
型付け力を強化するための Hoogle のすゝめ / Boosting Your Type Mastery with Hoogle
guvalif
1
230
Babylon.js 8.0のアプデ情報を 軽率にキャッチアップ / catch-up-babylonjs-8
drumath2237
0
110
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
0
220
FastMCPでMCPサーバー/クライアントを構築してみる
ttnyt8701
2
100
What Spring Developers Should Know About Jakarta EE
ivargrimstad
1
620
イベントストーミングから始めるドメイン駆動設計
jgeem
3
420
AIにコードを生成するコードを作らせて、再現性を担保しよう! / Let AI generate code to ensure reproducibility
yamachu
7
6.1k
「兵法」から見る質とスピード
ickx
0
200
Building an Application with TDD, DDD and Hexagonal Architecture - Isn't it a bit too much?
mufrid
0
370
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
42
2.3k
Speed Design
sergeychernyshev
30
970
Adopting Sorbet at Scale
ufuk
76
9.4k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Designing Experiences People Love
moore
142
24k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
How to train your dragon (web standard)
notwaldorf
92
6k
Become a Pro
speakerdeck
PRO
28
5.4k
Into the Great Unknown - MozCon
thekraken
39
1.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
34k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.8k
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