Skip to content

Repository files navigation

OpenDroidWindow

OpenDroidWindow 是一个 macOS 菜单栏工具,用于发现已授权的 Android 设备,把应用启动到 scrcpy 虚拟显示窗口,并为 Mobile MCP 自动化提供可发现的 displayId 会话。

仓库还包含:

  • Windows 10/11 x64 WPF 客户端;
  • 对原生 HarmonyOS 设备的有限 HDC 管理;
  • 一个与 Android 虚拟显示主线分离的 iPhone WhatsApp 导出实验性 PoC。

Android 主线功能

  • USB ADB / Wi‑Fi 或 Tailscale ADB 设备发现;
  • 应用库、搜索、收藏、隐藏和第三方应用卸载;
  • 在独立 scrcpy 虚拟显示中启动应用,或镜像整个 Android 设备;
  • 触控板滚动速度、整机镜像键盘模式和 Touch ID 辅助输入;
  • 保存会话与虚拟显示 ID,供 MCP companion 查找。

OpenDroidWindow 使用 scrcpy 4.1+ 的虚拟显示能力,scrcpy 作为外部进程运行,不重新实现其视频、音频或控制协议。

平台边界

平台 当前能力
macOS 13+ Android ADB + scrcpy 完整主线;原生 HarmonyOS HDC 设备发现、应用枚举和启动
Windows 10 22H2 / 11 x64 Android 设备发现、应用启动、虚拟显示、整机镜像、Wi‑Fi/Tailscale ADB、托盘和会话
原生 HarmonyOS 通过 HDC 枚举和启动 Bundle;不支持 scrcpy 投屏、Android 虚拟显示或 displayId
iOS 不接入 Android 设备管理和 displayId;仅提供独立的 WhatsApp 导出 PoC

快速开始

macOS:Android

要求 macOS 13+、推荐 Android 12+、已开启 USB 调试并授权电脑,以及 Android Platform Tools。首次构建还需要 Xcode Command Line Tools。

brew install android-platform-tools git cmake meson ninja pkg-config autoconf automake libtool
adb devices
swift build
./scripts/build-app.sh
open dist/OpenDroidWindow.app

应用优先使用系统 scrcpy 和 App Bundle 中的 adb;可用 ADB_PATHSCRCPY_PATH 指定自定义工具。只调试 Swift 可执行文件时可运行 swift run

连接设备后,在菜单栏设备菜单中选择应用即可启动;选择“镜像整个设备”可操作锁屏和系统界面。

macOS:原生 HarmonyOS

安装 DevEco Studio 或包含 HDC 的 HarmonyOS SDK,并确认:

hdc list targets
HDC_PATH=/path/to/hdc swift run

HDC 设备支持发现、读取设备信息、枚举 Bundle 和通过 Ability Assistant 启动应用;不支持 scrcpy 镜像、Android 虚拟显示、传统 adb tcpip 5555 或 Mobile MCP displayId。详见 docs/hdc.md

Windows

安装 MSI 后,在手机开启 USB 调试并授权电脑,打开 OpenDroidWindow,点击“刷新”,选择应用并点击“打开”。完整的安装包构建、工具版本、Wi‑Fi/Tailscale ADB、会话目录和签名说明见 docs/windows.md

常用操作

Wi‑Fi / Tailscale ADB

首次切换需要 USB 数据线。应用会优先尝试手机的 Tailscale IPv4(100.64.0.0/10),否则使用普通局域网地址,并通过 TCP 5555 连接。Mac、手机和 Tailnet ACL/防火墙必须允许该端口。成功的 endpoint 会保存并在后续刷新时自动重连。

Touch ID 辅助解锁(macOS)

可录入手机当前已有的数字 PIN,之后用 Mac Touch ID 读取并通过 Android 物理键盘注入。它不会创建或修改手机 PIN,也不会绕过 Android 安全锁屏;PIN 不写入剪贴板、偏好设置、会话文件、命令行参数或日志。

Touch ID PIN 需要 macOS Data Protection Keychain,因此发布包必须带有效的 Apple 签名和 com.apple.application-identifier entitlement。swift run 或 ad-hoc 包仍可用于 ADB/镜像,但不能启用 Touch ID PIN 存储:

CODESIGN_IDENTITY="身份名称" CODESIGN_APP=required ./scripts/build-app.sh

触控板滚动与键盘

macOS 提供柔和(0.15×)、自然(0.30×,默认)和快速(0.55×)三档滚动。整机镜像默认使用 UHID 键盘模式,遇到兼容性问题时可切换到 SDK 兼容模式。外部 scrcpy 不支持 --scroll-scale 时,滚动优化会自动停用但窗口仍可使用。

Mobile MCP 会话

macOS 会话文件位于:

~/Library/Application Support/OpenDroidWindow/sessions.json

Windows 会话文件位于:

%LOCALAPPDATA%\OpenDroidWindow\sessions.json

本仓库记录并暴露虚拟显示 ID,但不包含 Mobile MCP Android 适配器本身。适配器仍需将 displayId 传给截图、UI 树、点击和输入操作;当前设计与限制见 docs/mobile-mcp-display.md

iOS WhatsApp 导出(实验性 PoC)

iOS 没有 scrcpy 级可编程镜像或每应用虚拟显示,因此 iOS 不属于 OpenDroidWindow 的 Android 设备管理主线。需要从真实 iPhone 归档 WhatsApp 时,仓库提供独立的 Mac MCP 服务和 iOS Share Extension:

该 PoC 只走 WhatsApp 官方“导出聊天”流程,不读取数据库、不绕过锁屏,也不承诺无人值守生产运行。免费 Apple ID 仅适合验证,正式部署需要稳定的签名方案;导出文件只接收并保存到指定 Mac。

其他文档

安全边界

OpenDroidWindow 只操作用户已授权的设备,通过官方调试协议和正常应用 UI 执行操作,不读取应用私有数据库。自动化前请确认设备、应用和操作目标均已获得用户授权。HDC、Android ADB 和 iOS PoC 的协议与能力彼此隔离,iOS 导出不会获得 Android displayId 能力。

English summary

OpenDroidWindow is a macOS menu-bar launcher and Windows 10/11 x64 client for Android apps running in scrcpy virtual displays. It supports ADB, Wi‑Fi/Tailscale ADB, full-device mirroring, session displayId records, and limited native HarmonyOS management through HDC. iOS is separate: this repository includes an experimental WhatsApp export PoC using official chat export, Appium/XCUITest, and a paired Mac receiver; it is not an iOS virtual-display implementation.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages