Oh My Android
Aplicación nativa de macOS y servidor MCP que permite a los agentes de IA ver y controlar el Emulador de Android y teléfonos: capturas de pantalla, árbol de UI en dp, toques, modo oscuro, RTL, logcat.
Documentación
Oh My Android
El panel de control que faltaba para el Emulador de Android en macOS: una GUI de ADB gratuita para Mac.
Modo oscuro, tamaño de fuente, idioma RTL, TalkBack, velocidad de red, GPS y más: un clic para cada uno, sin comandos de adb.
Inspector de diseño en dp, auditoría de accesibilidad y un servidor MCP para que los agentes de IA puedan controlar tu emulador.
Instalación: brew install --cask ateymoori/tap/oh-my-android · gratuito y de código abierto
Sitio web: royan.se/work/oh-my-android
Modo oscuro, tamaño de fuente, RTL en árabe, SMS y llamadas entrantes. Cada uno con un clic.
![]() | ![]() | ![]() |
| Panel de control | Inspector de diseño + auditoría de TalkBack | Servidor MCP para agentes de IA |
Características · Hoja de referencia de adb · Inspector de diseño · Agentes de IA (MCP) · Solución de problemas · Preguntas frecuentes · Contribuir · Sitio web
¿Por qué Oh My Android?
Probar una aplicación de Android significa hacer las mismas tareas una y otra vez: cambiar al modo oscuro, hacer la
fuente enorme, cambiar el idioma a árabe para comprobar el RTL, activar TalkBack, limitar la red a 3G,
borrar los datos de la aplicación, tomar una captura de pantalla. Cada una está oculta en la configuración del emulador o necesita un
comando de adb shell que tienes que buscar de nuevo.
Oh My Android las pone todas en un panel flotante junto al emulador. Cada icono muestra el
estado real del dispositivo, y un clic lo cambia. Es una aplicación nativa de macOS para desarrolladores de Android y
probadores de control de calidad: una GUI para el Emulador de Android, una GUI de adb para teléfonos reales, un Inspector de diseño en dp, un
verificador de accesibilidad y un servidor MCP de Android para Claude Code, Codex, Cursor y otros agentes de codificación con IA.
- ⚡ Un clic para casi 50 acciones de prueba cotidianas
- 📱 Emuladores y teléfonos reales:
adbpor USB o Wi‑Fi - 🔍 Inspector de diseño: mide cualquier vista en dp, estilo Figma, y superpone tu diseño
- ♿ Auditoría de accesibilidad: orden de TalkBack, etiquetas faltantes, objetivos táctiles pequeños
- 🗄️ Inspector de datos: SharedPreferences y SQLite de tu compilación de depuración
- 🤖 Servidor MCP para agentes de IA: tu agente de codificación puede ver la pantalla, tocar, cambiar la configuración y leer registros
- 🪶 Nativo y ligero: SwiftUI, Liquid Glass, basado en eventos (fácil con la batería), sin Electron, sin telemetría
- 🆓 Gratuito y de código abierto (MIT)
Cómo se compara con Android Studio, scrcpy y otras herramientas: docs/COMPARISON.md.
Instalación
brew install --cask ateymoori/tap/oh-my-android
O descarga el zip desde la última versión, descomprímelo y mueve Oh My Android.app a Aplicaciones. La aplicación está firmada y notarizada por Apple.
Actualizaciones: cuando hay una nueva versión, aparece un punto en el icono de la barra de menú. Haz clic en Actualizar a … en el
menú, lee las novedades e instala con un clic. La aplicación nunca se actualiza sin preguntar. Comprueba una vez al
día; desactívalo en Configuración → Actualizaciones. brew upgrade --cask oh-my-android también funciona.
Requisitos: macOS 26 Tahoe o posterior, Apple silicon y el SDK de Android de
Android Studio (o brew install --cask android-commandlinetools).
La aplicación encuentra el SDK por sí misma. Si el tuyo está en una carpeta inusual, selecciónalo en Configuración → SDK de Android.
Úsalo desde Claude Code, Codex o Cursor
brew install --cask ateymoori/tap/oh-my-android
claude mcp add --scope user oh-my-android -- ohmyandroid-mcp # Claude Code
codex mcp add oh-my-android -- ohmyandroid-mcp # Codex CLI
gemini mcp add --scope user oh-my-android ohmyandroid-mcp # Gemini CLI
Para Cursor y VS Code, usa los botones de instalación en Agentes de IA (MCP). Luego inicia un emulador y pídele a tu agente: "Toma una captura de pantalla del emulador y comprueba esta pantalla en modo oscuro."
Características
| Lo que obtienes | |
|---|---|
| 🎨 Apariencia | Modo oscuro · Tamaño de fuente (0,85× → 2×) · Tamaño de pantalla · Idioma y configuración regional, incl. RTL y pseudo-locales · Rotar |
| 📦 Tu aplicación (lo que esté en pantalla) | Reiniciar · Borrar datos · Abrir enlace profundo · Instalar APK (o arrástralo al panel) · Información de la aplicación · Restablecer permisos · Forzar detención · Desinstalar |
| 📸 Captura | Captura de pantalla guardada y copiada al portapapeles · Grabación de pantalla con audio · Ajustes preestablecidos de calidad |
| 🌐 Red | Emular velocidad y latencia de LTE, HSDPA, 3G, EDGE, GPRS o GSM · Modo avión · Wi‑Fi · Datos móviles |
| 📐 Diseño y rendimiento | Inspector de diseño · Mostrar límites de diseño · Sobredibujado de GPU · Barras de perfil de GPU · Mostrar toques · Ubicación del puntero · Animaciones desactivadas (para Espresso / Maestro) · Opciones de desarrollador |
| ♿ Accesibilidad | TalkBack activado/desactivado · Texto en negrita · Invertir colores · Auditoría de orden de TalkBack |
| 🧭 Navegación y entrada | Atrás · Inicio · Recientes · Escribir texto en el campo enfocado · Ocultar teclado |
| 🛰️ Simular (emulador) | Ubicación GPS: ajustes preestablecidos de ciudad o latitud/longitud · Nivel de batería · Carga · Huella dactilar · Llamada entrante · SMS entrante |
| 💾 Instantáneas (emulador) | Guarda un estado limpio y restáuralo en segundos |
Las acciones destructivas (Borrar datos, Desinstalar, Restablecer permisos) preguntan antes de ejecutarse.
No más comandos adb
Cada icono reemplaza un comando que de otro modo escribirías o buscarías:
| Tarea | La forma adb | Oh My Android |
|---|---|---|
| Modo oscuro en el emulador | adb shell cmd uimode night yes | 🌙 un clic |
| Tamaño de fuente más grande | adb shell settings put system font_scale 1.3 | Aa − / + |
| Cambiar el idioma del dispositivo | adb shell cmd locale set-device-locale sv-SE | 🌐 elige de un menú |
| Probar el diseño RTL | adb shell cmd locale set-device-locale ar-EG | 🌐 "العربية (RTL)" |
| Red lenta (3G / EDGE) | adb emu network speed edge + adb emu network delay edge | elige un perfil |
| Simular ubicación GPS | adb emu geo fix 18.0686 59.3293 | elige una ciudad |
| Desactivar animaciones para pruebas de UI | 3 × adb shell settings put global …_scale 0 | un clic |
| Mostrar límites de diseño | adb shell setprop debug.layout true + una llamada de actualización del sistema | un clic |
| Borrar datos de la aplicación | encuentra el paquete, luego adb shell pm clear <package> | 🗑 un clic |
| Tomar una captura de pantalla | adb exec-out screencap -p > shot.png | 📷 guardada y copiada |
| Activar TalkBack | adb shell settings put secure enabled_accessibility_services … | un clic |
| Abrir un enlace profundo | adb shell am start -a android.intent.action.VIEW -d "myapp://…" | pegar y abrir |
Inspector de diseño
Congela la pantalla y mídela como en Figma. Funciona con Jetpack Compose y Vistas clásicas.
- Pasa el cursor sobre cualquier elemento para ver su tamaño en dp. Haz clic en uno, pasa el cursor sobre otro y ve la distancia entre ellos (espacios entre hermanos, rellenos dentro de un padre).
- Cuadrícula de 8 dp, selector de color (hex, ⇧⌘C para copiar) y un tamaño de texto estimado en sp.
- Superposición de diseño: suelta una exportación PNG de Figma en la ventana, elige 1× / 2× / 3× o Ajustar ancho, establece la opacidad o usa la combinación Diferencia, y muévela con las teclas de flecha. Compara diseño y compilación píxel a píxel.
Auditoría de accesibilidad
Presiona ⇧⌘A en el Inspector de diseño. Cada parada del lector de pantalla recibe un número en orden aproximado de TalkBack, con lo que TalkBack anuncia y una lista de problemas: botones sin etiqueta, imágenes sin descripción de contenido y objetivos táctiles más pequeños que 48 × 48 dp.
Inspector de datos
Explora las SharedPreferences (clave, tipo, valor) y las bases de datos SQLite (tablas, primeras 500 filas)
de cualquier aplicación depurable, con búsqueda. Usa adb shell run-as, el mismo acceso que usa Android Studio, por lo que
las compilaciones de lanzamiento permanecen cerradas. Es de solo lectura: nada cambia en el dispositivo.
Agentes de IA (MCP)
Oh My Android incluye un servidor MCP, para que tu agente de codificación con IA pueda ver y controlar el emulador: captura de pantalla, leer el árbol de UI en dp, tocar y escribir, cambiar a modo oscuro o RTL, leer logcat y la base de datos de la aplicación. El agente puede crear una pantalla, ejecutarla, ver el resultado y corregirlo por sí mismo.
Los botones usan la ruta de Homebrew /opt/homebrew/bin/ohmyandroid-mcp. Con la instalación del zip, usa la configuración de la barra de menú a continuación.
Configuración en un paso: icono de la barra de menú → Agentes de IA → Configurar…, elige tu agente, haz clic en Copiar (o Agregar a Cursor / Agregar a VS Code). O manualmente:
claude mcp add --scope user oh-my-android -- ohmyandroid-mcp # Claude Code
codex mcp add oh-my-android -- ohmyandroid-mcp # Codex CLI
{ "mcpServers": { "oh-my-android": { "command": "/Applications/Oh My Android.app/Contents/MacOS/ohmyandroid-mcp" } } }
El JSON funciona en Cursor, Claude Desktop, Windsurf, Gemini CLI y otros agentes (VS Code usa "servers").
Homebrew coloca ohmyandroid-mcp en tu PATH. Con la instalación del zip, usa la ruta completa anterior.
Otras formas de agregarlo:
- Complemento de Claude Code:
/plugin marketplace add ateymoori/oh-my-android, luego/plugin install oh-my-android@oh-my-android - Extensión de Claude Desktop: abre
oh-my-android-<version>.mcpbdesde la última versión - Registro MCP: listado como
io.github.ateymoori/oh-my-android
Tú mantienes el control: icono de la barra de menú → Agentes de IA → Desactivado, Solo lectura o Control total. El servidor lo comprueba en cada llamada, por lo que un cambio se aplica de inmediato. Las herramientas que pueden perder datos están marcadas como destructivas, para que tu agente te pregunte primero.
| Grupo | Herramientas |
|---|---|
| 👀 Ver | screenshot (escalado a 1 px = 1 dp) · get_ui (árbol de UI compacto con referencias) · accessibility_audit |
| 👆 Actuar | tap (por referencia, texto o x,y) · swipe · type_text · press_key |
| 📱 Dispositivo | list_devices · get_device_state · set_device_settings: modo oscuro, escala de fuente, tamaño de pantalla, configuración regional / RTL, orientación, TalkBack, animaciones, Wi‑Fi, modo avión, velocidad de red, GPS, batería |
| 📦 Aplicaciones | list_apps · open_app (paquete o enlace profundo, informa el tiempo de inicio en frío) · manage_app · install_apk · logcat |
| 🗄️ Datos | read_preferences · query_database (SQL de solo lectura en una copia) |
| 🧪 Emulador | emulator_action: huella dactilar, llamada entrante, SMS, guardar / cargar instantánea |
Indicaciones listas para usar: accessibility_review, ui_matrix (modo oscuro, fuentes grandes, RTL, pseudo-locales)
y debug_crash.
Prueba a preguntarle a tu agente:
- "Abre la aplicación, ve a Configuración y compruébala en modo oscuro, escala de fuente 2 y árabe. Arregla lo que se rompa."
- "La aplicación falla cuando toco Guardar. Reprodúcelo, lee el fallo y arréglalo."
- "Audita la pantalla de inicio de sesión para TalkBack y corrige los problemas en el código."
Diseñado para modelos: cada posición está en dp, como tu código de diseño. La salida es texto compacto: un árbol de UI
es aproximadamente 10× más pequeño que el XML de uiautomator sin procesar, y las 18 definiciones de herramientas ocupan unos 3k tokens.
El servidor admite MCP 2026-07-28 y las versiones anteriores (2024-11-05 a 2025-11-25) a través de stdio,
no tiene dependencias y no necesita red.
Privacidad y seguridad
- 🔒 Sin analíticas, sin telemetría, sin cuenta. La única solicitud de red propia es la comprobación de actualizaciones: una vez al día lee un pequeño feed de los lanzamientos de GitHub de este repositorio. No envía nada sobre ti ni sobre tus dispositivos. Desactívalo en Ajustes → Actualizaciones.
- Las actualizaciones (Sparkle) se instalan solo cuando tú eliges, y solo si están firmadas con la clave EdDSA de este proyecto y el mismo Developer ID.
- Solo se comunica con el
adbde tu propio Android SDK. El texto que escribes se cita para shell antes de llegar al dispositivo. - Las copias de la base de datos del Inspector de Datos se eliminan al recargar y al salir de la aplicación.
- El servidor MCP se ejecuta solo cuando tu agente de IA lo inicia, y solo con el acceso que tú permites. Lo que lee (pantalla, interfaz, registros, datos de aplicaciones) va a tu agente, y de ahí al proveedor de modelos del agente.
- Firmado con un Developer ID, runtime reforzado, notarizado por Apple.
¿Encontraste una vulnerabilidad? Consulta SECURITY.md.
Solución de problemas
- adb no encontrado: elige tu SDK en Ajustes → Android SDK, o establece
ANDROID_HOME. - El agente dice que no hay dispositivo: inicia un emulador o conecta un teléfono, luego pide al agente que ejecute
list_devices. - El agente no puede iniciar
ohmyandroid-mcp(instalación zip): solo Homebrew lo coloca en tuPATH. Usa la ruta completa/Applications/Oh My Android.app/Contents/MacOS/ohmyandroid-mcp. - Homebrew dice que el tap no es de confianza: Homebrew 6 y versiones posteriores te piden que confíes en taps de terceros. El
brew install --cask ateymoori/tap/oh-my-androidcompleto confía solo en esta cask. Para nombres cortos, ejecutabrew trust --cask ateymoori/tap/oh-my-androidprimero. - El agente obtiene "Acceso desactivado": icono de la barra de menú → Agentes de IA → Solo lectura o Control total.
Preguntas frecuentes
¿Oh My Android es gratuito?
Sí. Es gratuito y de código abierto bajo la licencia MIT.
¿Reemplaza al Emulador de Android o a Android Studio?
No. Es un complemento. Controla el emulador de Google y tus teléfonos a través del Android SDK que ya tienes. No incluye ningún emulador ni SDK.
¿Funciona con un teléfono Android real?
Sí, por USB o Wi‑Fi adb. Solo los bloques exclusivos del emulador (GPS, batería, llamadas, SMS, instantáneas,
velocidad de red, grabación de pantalla) necesitan un emulador.
¿Funciona con Jetpack Compose?
Sí. El Inspector de diseño y la auditoría de accesibilidad leen el árbol de semántica de Compose a través de
uiautomator, igual que para las Vistas.
¿Qué agentes de IA funcionan con él?
Cualquier agente que admita MCP sobre stdio: Claude Code, Claude Desktop, Codex CLI, Cursor, VS Code (GitHub Copilot), Windsurf, Gemini CLI, JetBrains AI, Zed y más. La aplicación no tiene que estar abierta; el agente inicia el servidor cuando lo necesita.
¿Cómo activo el modo oscuro en el Emulador de Android?
Haz clic en el icono 🌙 del panel. La forma con adb es adb shell cmd uimode night yes (y no para desactivarlo).
¿Cómo pruebo diseños RTL en el Emulador de Android?
Elige "العربية (RTL)" u otro idioma RTL desde el menú 🌐, o un pseudo-locale (ar-XB, en-XA) para
encontrar cadenas codificadas y errores de espejado. La forma con adb es adb shell cmd locale set-device-locale ar-EG.
¿Cómo simulo una red lenta en el Emulador de Android?
Elige un perfil (LTE, HSDPA, 3G, EDGE, GPRS, GSM) desde el menú de red. El panel establece tanto la velocidad como la
latencia, igual que adb emu network speed edge y adb emu network delay edge.
¿Hay un servidor MCP de Android para Claude Code, Codex o Cursor?
Sí. ohmyandroid-mcp viene incluido dentro de la aplicación. Tu agente puede tomar capturas de pantalla en dp, leer el árbol de interfaz, tocar,
escribir, cambiar el modo oscuro, el tamaño de fuente o RTL, y leer logcat. Consulta Agentes de IA (MCP).
¿Hay un paquete npx o uvx?
No. El servidor es un único binario nativo sin runtime; Homebrew coloca ohmyandroid-mcp en tu PATH.
¿Windows o Linux?
Ahora no. Es una aplicación nativa de macOS construida con SwiftUI.
¿Por qué no está en la Mac App Store?
Las aplicaciones de la Mac App Store deben ejecutarse en el App Sandbox, y una aplicación en sandbox no puede iniciar adb.
Homebrew y los lanzamientos de GitHub están firmados y notarizados por Apple en su lugar.
¿Por qué macOS 26 o posterior?
El panel usa Liquid Glass y otras APIs que son nuevas en macOS 26 Tahoe.
Compilar desde el código fuente
brew install xcodegen
git clone https://github.com/ateymoori/oh-my-android.git && cd oh-my-android
xcodegen generate
open OhMyAndroid.xcodeproj
Necesita Xcode 26. Las compilaciones locales están firmadas ad-hoc, por lo que no necesitas una cuenta de desarrollador de Apple.
Arquitectura
Sources/
App/ entry point, AppDelegate (host actions), Settings, assets
Core/ no UI, no feature knowledge
Shell/ ShellRunning: non-blocking Process runner with a watchdog timeout
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
Las dependencias apuntan en una dirección: UI → State → Features → Core. Las funciones se comunican con el dispositivo a través del
protocolo ADBClient y con el Mac a través de HostActions (selector de archivos, portapapeles, Finder), por lo que cada una
es un pequeño tipo de valor. Modo de lenguaje Swift 6, concurrencia estricta, cero advertencias.
| Protocolo | Control | Ejemplo |
|---|---|---|
ToggleFeature | icono de encendido/apagado | Modo oscuro, TalkBack, Wi‑Fi |
BatchReadable (complemento) | lectura de estado en un único viaje de ida y vuelta de adb shell compartido | cada función de settings / getprop |
StepperFeature | popover con − / + | Tamaño de fuente, Tamaño de pantalla |
ChoiceFeature | menú | Idioma, Velocidad de red, Batería |
ActionFeature | un toque | Captura de pantalla, Rotar, Forzar detención |
TextActionFeature | popover con un campo de texto | Enlace profundo, Escribir texto, SMS |
Energía: nada sondea. Los cambios del dispositivo provienen del flujo track-devices de adb. Los valores de las funciones se
leen en una única llamada por lotes de adb shell cuando seleccionas un dispositivo, después de una acción y cuando el puntero
vuelve al panel. El acoplamiento usa un temporizador de 1 Hz solo mientras un emulador se ejecuta y el panel está visible.
Los iconos de la aplicación y de la barra de menú se dibujan en código: Scripts/make-icon.swift.
Hoja de ruta
- Modo comparación: dos dispositivos lado a lado, entrada reflejada, diferencia de píxeles
- La pantalla del emulador integrada en la ventana del panel
- Soporte de DataStore (
.preferences_pb) en el Inspector de Datos - MCP: iniciar y detener emuladores, grabar la pantalla
¿Tienes una idea? Abre una solicitud de función. Añadir una función es una pequeña estructura Swift: consulta CONTRIBUTING.md.
⭐ Si Oh My Android te ahorra tiempo, por favor dale una estrella a este repositorio.
Las estrellas ayudan a otros desarrolladores de Android a encontrarlo y muestran que vale la pena construir nuevas funciones.
Para recibir una notificación de cada nueva versión, haz clic en Watch → Custom → Releases.
Licencia
Android es una marca comercial de Google LLC. Oh My Android no está afiliado ni respaldado por Google. El robot de Android se reproduce o modifica a partir de un trabajo creado y compartido por Google y se usa según los términos descritos en la Licencia de Atribución Creative Commons 3.0.
Hecho en Suecia por 🇸🇪 Royan AB
Sitio web de Oh My Android · royan.se

