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
150
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
More Decks by Aurimas Liutikas
See All by Aurimas Liutikas
Moments When Things Go Wrong
aurimas
3
210
The Benevolent Gradle Overlord: Keeping Order
aurimas
3
170
Gradle: Your Build, Your Rules
aurimas
3
100
APIs: How Hard Can They Be?
aurimas
2
79
Gradle: The Build System That Loves To Hate You
aurimas
4
3.2k
Ultimate Iteration Speeds with Gradle Configuration Cache
aurimas
2
240
More Effective Testing on Android Devices
aurimas
1
120
Gradle under the microscope
aurimas
2
230
Chasing the Speed of Gradle Builds: a history of Androidx build
aurimas
1
170
Other Decks in Technology
See All in Technology
暗号化?某ファイルストレージはどうなるの!? 3rd Partyとうまく付き合う秘密度ラベル設計
kasada
0
200
Digitization部 紹介資料
sansan33
PRO
2
7.7k
AI時代の「OAuth認証」にどう物申すか?(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
250
あなたの知らないバージョン命名規則
sat
PRO
2
730
AWSとGitHub Actionsの責任境界と 組織で安全に使用する取り組み
nealle
0
150
VLMで2.3万枚のPyCon JP写真を検索!
terapyon
1
500
みてねにおけるAI-DLC導入活動とAIドリブン開発の現在地/JAWS-UG AI-DLC #2
isaoshimizu
2
110
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
260
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
2
140
1000⼈規模のClaude Enterprise運⽤を「Oktaのグループ」と「Slack」に集約する
sansantech
PRO
0
380
NANDでも描画したい!
nichica906
3
730
AI画像認識を活用したゲーム内決済処理検証の自動化
gree_tech
PRO
0
500
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Are puppies a ranking factor?
jonoalderson
2
3.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Music & Morning Musume
bryan
47
7.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
GitHub's CSS Performance
jonrohan
1033
470k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Facilitating Awesome Meetings
lara
57
7.1k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
440
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
430
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Documentation Writing (for coders)
carmenintech
77
5.5k
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!