A native Mac panel for the Android Emulator, with an MCP server built in
Most of our Android work happens on a Mac with the emulator open next to Android Studio. Over time we collected a pile of adb one-liners for the small checks we run all day. Switch to dark mode. Bump the font scale. Look at spacing in dp. Peek at what an app wrote to SharedPreferences. Oh My Android is what we built to stop retyping them. It is a native macOS app that docks next to the Android Emulator and puts those checks one click away. It also ships an MCP server, so a coding agent can see the emulator screen and act on it. The code is on GitHub under the MIT license. The repo was created on September 24, 2026, and the latest release is v0.4.6 from October 19. That makes 8 releases so far. Install You can install it from our own Homebrew tap: brew install --cask ateymoori/tap/oh-my-android This is our tap, not the official homebrew-cask repo. If you prefer, there is also a signed and notarized zip on the releases page. You need macOS 26 Tahoe or later on Apple silicon, plus the Android SDK. Android Studio gives you the SDK. If you don't want the IDE, the command line tools work too: brew install --cask android-commandlinetools What the panel does The panel has 48 actions in 9 groups: Appearance (5) App (9) Capture (4) Network (4) Layout and performance (8) Accessibility (3) Navigation and input (6) Simulate (7) Snapshots (2) Font size steps through 0.85, 1.0, 1.15, 1.3, 1.5, 1.8 and 2.0. That makes it quick to see where a layout breaks at large text sizes. Android Studio's Device UI shortcuts cover some of these toggles on API 33 and up. We wanted them in one place next to the emulator window, together with the rest of the checks below. Layout Inspector The Layout Inspector works on any app, not only the ones you build. It reads the uiautomator tree and shows sizes and gaps in dp. You can lay an 8 dp grid over the screen and pick colors. There is also a Figma overlay. Drop in a frame at 1x, 2x, 3x or fit, then set the opacity. Difference mode shows where the build drifts from the design, so you don't have to compare two windows by eye. TalkBack audit Press Shift-Cmd-A to run a TalkBack audit on the current screen. It numbers each stop in approximate TalkBack order. It also flags unlabeled buttons, images without a content description, and touch targets smaller than 48x48 dp. It is a fast first pass. It doesn't replace testing with TalkBack turned on, but it catches the common misses before a real screen reader session. Data Inspector For debuggable apps, the Data Inspector shows SharedPreferences and SQLite databases. It goes through run-as and is read-only. For SQLite it loads the first 500 rows of a table. That is enough to check that a write landed without pulling files off the device. The MCP server The app bundle includes an MCP server called ohmyandroid-mcp. It speaks stdio, has no dependencies and makes no network calls. It exposes 18 tools and 3 prompts: accessibility_review, ui_matrix and debug_crash. We kept the tool list small on purpose. The tools/list reply is 14,550 bytes, which is under 4k tokens. That is all the context an agent spends on the tool list before it does anything. Screenshots are scaled so 1 pixel equals 1 dp, using 160/dpi. When the agent measures something in a screenshot, the number it reads is already in dp. The UI tree comes back as one line per element: [23] Button "Sign in" #sign_in @16,700 379x48 tap That line has an index, the role, the label, the resource id, the position, the size in dp and the action the agent can take. It is enough for an agent to find the Sign in button and tap it. Access control The app has a switch for what agents may do: Off, Read only or Full control. The server reads that setting from the app's preferences on every call, so a change applies right away without restarting anything. Tools that can lose data are marked destructive, so the agent asks you before it runs them. Connecting it to your agent There are setup commands for Claude Code, Codex and Gemini CLI, and install buttons for Cursor and VS Code. There is also a Claude Code plugin and a .mcpb extension for Claude Desktop. The server is listed in the MCP Registry as io.github.ateymoori/oh-my-android. Privacy and updates There is no telemetry and no account. The app checks for updates once a day through Sparkle, and you can turn that off. An update only installs if it carries the project's EdDSA signature and the same Developer ID as the app you have. Energy use A panel that sits open all day should not drain the battery, so the app does not poll. It listens to the adb track-devices stream to see devices come and go. Each refresh is one batched adb shell read. The only timer is a 1 Hz docking timer, and it runs only while an emulator is running and the panel is visible. How it is built The app is built with SwiftUI and AppKit. It compiles under Swift 6 strict concurrency with warnings treated as errors. It is about 6,600 lines of Swift and has one dependency, Sparkle 2.10.0. Strict concurrency means the compiler checks how work moves between threads. With many adb calls running in the background, we wanted those mistakes to fail the build rather than show up later. What it doesn't do To save you a download: it runs only on Apple silicon Macs with macOS 26 or later. There is no Intel, Windows or Linux build. It does not mirror a device screen, and it does not work with iOS simulators or devices. Android Weekly featured it in issue #747. If you try it and something breaks or feels missing, open an issue on GitHub. Oh My Android is built by Royan AB, and the code lives at github.com/ateymoori/oh-my-android. Written with help from an AI assistant.
This is a summary aggregated from Dev.to. Read the complete article on the original site:
Read full article at Dev.to