$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scaling Emulators for Better Testing: Droidcon ...
Search
Amanjeet Singh
December 17, 2025
0
25
Scaling Emulators for Better Testing: Droidcon 2025
Amanjeet Singh
December 17, 2025
Tweet
Share
More Decks by Amanjeet Singh
See All by Amanjeet Singh
Scaling Android Emulators with Cloud
amanjeetsingh150
0
120
Maestro: A paradigm shift in UI testing
amanjeetsingh150
1
330
Chasing Performance Issues Methodically
amanjeetsingh150
0
390
Coroutines and Rx: A battle towards Asynchrony
amanjeetsingh150
1
210
Coroutines and Rx: A battle towards Asynchronicity
amanjeetsingh150
2
280
Journey of APK from Compile to Start
amanjeetsingh150
5
520
Journey to understand Observer and Pub-Sub Pattern
amanjeetsingh150
3
200
Dependency Injection on iOS
amanjeetsingh150
0
160
Journey of APK from compilation to installation
amanjeetsingh150
0
240
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
Building Applications with DynamoDB
mza
96
6.8k
Agile that works and the tools we love
rasmusluckow
331
21k
GitHub's CSS Performance
jonrohan
1032
470k
Done Done
chrislema
186
16k
Music & Morning Musume
bryan
46
7k
For a Future-Friendly Web
brad_frost
180
10k
Speed Design
sergeychernyshev
33
1.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
BBQ
matthewcrist
89
9.9k
Context Engineering - Making Every Token Count
addyosmani
9
510
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Transcript
Scaling Emulators for Better Testing Amanjeet Singh https://www.amanjeet.me/
• Open source • Community > 5k+ members • Stars
~ 9k ⭐ • Cross Platform Maestro: E2E testing Framework
Why Moving to Cloud?
Why Moving to Cloud? “Running parallel tests, faster feedback for
releasing apps”
How to run on cloud?
Cloud Providers
Cloud Providers
Self Hosted
Self Hosted
Self Hosted
Self Hosted
Why Self Hosted?
Why Self Hosted in 500 mg app?
Why Self Hosted in 500 mg app? • Add to
cart fl ow in fl aky network.
• Launching 500mg consumer app on TvOS/WatchOS • Add to
cart fl ow in fl aky network. Why Self Hosted in 500 mg app?
• Supporting 500mg app for multiple locale • Launching 500mg
consumer app on TvOS/WatchOS • Add to cart fl ow in fl aky network. Why Self Hosted in 500 mg app?
• Supporting 500mg app for multiple locale • Launching 500mg
consumer app on TvOS/WatchOS • Add to cart fl ow in fl aky network. • You don’t want to spend money 🤣 Why Self Hosted in 500 mg app?
• Supporting 500mg app for multiple locale • Launching 500mg
consumer app on TvOS/WatchOS • Add to cart fl ow in fl aky network. • You don’t want to spend money 🤣 More Control Why Self Hosted in 500 mg app?
Helping Tom 👨💻 From 500mg
Project: Setup Emulators Infra
• Setup Android Virtual Devices (AVDs) • Giving AVDs superpowers
• Deployment of AVDs and Launching them Project: Setup Emulators Infra
Setup Android Virtual Devices (AVDs) • CLI ✅, Android Studio
GUI ❌
Setup Android Virtual Devices (AVDs) • CLI ✅, Android Studio
GUI ❌ • CLI ✅, Android Studio GUI Creating AVD Downloading AVDs Selecting the con fi gurations
• Download and Creating AVDs Setup Android Virtual Devices (AVDs)
• Applying con fi guration to AVD Setup Android Virtual
Devices (AVDs)
Super Powers Unlocked
Super Powers Unlocked Issue I: API 29 breaks in every
other release - Crash rate stuck at ~94% 📉
Super Powers Unlocked Issue I: API 29 breaks in every
other release - Crash rate stuck at ~94% 📉
Super Powers Unlocked Issue II: Expanding to watchOS + tvOS
— need platform parity ⌚📺
Super Powers Unlocked Issue II: Expanding to watchOS + tvOS
— need platform parity ⌚📺
Super Powers Unlocked Issue III: New Android versions every year
— must stay ahead 🚀
Super Powers Unlocked Issue III: New Android versions every year
— must stay ahead 🚀
Setup Android Virtual Devices (AVDs) Project: Setup Emulators Infra ✅
android-36, 8 Gib emulator, arm-64, 4 CPU core 👉
Setup Android Virtual Devices (AVDs) Project: Setup Emulators Infra ✅
Launch Emulators ✅
Let’s Deploy 🚀
It works, But 🥲
Issue Category I
Issue Category I • Issue I: Chrome Welcome Screen
Issue Category I • Issue I: Chrome Welcome Screen •
Issue II: Timing issues, due to animations
Issue Category I • Issue I: Chrome Welcome Screen •
Issue III: Different apps interfering • Issue II: Timing issues, due to animations
Issue Category I • Issue I: Chrome Welcome Screen •
Issue III: Different apps interfering • Issue II: Timing issues, due to animations • Issue IV: I don’t know where my test taps
Issue Category I • Issue V: Screen recording limit of
3 mins • Issue I: Chrome Welcome Screen • Issue III: Different apps interfering • Issue II: Timing issues, due to animations • Issue IV: I don’t know where my test taps https://maestro.dev/blog/ fi xing-androids-3-minute-screen-recording-limitation
Tom-Man got Covered 👨💻
Tom-Man got Covered 👨💻
Tom-Man got Covered 👨💻 Super Power: Emulator Snapshots
Emulator Snapshots
Emulator Snapshots • Boot Emulator
Emulator Snapshots • Boot Emulator • Apply the adb con
fi gurations
Emulator Snapshots • Boot Emulator • Apply the adb con
fi gurations • Backup the qcow2 image and swap it with original
Emulator Snapshots • Boot Emulator • Apply the adb con
fi gurations • Backup the qcow2 image and swap it with original • Launch the emulator and don’t save snapshot during test fi nish
Issue Category II Product Team @ 500mg
Requirement I • Requirement I: We need to test 500
mg with different locales
Tom-Man discovering Powers! 👨💻
Locale Superpower ✅
Requirement II • We must test 500mg under flaky, edge-speed
networks, because users are not able to order
Super Power: Emulator Options 👨💻
Super Power: Emulator Options 👨💻
Super Power: Emulator Options 👨💻
• We must test 500 mg in low ram device
Super Power: Emulator Options 👨💻
Issue Category III
Issue Category III • Emulator disconnects in middle of test,
adbd dies randomly.
Issue Category III • Emulator disconnects in middle of test,
adbd dies randomly. • 500 mg flow for KYC works locally but not on cloud 🥲
Issue Category III • Emulator disconnects in middle of test,
adbd dies randomly. • 500 mg flow for KYC works locally but not on cloud 🥲 Issue X: Only happens on cloud and not local 👉
Super Power: Emulator Logs 👨💻
Super Power: Emulator Logs 👨💻 Idea: Using emulator logs around
the time of failure for better debugging
Super Power: Emulator Logs 👨💻 Idea: Using emulator logs around
the time of failure for better debugging
Super Power: Emulator Logs 👨💻 Idea: Using emulator logs around
the time of failure for better debugging
POV of CI at 500mg! • Emulator Snapshots • Emulator
Command line Options • Emulator logs • 500mg Test Driver APK for Locale
Finally Works ✅
Fin 🙋