Launch and interact with Android emulators and iOS simulators directly inside VS Code. View device screens, tap to interact, and monitor tool versions — all without leaving your editor.
Features
Android Emulator
- Live video streaming via scrcpy — real-time device display in a VS Code webview panel.
- Tap interaction — click on the device view to send touch events via ADB.
- Auto-launch — starts an AVD if none is running (configurable via
embedded-device-emulator.avdName). - Configurable stream quality — adjust max resolution and video bitrate.
iOS Simulator (Experimental)
- Screenshot polling — streams the simulator display as JPEG frames at ~2.5 FPS using
xcrun simctl io screenshot. - Tap interaction — uses the macOS Accessibility API (
osascript+ System Eventsclick at) to send taps to the Simulator window. Requires Xcode 26+. - Opt-in — disabled by default; enable via
embedded-device-emulator.enableIosSimulator.
Diagnostics
- Show Tool Versions — opens an output channel with versions for the extension, Node.js, platform, ANDROID_HOME, ADB, emulator, Java, Xcode, sim runtimes, scrcpy, and scrcpy-server.
Requirements
| Platform | Dependency |
|---|---|
| Android | Android SDK with platform tools (adb, emulator) |
| Android | scrcpy (brew install scrcpy or equivalent) |
| iOS | Xcode 26+ (full Xcode, not just Command Line Tools) |
| iOS | macOS — System Events Accessibility API for tap input |
Note: The iOS Simulator viewer requires Xcode 26.3 or later.
simctl io screenshotis used for display;simctl io tapwas removed in Xcode 26.3, so taps are sent via AppleScript.
Extension Settings
This extension contributes the following settings:
| Setting | Default | Description |
|---|---|---|
embedded-device-emulator.androidHome |
"" |
Path to Android SDK root (e.g., ~/Android/Sdk). Leave empty to use ANDROID_HOME environment variable. |
embedded-device-emulator.avdName |
"" |
Name of the AVD to launch if no emulator is running. |
embedded-device-emulator.scrcpyServerJar |
"" |
Path to scrcpy-server.jar. Leave empty to use the version bundled with scrcpy. |
embedded-device-emulator.maxSize |
1080 |
Maximum video dimension for the scrcpy stream. |
embedded-device-emulator.videoBitRate |
4000000 |
Video bitrate for the scrcpy stream (bps). |
embedded-device-emulator.enableIosSimulator |
false |
Enable the iOS Simulator viewer (experimental). |
Commands
| Command | Title |
|---|---|
embedded-device-emulator.startAndroidEmulator |
Embedded Simulator: Start Android Emulator |
embedded-device-emulator.startIosSimulator |
Embedded Simulator: Start iOS Simulator |
embedded-device-emulator.showVersions |
Embedded Simulator: Show Tool Versions |
Known Issues
- iOS viewer is experimental. Screenshot polling is limited to ~2.5 FPS. Tap coordinates may need calibration depending on your Simulator window size and macOS version.
- macOS Accessibility permission may be required for iOS taps. Grant permission to VS Code (or Terminal) in System Settings > Privacy & Security > Accessibility.
- The extension cannot run in virtual or untrusted workspaces — it needs access to local ADB, xcrun, and emulator binaries.
Release Notes
1.0.1
- Fix publisher ID for marketplace publishing.
- Add MIT license file.
- Various build and release pipeline improvements.
1.0.0
- Initial release.
- Android emulator video streaming via scrcpy with tap interaction.
- Experimental iOS simulator support (screenshot polling, Xcode 26+ only).
- Tool version diagnostics command.