Oh My Android

io.github.ateymoori由 GitHub 帳號 ateymoori 發布v0.4.6更新於 Nov 3, 2026

AI agents see and drive the Android Emulator: screenshots, UI in dp, tap, dark mode, RTL, logcat.

已驗證STDIO僅桌面瀏覽器自動化開發者工具

概覽

AI 產生的概覽

讓 AI 代理透過 adb 檢視並操控 Android 模擬器或實機:截圖、以 dp 為單位的 UI 樹、點擊、輸入、裝置設定、logcat 與應用程式資料。

可以做什麼
  • 擷取並檢視畫面:以 1 像素 = 1 dp 縮放的截圖、帶參照的精簡 UI 樹、無障礙稽核。
  • 操作裝置:依參照、文字或座標點擊,滑動,輸入文字,按下按鍵。
  • 管理裝置與設定:列出裝置、讀取狀態,並切換深色模式、字型縮放、顯示大小、語言/由右至左、螢幕方向、TalkBack、動畫、Wi-Fi、飛航模式、網路速度、GPS 與電池。
  • 處理應用程式:列出並開啟應用程式或深層連結、管理應用程式、安裝 APK、讀取 logcat。
  • 讀取應用程式資料:SharedPreferences,以及在資料庫副本上執行唯讀 SQL 查詢。
  • 執行模擬器動作:指紋、來電、簡訊,以及儲存或載入快照。
適用情境
適合希望 AI 程式開發代理自行建置、執行並目視驗證 Android 應用程式的情境,例如檢查深色模式、大字型、RTL 或偽語言環境,稽核 TalkBack 標籤與觸控目標,或依 logcat 重現當機。適合已在 Apple 晶片 Mac 上使用 Android SDK、想免去手打 adb 指令進行代理驅動 UI 測試的 Android 開發者。
執行需求
需要 macOS 26 Tahoe 或更新版本的 Apple 晶片 Mac,以及來自 Android Studio(或命令列工具)的 Android SDK;應用程式會自行尋找 SDK,也可在設定中指定。MCP 伺服器是隨 Oh My Android 應用程式一同提供的原生二進位檔,透過 Homebrew cask 或簽章 zip 安裝,由代理以 stdio 啟動。需要執行中的模擬器或已連線手機。無需帳號、API 金鑰或網路存取。
安裝前請注意
伺服器可對裝置執行操作:點擊、輸入、安裝應用程式、清除資料、解除安裝與重設權限,可能遺失資料的工具會被標示,代理會先詢問。存取權限由應用程式內設定(關閉、唯讀、完整控制)控管,並在每次呼叫時檢查。它讀取的一切——畫面、UI 樹、日誌、應用程式資料——都會傳給代理,並進一步傳給代理的模型供應商。它只與本機 SDK 的 adb 通訊,應用程式每天進行一次更新檢查,可關閉。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Oh My Android,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[Oh My Android app icon: a surprised Android robot]

Oh My Android

Test your Android app in dark mode, big fonts, RTL and TalkBack: one click each, no adb commands.
A free, native ADB GUI for Mac that docks next to the Android Emulator. Works with real phones too.

