TWO MODES
两种用法,随时切换
两种模式共用同一套界面,在手机端的「设置 → 运行模式」里切换。Android 原生应用已经开放下载;不想装东西的话,下面这些能力网页版现在就能用。
远端模式(默认)
手机是遥控器,推理与动手都在电脑上。手机只负责显示和确认,因此对手机性能没有要求,也不会因为手机锁屏或切到后台而中断任务。
这条路径上的 EVA 拥有电脑上的全部能力:读写文件、执行命令、查看系统状态、截图、控制应用、访问网络。每一次动手之前,仍会先在手机上弹出确认卡片,并把将要执行的原始命令展示出来。
会话与桌面端共用,手机上能接着桌面端开过的对话继续。
手机独立模式
不连电脑。手机直接调用你自己填写的模型接口(任何兼容 OpenAI 的接口),并使用手机自带的能力工作:通知、剪贴板、系统分享、定位、震动、语音朗读、文件读写、长期记忆。
这些能力由手机系统与浏览器提供,不需要下载任何模型,因此既不占用存储也不消耗额外算力。这是「阉割算力」的具体做法:把需要重型本地模型的部分留在电脑上,手机侧只保留轻量、原生、即开即用的能力。
语音输入与朗读同样使用手机系统自带的听写与语音合成。
对话会留在手机上,关掉应用再打开能接着聊,不用每次从头交代背景。
手机独立模式 + Shizuku
装上 Android 原生应用并在里面接入 Shizuku(免费开源,不需要 root、不需要解锁),EVA 就能借到系统身份,做出网页版做不到的事:查系统状态、启停应用、改系统设置、读写文件、执行系统命令。
Shizuku 不常驻 —— 每次手机开机后要重新启动一次它,这是 Android 的限制。EVA 里的「手机体检」会直接告诉你是哪一环断了,并给出一键修复。
SEE THE SCREEN
先看懂屏幕,再动手
让 AI 操作手机,难点从来不是「点一下」,而是知道该点哪儿。EVA 的做法是读界面结构,而不是盯着截图猜坐标。
读界面结构,不比像素
EVA 先读取当前的界面结构(无障碍树)—— 屏幕上有什么按钮、输入框、文字,各自在哪儿,返回一份带编号的清单。然后按编号点,不自己算坐标:元素会随滚动和分辨率移动,编号不会。
同一次「看屏幕」,界面结构通常只有几十 KB,而截图接近 700 KB,而且结构是确定性的,不会把按钮看错。
结构读不到时才退回截图:视频通话、游戏、canvas 自绘界面这三类不向无障碍层暴露任何内容,读出来必然是空的。两条路互补,不是替代。
动手前先做体检
任何工具报错、或者准备开始操作手机之前,EVA 会先跑一次手机体检:Shizuku 在不在跑、有没有授权、界面结构能不能读、通知权限给没给、存储还剩多少。
每条问题都带一个可以直接执行的修复动作 —— 启动 Shizuku、重新申请授权、跳到通知设置页,而不是丢一句「操作失败」让用户自己猜。
日志与边界
借到的是 shell 身份(uid 2000),不是 root。所以能做到系统级操作,但读不到其它应用的私有数据(/data/user/0/<包名>),也绕不过系统本身的安全模型。这是设计边界,不是缺陷。
ANDROID APP
Android 原生应用
网页版够用,但它有一道绕不过去的墙:明文 http 不是浏览器的「安全上下文」,通知、剪贴板、定位这些接口会被直接收走。原生应用没有这道墙,而且能真正做到网页版做不到的事。
它比网页版多什么
原生应用通过 Shizuku 借用 ADB shell 身份(uid 2000)—— 不需要 root、不需要解锁、不需要刷机。有了这层身份,EVA 才能执行系统命令、装卸应用、改系统设置、截屏、模拟点击与滑动、读写文件。
没有它,「手机独立模式」几乎没有意义:只能弹弹通知、读写剪贴板 —— 那些事情用系统自带的功能就够了。
通知、系统分享、剪贴板、定位、语音输入在原生应用里全部走系统实现,不再受「安全上下文」限制;语音输入直接用手机自带听写,不需要下载任何模型。
现在可以下载了。约 1 MB,不含任何第三方框架,装上就能用。第一次打开会带你认一遍界面。
三步接入系统能力:① 装上 EVA 并打开;② 还没装 Shizuku 的话先装一个(免费开源,不需要 root);③ 打开 Shizuku 照它首页的指引启动服务,回到 EVA 点「申请授权」。
内测版,遇到问题把「设置 → 运行状态」里的信息截图发我。
现在就能用的是网页版:手机浏览器打开电脑地址、输一次配对码即可,不需要安装任何东西。
边界(说清楚,免得期待错位)
拿到的是 ADB shell 身份,不是 root。它能装应用、改设置、截屏、模拟操作,但读不到其它应用的私有数据(/data/user/0/<包名>)—— 那是 Android 沙箱本身,Shizuku 也不绕过。
每一次改动手机的动作默认都会先弹确认,并把将要执行的原始命令展示出来。不想被逐条询问,可以在设置里打开「手机操作免确认」。
Shizuku 要自己启动
Shizuku 服务每次手机开机后都要重新启动一次,它自己不会常驻 —— 这是 Android 的限制,不是 EVA 的。Android 11 及以上可以用系统设置里的「无线调试」在手机上直接启动,不需要电脑。
另外:卸载再装应用会换掉应用 UID,Shizuku 的授权会随之失效,重新点一次「接入 Shizuku」即可;用覆盖安装(pm install -r)则不受影响。
SETUP
三步连上
首次连接需要三步;此后手机每次打开即可直接进入,无需重复配对。
一 · 在电脑上打开「允许手机连接」
在电脑端打开设置 → 手机连接,打开「允许手机连接」。这一步是在授权内核监听局域网地址。
该开关默认关闭。关闭状态下内核只监听本机,局域网里的任何设备都够不到它,这是最安全的状态,也是我们选择的默认值。
二 · 点「重启内核」
监听地址在启动时就已确定,改变它必须重启内核。点击设置里的「重启内核」,约三秒后自动恢复,界面上的状态会从「待重启」变为「正在监听」。
此时设置页会显示两样东西:手机该打开的局域网地址,以及当前的六位配对码。
三 · 在手机上打开地址并配对
让手机连上与电脑相同的 Wi-Fi,用浏览器打开设置页上显示的那个地址(形如 http://192.168.1.5:8787/m/)。
手机会先看到配对页。把电脑上显示的六位数字填进去,即可进入。在 iOS Safari 或 Android Chrome 中选择「添加到主屏幕」,可以获得接近原生应用的启动体验。
SECURITY
打开局域网之后的门禁
把内核暴露到局域网上是一个真实的攻击面 —— 同一个 Wi-Fi 下的任何设备都够得到这个端口。因此这一步不是简单地「换个监听地址」,而是同时加了一道完整的门。
- 默认关闭
- 内核默认只监听
127.0.0.1。在这个状态下,即使有人知道端口号,局域网里的设备也无法建立连接。开启需要用户在设置里明确同意。 - 回环豁免
- 来自本机(
127.0.0.1/::1)的请求免鉴权,桌面应用与本机脚本走这条路。其余来源一律要求令牌。 - 配对码
- 六位数字,五分钟有效,且用过一次即作废并立刻轮换,避免被旁路捡走。配对码只在本机界面显示,接口不会向局域网返回它。
- 令牌
- 配对成功后发放 32 字节随机令牌,只以 sha256 摘要落盘,磁盘上没有明文;文件权限
600。令牌不随会话结束失效,直到你主动断开。 - 防爆破
- 六位数字只有一百万种组合,不限速是可以硬试的。因此配对失败按来源地址计数,连续失败达到阈值后进入十分钟冷却,冷却期间正确的配对码也会被拒绝。
- 设备管理
- 设置页列出所有已配对的设备及其来源地址,可逐台「断开」,也可一键全部断开。断开后该设备上的令牌立即失效。
- 触发面收敛
- 手机端不提供直接输入命令的终端。手机上的「命令输出」是只读视图,用来查看电脑上正在执行什么。要执行什么,在对话里说,由审批闸门决定是否放行 —— 不额外开一条绕开闸门的执行通道。
CAPABILITIES
手机独立模式可调用的能力
这些能力由手机系统与浏览器直接提供,全部在本机完成,不经过第三方服务器,也不需要下载模型。
- 系统通知
- 在状态栏弹出通知,用于提醒与到点提示。
- 剪贴板
- 写入或读取剪贴板内容,方便在应用之间搬运文字。
- 系统分享
- 调起系统分享面板,把内容发往其它应用。
- 定位
- 在授权后读取当前位置的经纬度。
- 震动
- 用于提醒与操作确认。
- 语音朗读
- 调用系统语音合成朗读文本,不依赖任何本地语音模型。
- 文件读写
- 由你从手机中挑选文本文件读取,或将内容保存为文件。
- 设备信息与时区
- 型号、系统、屏幕、电量、网络状态、当前时间。
- 长期记忆
- 把值得记住的信息存在手机本机,之后的每次对话都会带上。
涉及隐私或会改动数据的操作(读取剪贴板、读取文件、调起分享、打开链接、获取定位)在执行前都会单独弹窗确认,且这些确认不能用手势划过 —— 必须明确选择允许或拒绝。
LIMITATION
一个绕不开的限制:明文 http
局域网地址是明文 http,在浏览器看来不属于「安全上下文」,于是一部分接口会被直接收走。
哪些会受影响
受影响的:语音输入、系统通知、系统分享、定位、剪贴板读取接口。浏览器会拒绝调用,界面不会假装可用 —— 手机端的「运行状态」页里逐条列出了本机各项能力的实际可用情况。
不受影响的:对话、流式输出、工具调用与审批、命令输出、震动、语音朗读、以及所有发生在电脑上的能力。也就是说,远端模式的完整功能不受此限制,因为活儿都在电脑上干。
如果需要全部能力
在 Android Chrome 中打开 chrome://flags/#unsafely-treat-insecure-origin-as-secure,把你手机版的地址(形如 http://192.168.1.5:8787)填进去,重启浏览器即可。
更彻底的做法是给这个地址配上 HTTPS。我们会根据反馈决定是否提供内置的自签证书方案。
INTERFACE
界面按手指设计
手机版不是把桌面版压窄,而是重新排的一套界面;两者共用同一组设计令牌,切换主题时外观保持一致。
- 单列布局
- 只有一条消息流与一个贴底的输入区,没有三栏、没有悬浮面板。滚动的只有消息区,整页不会跟着动。
- 底部抽屉
- 所有弹层都从底部升起(设置、状态、审批、工具明细),落在拇指够得着的位置,而不是屏幕中央。向下拖动即可关闭。
- 触控目标
- 所有可点区域不小于 44 像素。输入框字号不小于 16 像素,iOS 上不会因为聚焦而强制放大整个页面。
- 安全区适配
- 顶栏与输入区分别避开刘海与底部横条(
safe-area-inset);键盘弹出时输入区跟着上推,不会把内容遮住。 - 工具调用收纳
- 一轮里的多次工具调用收成一条摘要(「命令执行 · 3 成功」),点开才展开明细,点单个工具还能看完整输出并一键复制。
- 按需裁剪
- 桌面端的背景代码雨、情绪球实时重绘、开屏动画在手机上一律不加载 —— 这些只费电。手机取景是省电和流畅优先。
- 正文字号
- 设置里提供三档正文字号,只放大要读的内容,不缩放整个界面,避免把触控目标一起搞乱。
手机上打开地址,一直停在配对页,说连不上这台电脑。+
配对码填对了,还是说不对。+
手机上语音输入、系统分享、定位都用不了。+
换了 Wi-Fi 或者路由器重启之后就连不上了。+
EVA 说「读不到界面结构」,是不是坏了?+
Shizuku 每次开机都要重新弄一遍,很烦。+
怎么彻底断掉某台手机?+
手机上的对话记录存在哪?+
~/.eva/sessions/,与桌面端共用同一批会话,手机上能继续桌面端开过的对话。独立模式下不存在电脑上,而是留在手机本机:关掉应用再打开能接着聊。它是滚动保留的(最近几十条),要彻底清掉就在手机端点「新对话」。