GitHub · 项目涌现

呵

jev-chat/jev-chat-jarvis

二〇二六年九月二十三日·★ 4,996·⑂ 981·Kotlin·MIT ·最新发布 v1.4 · 2026-09-23 · GitHub 原仓库

装在手机上的对话副驾:在微信 / QQ / X / 飞书里读懂对方、给出候选回复、一键填入输入框,发不发由你。非侵入,只读屏幕,不 hook 不改包。

Jev 聊天助手

装在手机上的「对话副驾」:你在任何聊天 App 里聊天,它在旁边读懂对方、告诉你该怎么回,一键填进输入框,发不发由你。

Stars Forks Version Android License

官网 · 下载 APK · 历史版本 · 更新日志 · macOS 版 · Windows 版

❤️赞助商

想出现在这里?

截图

为什么用它

平台支持

平台 状态 采集方式 备注
微信 Android ⏸ 已停止支持 — 微信 8.0.52+ 对普通无障碍服务隐藏了消息文字,且近期对部分账号/设备的聊天界面开启防截屏(FLAG_SECURE),两条读取路径都不通,没有干净的读取方式;1.4 起不再读取微信
QQ Android ✅ 全链路 无障碍读节点 9.3.50 实测(群聊);1v1 按同结构推断
X / Twitter 私信 ✅ 全链路 解析 Compose 节点的 content-desc 12.25 实测,中文界面;英文界面未验
飞书 / Lark ✅ OCR 兜底(真机验证) 无障碍读气泡矩形 + ML Kit 离线 OCR 识别正文 正文自绘不在无障碍树里,1.3 起对每个气泡矩形做 OCR;我/对方按已读状态判
任意其它 App ✅ 手动 悬浮窗菜单「截屏识别一次」整屏 OCR 不自动、不分我/对方(全部当作对方所说并在面板标注)
桌面端 / 网页 ⏳ 规划 截图 + OCR / 视觉 同一内核,换采集方式

本项目只读你自己设备上、你自己有权查看的聊天,不针对任何单一平台。

快速开始

1. 装包。 仓库里有签好名的 release 包:apk/jev-assistant-v1.4-release.apk(Android 11+)。各版本安装包也在 Releases。

adb install -r apk/jev-assistant-v1.4-release.apk

2. 填密钥。 打开 App → 设置 →「接口」分三张卡:判断接口 / 回复接口 / 视觉接口。最简单只填「判断接口」一栏的 OpenRouter API Key,其余两栏留空会自动继承这把密钥就能用。想换回复模型(默认 deepseek/deepseek-chat-v3.1,国内 Gemini / OpenAI 会被区域限制)就在「回复接口」选预设(OpenRouter / DeepSeek 官方 / 通义兼容)或自填地址,每张卡都有独立的一键连通测试。

3. 开权限。 按主页向导开三项:

装过 debug 包的要先卸载再装 release(签名不同),卸载会清掉密钥和设置。小米 / HyperOS 重装后悬浮窗权限会被重置,装完按向导再开一次。

功能

判断与候选回复

知识库与联系人

在设置 → 分析 →「知识库与联系人」。

接口与模型

采集与 OCR

常见问题

不会。程序只把选中的回复填进输入框,发送键永远由你自己点。转账、红包、收款一律不碰。

不需要 root,也不用装任何模块。它不修改聊天软件的安装包、不注入进程、不调用对方 App 的接口或账号体系,只读系统无障碍服务暴露出来的界面内容,和读屏软件的工作方式一样。

聊天内容只在你触发分析的那一刻,发给你自己在设置里配置的模型接口。项目没有任何自建服务器,不收集、不落盘、不进日志。历史记录默认关闭,开启后也只存在手机的 App 私有目录里。

多半是国产 ROM 把后台进程冻结了。先确认无障碍、悬浮窗、自启动、省电无限制四项都开着,小米 / HyperOS 尤其要开后两项。重装后悬浮窗权限会被重置,按主页向导再开一次。在聊天界面里随便点一下通常能自愈。

飞书的消息正文是自绘控件,无障碍树里没有文字,1.3 起改为对每个气泡矩形做离线 OCR。没有专门适配的 App,可以在悬浮窗菜单里点「截屏识别一次」,整屏 OCR 后同样能分析,只是不区分我方和对方。

软件本身免费开源。模型调用走你自己的 API Key,按用量在对应服务商那边结算,项目不经手任何费用。

把系统设置里的无障碍开关关掉再打开一次。1.3 起新增了截屏能力,服务需要重新绑定才会生效。

它怎么工作

QQ / X / 飞书 ──(无障碍读节点)──▶ 采集最近消息
                                  │
              ┌───────────────────┴───────────────────┐
              ▼                                        ▼
   Jev 判断(一次 7 道题)                    生成模型起草 3 条候选
   意图 / 危险 / 需求 / 动作 / 该不该回          │
              └───────────────────┬───────────────────┘
                                  ▼
                        Jev 给 3 条候选排序
                                  ▼
                半透明悬浮窗展示 → 复制 / 填入(不发送)
  1. 在 capture/ChatAppAdapter.kt 实现 ChatAppAdapter:pkg 是包名,extract(root, res) 从无障碍树取出标题和消息列表(Msg(side, text),side 为 me / other),不在聊天窗时返回 null。
  2. 在 capture/ChatCaptureService.kt 的 adapters 加一行。
  3. 判断、候选、悬浮窗、填入都不用动。

先用 adb shell uiautomator dump 看目标 App 暴露了什么,已有四个适配器覆盖了四种情况:

App 树的情况 适配器怎么做
QQ 节点开放,有 id 正文 id/mjn、标题 id/371,按气泡贴哪侧头像判谁说的
微信 已隐藏消息文字,部分设备还开启了防截屏 已停用:1.4 起不再接入采集分发,适配器代码保留在仓库中,以便日后微信策略变化时恢复
X Compose,无 id,text 为空 解析 content-desc 发件人:正文。时间。Read,发件人是「你」即我方
飞书 正文自绘,树里没有文字 树上拿 bubble_content_container 矩形与已读状态,OCR 每个矩形的正文

适配器返回 null 表示不在聊天窗,返回空消息列表表示在聊天窗但树里没正文——只有后者会触发 OCR 兜底。

QQ、X 全程只有一个 Activity,判「是不是聊天窗」要看树里有没有该有的节点(如输入框),不能看 Activity 名。

JDK 17 + Android SDK(platform 35 / build-tools 35)。

./gradlew assembleDebug      # app/build/outputs/apk/debug/app-debug.apk
./gradlew assembleRelease    # 需要仓库外的签名 properties,路径由 JEV_KEYSTORE_PROPS 指定

已知限制

交流群 / 需求收集

如需联系,请公众号私信。 合作、赞助、反馈、进群失败、二维码过期,都走公众号私信,其它渠道不一定看得到。

想听真实需求:你在哪个聊天 App 上最想要这个副驾?希望它判断什么、怎么提示、什么绝对不能碰?扫码进群直接说。1 至 7 群已满,不要再扫;8、9 群任选一个,请勿重复加入。

姊妹项目

同在 jev-chat 组织下:

隐私政策见 PRIVACY.md(说明读取了什么、发给谁、存在哪里、怎么删除)。

版权与许可

Copyright © 2026 Finderchangchang 与 jev-chat 贡献者。代码以 MIT 协议开源,另见 NOTICE。

免责声明:本项目只处理你自己设备上、你自己有权查看的聊天。请遵守微信、QQ、X、飞书等各软件的许可协议与当地法律法规,作者不对使用后果负责。

☕ 请我喝杯咖啡

如果你觉得我写的这玩意儿对你有点帮助,欢迎请我喝杯咖啡。咖啡因一到位,脑子就开始冒泡,源源不断地驱动我往前跑;哪天我更新得特别勤,说明这杯续上了 😄

译自 GitHub · 项目涌现 · 录于 二〇二六年九月二十三日