[Latest release] [Homebrew cask] [macOS 26 or later, Apple silicon] [Featured in Android Weekly #747] [MIT license] [GitHub stars]

[Demo: the Oh My Android panel beside the Android Emulator switches dark mode, font size and language to Arabic RTL, then simulates an incoming SMS and call]
Dark mode, font size, Arabic RTL, incoming SMS and call. Each is one click.

Install

sh
brew install --cask ateymoori/tap/oh-my-android

Or the signed, notarized zip from Releases · macOS 26 Tahoe+ · Apple silicon · uses the Android SDK you already have (details) · ⭐ star to help more Android devs find it

  • 🎛️ Nearly 50 test actions, always visible. Dark mode, font and display size, language and locale incl. RTL and pseudo-locales, TalkBack, bold text, layout bounds, show taps, animations off, network speed, GPS, incoming call and SMS. Each icon shows the device's real state.
  • 📐 Layout Inspector in dp, for any app. Hover a view to see its size and the gaps around it in dp, for Compose and Views alike. Drop your Figma export on top to compare design and build. ⇧⌘A numbers the TalkBack stops and flags missing labels and touch targets under 48 dp.
  • 🗄️ Your debug build, without adb. Read SharedPreferences and SQLite, clear data, open deep links, drag an APK to install, reset permissions.
  • 🪶 Native and light. SwiftUI, event-driven, no Electron, no telemetry. Free and open source (MIT).

Why not just Android Studio? Studio's Device UI shortcuts already give one-click dark mode, font size, app language and TalkBack (API 33+). Use them when Studio is open. Oh My Android adds one always-visible panel for emulators and phones that works with Studio closed, toggles the shortcuts don't have (bold text, pseudo-locales, layout bounds, show taps, animations), and dp measurements on any app, where Studio's Layout Inspector needs a debuggable one. Compared with Studio, scrcpy and mobile-mcp: docs/COMPARISON.md.

🤖 Using Claude Code, Codex or Cursor? The app ships an MCP server (18 tools) so your agent can screenshot the emulator in dp, tap, and switch dark mode or RTL. Set it up →

Features · adb cheat sheet · Layout Inspector · AI agents (MCP) · Troubleshooting · FAQ · Contribute · Website

Features

What you get
🎨 AppearanceDark mode · Font size (0.85× → 2×) · Display size · Language and locale, incl. RTL and pseudo-locales · Rotate
📦 Your app (whatever is on screen)Restart · Clear data · Open deep link · Install APK (or drag it onto the panel) · App info · Reset permissions · Force stop · Uninstall
📸 CaptureScreenshot saved and copied to the clipboard · Screen recording with audio · Quality presets
🌐 NetworkEmulate LTE, HSDPA, 3G, EDGE, GPRS or GSM speed and latency · Airplane mode · Wi‑Fi · Mobile data
📐 Layout & performanceLayout Inspector · Show layout bounds · GPU overdraw · GPU profile bars · Show taps · Pointer location · Animations off (for Espresso / Maestro) · Developer options
♿ AccessibilityTalkBack on/off · Bold text · Invert colors · TalkBack order audit
🧭 Navigation & inputBack · Home · Recents · Type text into the focused field · Hide keyboard
🛰️ Simulate (emulator)GPS location: city presets or latitude/longitude · Battery level · Charging · Fingerprint · Incoming call · Incoming SMS
💾 Snapshots (emulator)Save a clean state and restore it in seconds

Destructive actions (Clear data, Uninstall, Reset permissions) ask before they run.

Updates and requirements

Besides Homebrew, you can download the zip from the latest release, unzip it, and move Oh My Android.app to Applications. The app is signed and notarized by Apple.

Updates: when a new version is out, a dot shows on the menu bar icon. Click Update to … in the menu, read what's new, and install in one click. The app never updates without asking. It checks once a day; turn it off in Settings → Updates. brew upgrade --cask oh-my-android works too.

Requirements: macOS 26 Tahoe or later, Apple silicon, and the Android SDK from Android Studio (or brew install --cask android-commandlinetools). The app finds the SDK by itself. If yours is in an unusual folder, pick it in Settings → Android SDK.

No more adb commands

Every icon replaces a command you would otherwise type or search for:

TaskThe adb wayOh My Android
Dark mode on the emulatoradb shell cmd uimode night yes🌙 one click
Bigger font sizeadb shell settings put system font_scale 1.3Aa − / +
Change the device languageadb shell cmd locale set-device-locale sv-SE🌐 pick from a menu
Test RTL layoutadb shell cmd locale set-device-locale ar-EG🌐 "العربية (RTL)"
Slow network (3G / EDGE)adb emu network speed edge + adb emu network delay edgepick a profile
Mock GPS locationadb emu geo fix 18.0686 59.3293pick a city
Turn off animations for UI tests3 × adb shell settings put global …_scale 0one click
Show layout boundsadb shell setprop debug.layout true + a system refresh callone click
Clear app datafind the package, then adb shell pm clear <package>🗑 one click
Take a screenshotadb exec-out screencap -p > shot.png📷 saved and copied
Turn on TalkBackadb shell settings put secure enabled_accessibility_services …one click
Open a deep linkadb shell am start -a android.intent.action.VIEW -d "myapp://…"paste and open

Layout Inspector

Freeze the screen and measure it like in Figma. Works with Jetpack Compose and classic Views.

[Layout Inspector: hover views to see their size in dp and the distances between them]

  • Hover any element to see its size in dp. Click one, hover another, and see the distance between them (gaps between siblings, paddings inside a parent).
  • 8 dp grid, color picker (hex, ⇧⌘C to copy), and an estimated text size in sp.
  • Design overlay: drop a Figma PNG export on the window, choose 1× / 2× / 3× or Fit width, set the opacity or use Difference blend, and nudge it with the arrow keys. Compare design and build pixel by pixel.

Accessibility audit

Press ⇧⌘A in the Layout Inspector. Every screen-reader stop gets a number in approximate TalkBack order, with what TalkBack announces and a list of problems: unlabeled buttons, images without a content description, and touch targets smaller than 48 × 48 dp.

Data Inspector

Browse the SharedPreferences (key, type, value) and SQLite databases (tables, first 500 rows) of any debuggable app, with search. It uses adb shell run-as, the same access Android Studio uses, so release builds stay closed. It is read-only: nothing on the device changes.

AI agents (MCP)

Oh My Android includes an MCP server, so your AI coding agent can see and drive the emulator: screenshot, read the UI tree in dp, tap and type, switch to dark mode or RTL, read logcat and the app's database. The agent can build a screen, run it, look at the result, and fix it by itself.

[AI Agents settings: Off, Read only or Full control, and the setup command for each agent]

[Add Oh My Android MCP server to Cursor] [Install Oh My Android MCP server in VS Code]

The buttons use the Homebrew path /opt/homebrew/bin/ohmyandroid-mcp. With the zip install, use the menu bar setup below.

Set up in one step: menu bar icon → AI Agents → Set Up…, choose your agent, click Copy (or Add to Cursor / Add to VS Code). Or by hand:

sh
claude mcp add --scope user oh-my-android -- ohmyandroid-mcp   # Claude Codecodex mcp add oh-my-android -- ohmyandroid-mcp                 # Codex CLIgemini mcp add --scope user oh-my-android ohmyandroid-mcp      # Gemini CLI
json
{ "mcpServers": { "oh-my-android": { "command": "/Applications/Oh My Android.app/Contents/MacOS/ohmyandroid-mcp" } } }

The JSON works in Cursor, Claude Desktop, Windsurf, Gemini CLI and other agents (VS Code uses "servers"). Homebrew puts ohmyandroid-mcp on your PATH. With the zip install, use the full path above.

Other ways to add it:

  • Claude Code plugin: /plugin marketplace add ateymoori/oh-my-android, then /plugin install oh-my-android@oh-my-android
  • Claude Desktop extension: open oh-my-android-<version>.mcpb from the latest release
  • MCP Registry: listed as io.github.ateymoori/oh-my-android

You stay in control: menu bar icon → AI Agents → Off, Read only or Full control. The server checks it on every call, so a change applies at once. Tools that can lose data are marked destructive, so your agent asks you first.

GroupTools
👀 Seescreenshot (scaled to 1 px = 1 dp) · get_ui (compact UI tree with refs) · accessibility_audit
👆 Acttap (by ref, text or x,y) · swipe · type_text · press_key
📱 Devicelist_devices · get_device_state · set_device_settings: dark mode, font scale, display size, locale / RTL, orientation, TalkBack, animations, Wi‑Fi, airplane mode, network speed, GPS, battery
📦 Appslist_apps · open_app (package or deep link, reports cold start time) · manage_app · install_apk · logcat
🗄️ Dataread_preferences · query_database (read-only SQL on a copy)
🧪 Emulatoremulator_action: fingerprint, incoming call, SMS, save / load snapshot

Ready-made prompts: accessibility_review, ui_matrix (dark mode, large fonts, RTL, pseudo-locales) and debug_crash.

Try asking your agent:

  • "Take a screenshot of the emulator and check this screen in dark mode."
  • "Open the app, go to Settings, and check it in dark mode, font scale 2 and Arabic. Fix what breaks."
  • "The app crashes when I tap Save. Reproduce it, read the crash, and fix it."
  • "Audit the login screen for TalkBack and fix the problems in the code."

Built for models: every position is in dp, like your layout code. Output is compact text: a UI tree is about 10× smaller than the raw uiautomator XML, and all 18 tool definitions take about 3k tokens. The server supports MCP 2026-07-28 and the earlier versions (2024-11-05 to 2025-11-25) over stdio, has no dependencies, and needs no network.

Privacy and security

  • 🔒 No analytics, no telemetry, no account. The only network request of its own is the update check: once a day it reads a small feed from this repo's GitHub releases. It sends nothing about you or your devices. Turn it off in Settings → Updates.
  • Updates (Sparkle) install only when you choose, and only if they are signed with this project's EdDSA key and the same Developer ID.
  • Talks only to the adb of your own Android SDK. Text you type is shell-quoted before it reaches the device.
  • Database copies from the Data Inspector are deleted when you reload and when the app quits.
  • The MCP server runs only when your AI agent starts it, and only with the access you allow. What it reads (screen, UI, logs, app data) goes to your agent, and from there to the agent's model provider.
  • Signed with a Developer ID, hardened runtime, notarized by Apple.

Found a vulnerability? See SECURITY.md.

Troubleshooting

  • adb not found: pick your SDK in Settings → Android SDK, or set ANDROID_HOME.
  • The agent says there is no device: start an emulator or connect a phone, then ask the agent to run list_devices.
  • Agent cannot start ohmyandroid-mcp (zip install): only Homebrew puts it on your PATH. Use the full path /Applications/Oh My Android.app/Contents/MacOS/ohmyandroid-mcp.
  • Homebrew says the tap is not trusted: Homebrew 6 and later ask you to trust third-party taps. The full brew install --cask ateymoori/tap/oh-my-android trusts only this cask. For short names, run brew trust --cask ateymoori/tap/oh-my-android first.
  • The agent gets "Access is Off": menu bar icon → AI Agents → Read only or Full control.

FAQ

Is Oh My Android free?

Yes. It is free and open source under the MIT license.

Does it replace the Android Emulator or Android Studio?

No. It is a companion. It controls Google's emulator and your phones through the Android SDK you already have. It bundles no emulator and no SDK.

Does it work with a real Android phone?

Yes, over USB or Wi‑Fi adb. Only the emulator-only blocks (GPS, battery, calls, SMS, snapshots, network speed, screen recording) need an emulator.

Does it work with Jetpack Compose?

Yes. The Layout Inspector and the accessibility audit read the Compose semantics tree through uiautomator, the same as for Views.

Which AI agents work with it?

Any agent that supports MCP over stdio: Claude Code, Claude Desktop, Codex CLI, Cursor, VS Code (GitHub Copilot), Windsurf, Gemini CLI, JetBrains AI, Zed and more. The app does not have to be open; the agent starts the server when it needs it.

How do I turn on dark mode on the Android Emulator?

Click the 🌙 icon in the panel. The adb way is adb shell cmd uimode night yes (and no to turn it off).

How do I test RTL layouts on the Android Emulator?

Pick "العربية (RTL)" or another RTL language from the 🌐 menu, or a pseudo-locale (ar-XB, en-XA) to find hard-coded strings and mirroring bugs. The adb way is adb shell cmd locale set-device-locale ar-EG.

How do I simulate a slow network on the Android Emulator?

Pick a profile (LTE, HSDPA, 3G, EDGE, GPRS, GSM) from the network menu. The panel sets both speed and latency, the same as adb emu network speed edge and adb emu network delay edge.

Is there an Android MCP server for Claude Code, Codex or Cursor?

Yes. ohmyandroid-mcp ships inside the app. Your agent can take screenshots in dp, read the UI tree, tap, type, switch dark mode, font size or RTL, and read logcat. See AI agents (MCP).

Is there an npx or uvx package?

No. The server is one native binary with no runtime; Homebrew puts ohmyandroid-mcp on your PATH.

Windows or Linux?

Not now. It is a native macOS app built with SwiftUI.

Why is it not in the Mac App Store?

Mac App Store apps must run in the App Sandbox, and a sandboxed app cannot start adb. Homebrew and GitHub releases are signed and notarized by Apple instead.

Why macOS 26 or later?

The panel uses Liquid Glass and other APIs that are new in macOS 26 Tahoe.

Build from source

sh
brew install xcodegengit clone https://github.com/ateymoori/oh-my-android.git && cd oh-my-androidxcodegen generateopen OhMyAndroid.xcodeproj

Needs Xcode 26. Local builds are ad-hoc signed, so you need no Apple Developer account.

Architecture
Sources/  App/        entry point, AppDelegate (host actions), Settings, assets  Core/       no UI, no feature knowledge    Shell/    ShellRunning: non-blocking Process runner, stopped on timeout or cancellation    Android/  AndroidSDK, ADBClient, DeviceTracker (adb track-devices), UI hierarchy, app data    SQLite/, Imaging/  Features/   one small type per capability, registered in FeatureCatalog (Foundation only)  MCP/        ohmyandroid-mcp: stdio MCP server built on Core and Features, shipped inside the app  State/      AppModel (composition root), DeviceStore, FeatureStore, inspector stores  Windows/    FloatingPanel, emulator window docking, tool windows  UI/         SwiftUI; FeatureCell renders any feature from its protocol

Dependencies point one way: UI → State → Features → Core. Features talk to the device through the ADBClient protocol and to the Mac through HostActions (file picker, clipboard, Finder), so each one is a small value type. Swift 6 language mode, strict concurrency, zero warnings.

ProtocolControlExample
ToggleFeatureon/off iconDark mode, TalkBack, Wi‑Fi
BatchReadable (add-on)state read in one shared adb shell round-tripevery settings / getprop feature
StepperFeaturepopover with − / +Font size, Display size
ChoiceFeaturemenuLanguage, Network speed, Battery
ActionFeatureone tapScreenshot, Rotate, Force stop
TextActionFeaturepopover with a text fieldDeep link, Type text, SMS

Energy: nothing polls. Device changes come from adb's track-devices stream. Feature values are read in one batched adb shell call when you select a device, after an action, and when the pointer comes back to the panel. Docking uses a 1 Hz timer only while an emulator runs and the panel is visible.

The app and menu bar icons are drawn in code: Scripts/make-icon.swift.

Roadmap

  • Compare mode: two devices side by side, mirrored input, pixel diff
  • The emulator screen embedded in the panel window
  • DataStore (.preferences_pb) support in the Data Inspector
  • MCP: start and stop emulators, record the screen

Have an idea? Open a feature request. Adding a feature is one small Swift struct: see CONTRIBUTING.md.


⭐ If Oh My Android saves you time, please star this repository.
Stars help other Android developers find it and show that new features are worth building.
To get a notification for every new version, click Watch → Custom → Releases.

[Star Oh My Android on GitHub]

License

MIT © 2026 Royan AB.

Android is a trademark of Google LLC. Oh My Android is not affiliated with or endorsed by Google. The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.


Made in Sweden by 🇸🇪 Royan AB
Oh My Android website · royan.se

來源:README.md,提交 9f37391

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v0.4.6最新Oct 19, 2026
  2. v0.4.5Sep 27, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分