$30 off During Our Annual Pro Sale. View Details »
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
2
98
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
The Benevolent Gradle Overlord: Keeping Order
aurimas
2
65
Gradle: Your Build, Your Rules
aurimas
2
43
APIs: How Hard Can They Be?
aurimas
1
30
Gradle: The Build System That Loves To Hate You
aurimas
3
3k
Ultimate Iteration Speeds with Gradle Configuration Cache
aurimas
2
170
More Effective Testing on Android Devices
aurimas
1
75
Gradle under the microscope
aurimas
2
160
Chasing the Speed of Gradle Builds: a history of Androidx build
aurimas
1
130
Build bigger, better: Gradle for large projects
aurimas
2
15
Other Decks in Technology
See All in Technology
Playwrightのソースコードに見る、自動テストを自動で書く技術
yusukeiwaki
13
5.2k
【AWS re:Invent 2025速報】AIビルダー向けアップデートをまとめて解説!
minorun365
4
500
世界最速級 memcached 互換サーバー作った
yasukata
0
330
re:Invent 2025 ふりかえり 生成AI版
takaakikakei
1
190
MapKitとオープンデータで実現する地図情報の拡張と可視化
zozotech
PRO
1
130
Uncertainty in the LLM era - Science, more than scale
gaelvaroquaux
0
840
文字列の並び順 / Unicode Collation
tmtms
3
520
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
470
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
450
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
180
生成AI時代におけるグローバル戦略思考
taka_aki
0
120
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
120
Featured
See All Featured
The Language of Interfaces
destraynor
162
25k
How GitHub (no longer) Works
holman
316
140k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Speed Design
sergeychernyshev
33
1.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Pragmatic Product Professional
lauravandoore
37
7.1k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Facilitating Awesome Meetings
lara
57
6.7k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
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!