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
Taming the Monorepo Beast: How We Made AndroidX...
Search
Aurimas Liutikas
September 26, 2024
Technology
1
65
Taming the Monorepo Beast: How We Made AndroidX Library Releases At Scale More Bearable
Talk by Aurimas Liutikas (Google) at DPE Summit SF 2024
Aurimas Liutikas
September 26, 2024
Tweet
Share
More Decks by Aurimas Liutikas
See All by Aurimas Liutikas
Gradle: The Build System That Loves To Hate You
aurimas
2
2.7k
Ultimate Iteration Speeds with Gradle Configuration Cache
aurimas
1
140
More Effective Testing on Android Devices
aurimas
0
40
Gradle under the microscope
aurimas
1
110
Chasing the Speed of Gradle Builds: a history of Androidx build
aurimas
0
92
Other Decks in Technology
See All in Technology
Spring Bootで実装とインフラをこれでもかと分離するための試み
shintanimoto
7
820
DETR手法の変遷と最新動向(CVPR2025)
tenten0727
2
1.4k
watsonx.data上のベクトル・データベース Milvusを見てみよう/20250418-milvus-dojo
mayumihirano
0
120
Porting PicoRuby to Another Microcontroller: ESP32
yuuu
4
410
生成AIによるCloud Native基盤構築の可能性と実践的ガードレールの敷設について
nwiizo
7
750
Terraform Cloudで始めるおひとりさまOrganizationsのすゝめ
handy
2
180
コスト最適重視でAurora PostgreSQLのログ分析基盤を作ってみた #jawsug_tokyo
non97
0
110
Goの組織でバックエンドTypeScriptを採用してどうだったか / How was adopting backend TypeScript in a Golang company
kaminashi
6
5.8k
彩の国で始めよう。おっさんエンジニアから共有したい、当たり前のことを当たり前にする技術
otsuki
0
150
Рекомендации с нуля: как мы в Lamoda превратили главную страницу в ключевую точку входа для персонализированного шоппинга. Данил Комаров, Data Scientist, Lamoda Tech
lamodatech
0
730
【Λ(らむだ)】最近のアプデ情報 / RPALT20250422
lambda
0
110
更新系と状態
uhyo
7
1.6k
Featured
See All Featured
Building an army of robots
kneath
304
45k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.4k
Building Flexible Design Systems
yeseniaperezcruz
329
38k
Writing Fast Ruby
sferik
628
61k
Gamification - CAS2011
davidbonilla
81
5.2k
Into the Great Unknown - MozCon
thekraken
37
1.7k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Practical Orchestrator
shlominoach
186
11k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
A Tale of Four Properties
chriscoyier
158
23k
How to train your dragon (web standard)
notwaldorf
90
6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Transcript
Taming the Monorepo Beast How We Made AndroidX Library Releases
At Scale More Bearable Aurimas Liutikas / AndroidX @ Google @
[email protected]
What is androidx? Collection of widely used open-source libraries Main
Android API surface Broad range of functionality Developed by dozens of separate teams
Early Days Releases (com.android.support)
Early Days Releases Monolith releases a few times a year
21.0.3 21.0.2 21.0.0
Early Days Releases Uniform version with major based on Android
API level 21.0.3 21.0.2 21.0.0 22.2.1 22.2.0 22.1.1 22.1.0 22.0.0 23.4.0 23.3.0 23.2.1 23.2.0 23.1.1 23.1.0 23.0.1 23.0.0
Early Days Releases Eventually added alpha/beta 21.0.3 21.0.2 21.0.0 22.2.1
22.2.0 22.1.1 22.1.0 22.0.0 23.4.0 23.3.0 23.2.1 23.2.0 23.1.1 23.1.0 23.0.1 23.0.0 24.2.1 24.2.0 24.1.1 24.1.0 24.0.0 24.0.0-beta1 24.0.0-alpha2 24.0.0-alpha1 25.4.0 25.3.1 25.3.0 25.2.0 25.1.1 25.1.0 25.0.1 25.0.0 26.1.0 26.0.2 26.0.1 26.0.0 26.0.0-beta2 26.0.0-beta1 26.0.0-alpha1
No Longer Scaling (circa 2018) 60 libraries from ~13 teams
9 pages of release instructions Some libraries were monoliths of their own Bug fix in one library → 59 released with no changes Forced releases to align with Android OS releases
08 May 2018 Hello World, androidx Generated by Google AI
Image Generator
The New Plan Split and restructure libraries • À la
carte library adoption • Clear maven coordinate to package mapping ◦ androidx.foo:foo-bar →androidx.foo.bar Generated by Google AI Image Generator
The New Plan Adopt per library semantic versioning
The New Plan Adopt per library semantic versioning MAJOR.MINOR.PATCH
The New Plan Adopt per library semantic versioning MAJOR.MINOR.PATCH
The New Plan Adopt per library semantic versioning MAJOR.MINOR.PATCH
The New Plan Adopt per library semantic versioning MAJOR.MINOR.PATCH-(alpha|beta|rc)
The New Plan Depend on the lowest possible versions of
other libraries androidx.foo:foo:1.0.0 androidx.foo:foo:1.0.1 androidx.foo:foo:1.1.0 androidx.foo:foo:1.2.0 androidx.foo:foo:1.3.0 androidx.foo:foo:1.0.0 androidx.foo:foo:1.0.1 androidx.foo:foo:1.1.0 androidx.foo:foo:1.2.0 androidx.foo:foo:1.3.0 vs
Let’s execute the new plan!
Welp, this is a lot of manual work
Interconnectedness
Interconnectedness
Pinned vs Unpinned api(project(“:foo:foo-bar”)) vs api(“androidx.foo:foo-bar:1.1.0”)
Can we move to self-service?
Optional Release Trains (controlled chaos)
None
None
None
androidx-main vs release branches alpha & beta from androidx-main •
regular development rc & stable from androidx-foo-release • cherry-pick only
How Has It Gone?
Scale of androidx androidx migration Jetpad
Scale of androidx androidx migration Jetpad
Scale of androidx Jetpad
MISSION ACCOMPLISHED?
Current Pain Points Painful bugfix releases
Current Pain Points Painful bugfix releases Difficult build infrastructure backports
to release branches
Current Pain Points Painful bugfix releases Difficult build infrastructure backports
to release branches Kotlin Multiplatform artifact explosion
That’s all Folks!