把 Android 手机接入 AI:AutoJs7 让自动化从“写脚本”走向“会观察、能执行”
让 AI 帮忙操作手机,听起来只要说一句“打开应用,找到按钮并点击”就够了。但真正动手时,问题会接踵而来:它怎么知道手机当前在哪个页面?按钮是可读取的控件,还是画在游戏画布上的图像?点击后页面有没有变化?任务失败时,应该重试、换一种识别方式,还是先停下来?
这正是 AutoJs7 想解决的衔接问题。它是基于 AutoJs6 的 Android JavaScript 自动化分支,保留原有脚本引擎和手机端自动化能力,并在应用中加入 MCP 服务。支持 MCP 的客户端可以把手机作为一组工具来使用:先读取状态,再选择合适的操作,最后检查结果。它不是另一门脚本语言,也不是替你在云端运行手机的服务。
从“让 AI 猜屏幕”到“给 AI 可核验的工具”
传统脚本适合步骤稳定、规则明确的任务:开发者写好选择器、点击位置与等待逻辑,手机照着执行。AI 客户端更擅长理解目标和处理分支,但它不能只凭一句自然语言就可靠地看见 Android 屏幕。AutoJs7 提供的 MCP 工具,正好连接这两种能力。
当前项目文档列出 45 个已注册工具,覆盖界面控件树、点击与手势、截图、OCR、找图找色、脚本管理、设备信息、通知、文件和进阶命令等方向。例如,dump_ui_tree可以读取当前界面结构,ui_find和ui_action用于定位及操作控件;遇到控件树无法覆盖的画布、视频层或游戏画面,再考虑screenshot、ocr_recognize、find_image。工具的准确参数与可用性,始终应以客户端连接后取得的tools/list为准。
关键不在于“一口气调用很多工具”,而在于选对工具并核验结果。能读控件,就优先读控件;需要识别图像时,再用截图或 OCR;操作后重新观察页面,而不是把“调用成功”误当成“任务成功”。这种工作流可以降低盲点,也让失败原因更容易追踪。
一个示例:让客户端协助完成重复的页面操作
假设你想让 AI 客户端在某个应用里找到一个明确的入口,进入页面后读取状态,并在得到你授权的前提下执行下一步。这是示例流程,不是本文声称已经完成的真机演示。
客户端首先调用get_device_info或dump_ui_tree,确认手机在线、无障碍服务可用,并查看当前前台页面。接着用ui_find查找目标文字或控件标识;如果找到,才通过ui_action点击。点击之后不能立即宣告完成,而应等待界面稳定,再读取一次控件树,检查标题、提示文字或目标状态是否符合预期。
如果这是一个几乎不提供可访问控件的游戏界面,流程就会改变:先截图、限定识别区域,使用 OCR、找图或找色辅助判断,再执行手势,并再次截图核验。不同游戏的界面、分辨率与动画可能使识别失效,因此这些能力是可组合的工具,不是“所有游戏一键通关”的保证。
对于已经有 AutoJs 脚本的开发者,也不必把复杂逻辑全部改写成一连串远程点击。客户端可以使用脚本相关工具列出、运行或停止脚本,让成熟的脚本负责稳定步骤,让 AI 负责选择时机、提供参数和检查结果。文件、通知与设备工具则能补足任务上下文,例如读取日志定位失败原因。涉及写文件、安装应用、Shell 或 Shizuku 时,应先确认用户意图与影响范围。
几分钟了解接入方式
- 到 AutoJs7 v6.7.1-mcp.2 发布页 下载适合设备架构的 APK,并核对发布页提供的校验信息。项目要求 Android 7.0 或更高版本。
- 安装后开启所需的无障碍服务。在应用的“设置 → 开发者选项”中启用 MCP,也可以通过悬浮菜单启停。
- 如果客户端与手机在同一台设备上,使用应用显示的本地地址。跨设备连接时,先在应用内开启局域网访问,再使用手机显示的
http://<设备 IP>:7788/mcp。默认情况下,服务只监听127.0.0.1,不会自动开放到局域网。 - 在客户端选择Streamable HTTP,填写应用显示的
/mcp地址,并配置Authorization: Bearer <访问令牌>。令牌只从自己手机的应用中取得,不要把真实值贴进文章、公开仓库或聊天记录。
不同客户端的设置界面和配置文件格式并不相同。若需要更详细的握手、会话和工具选择说明,可以参考独立的 AutoJs7 MCP Skill;它是接入指南,不是 APK,也不会替你自动建立连接。
有时通知写着“已连接客户端:0”,但你已经打开了服务地址。这不一定是故障:这里统计的是完成初始化且仍有效的 MCP 会话,并非浏览器标签或 TCP 连接数。只打开 URL、做一次未完成初始化的探测,仍可能显示 0。排查时应先检查地址、网络、令牌和客户端是否完成 MCP 初始化,而不是只盯着通知数字。
稳定性与安全:能做到什么,也要知道边界在哪
项目的v6.7.1-mcp.1发布说明记录了一些针对服务稳定性的改进:MCP 连接处理有并发和请求头限制,停止服务时会关闭活动连接;Shell 命令超时后尝试终止相关进程,Shizuku 调用未结束时会拒绝重叠调用。这些改进有助于控制资源占用,但不意味着任何第三方命令或设备操作都能被无条件回收。具体行为以 该版本发布说明 和实际测试为准。
更重要的是访问边界。持有 MCP 令牌的客户端可以调用服务暴露的工具,其中包括运行脚本、执行命令、写入文件和安装应用等高影响操作。工具标注的风险等级是给客户端和使用者看的提示,不是服务端逐项权限拦截。局域网端点使用 HTTP,没有传输加密;只应在可信网络中按需开启,绝不要直接把端口暴露到公网。怀疑令牌泄露时,应在应用内重置,并更新客户端配置。
安装时还有一个容易踩到的坑:Android 用包名和签名识别能否覆盖升级。若设备上是不同签名的调试包,正式 APK 会被拒绝覆盖;先备份脚本和配置,再按发布说明处理旧包。不要在未备份前为了安装新包直接卸载。
最后说明版本状态:新发布的v6.7.1-mcp.2已把应用显示名称、图标数字和“关于”页署名更新为AutoJs7,但为兼容同签名覆盖升级,Android 包名仍是org.autojs.autojs6,APK 文件名也继续以autojs6开头。这是同一应用的更新,不是一个可与旧包并存的新包。
从项目出发,构建自己的手机自动化工作流
AutoJs7 最有价值的地方,不是承诺 AI 能“自动搞定一切”,而是把 Android 上已有的自动化能力整理成可调用、可观察、可核验的接口。对于熟悉 AutoJs 的开发者,它提供了把现有脚本接入 AI 客户端的新入口;对于刚接触手机自动化的人,它也提供了一条从读取界面、执行小步骤开始,逐渐建立可靠流程的路径。
想上手可以先读 项目 README 与源码,从 Release 下载已发布版本,再按需参考 MCP 配套 Skill。项目基于 AutoJs6 上游 开发;感谢原作者 Stardust、SuperMonster003 及其他贡献者打下的基础。