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
180
Gradle: Your Build, Your Rules
aurimas
3
110
APIs: How Hard Can They Be?
aurimas
2
81
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
130
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
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
220
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
2
230
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
3
1.4k
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
120
設計の世代交代を乗り越える、14年続くAndroidアプリの開発戦略
sansantech
PRO
1
130
grill-me(grilling):AI駆動開発を超助けてくれるSkill / grill me
mathbullet
0
110
Azure App Service / Container Apps の組み込み認証
kuniteru
0
190
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
KAEN Company Deck
kaen
PRO
0
320
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
150
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
230
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
260
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Are puppies a ranking factor?
jonoalderson
2
3.9k
Automating Front-end Workflow
addyosmani
1369
210k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
920
Side Projects
sachag
455
43k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
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!