语言: 简体中文 | English | 日本語 | 한국어
ScreenMemo 是一款在本地运行的智能截屏备忘与检索工具:自动记录你在 Android 设备上的屏幕画面,通过 OCR 与 AI 助手让信息可检索,帮助你在需要时迅速找回线索、还原上下文。
为什么现在就要开始?
- 不可逆的知识流失:当越来越多人开始用日常数据喂养个人 AI,每一天的未曾记录,都在让你未来的 AI 助手少了一分“懂你”的底气。
- 悄然拉开的时间复利:数据无法速成。今天就开始沉淀数字标本的人,在未来 AI 迎来质变时,将天然拥有一座别人难以追赶的专属记忆库。
- 打捞散落的数字自我:你最宝贵的上下文往往碎落在不同的 App 与设备里;如果没有 ScreenMemo 去妥善收留,它们终将随流逝的时间消散,再难被完整唤醒。
下面按功能主题展示组合截图,每张图都对应一组完整使用场景。
核心入口:记录、搜索和时间线
|
搜索与结果总结
|
时间线、日历与回放生成
|
AI 回顾、每日总结与请求日志
|
AI 记忆检索与图表整理
|
收藏、加载与备注
|
采集设置、压缩与存储分析
|
设置、权限与动态任务
|
MCP 服务、AI 提供商与语义模型
|
隐私模式与敏感内容控制
|
如果你只是想在手机上使用 ScreenMemo,推荐直接安装 GitHub Releases 中已经构建好的 APK
- 打开 GitHub Releases,进入最新版本。
- 在 Assets 中下载适合手机的
screen_memo-...-app-*-release.apk安装包。大多数近几年的 Android 手机优先选择arm64-v8a;
- Flutter SDK:
3.35.7(当前 CI 验证版本) - Dart SDK:
3.9.2(随 Flutter3.35.7提供;项目约束为>=3.8.1) - JDK:推荐
17(CI 使用17;Android 代码仍以 Java 11 字节码为目标) - Android SDK:发布工作流使用
Platform 36、Build-Tools 36.0.0、NDK 27.0.12077973 - APK 当前构建配置:
minSdk 24、targetSdk 36 - 主功能平台要求:自动截屏依赖 Android 11(API 30)及以上
- 截屏间隔:默认与最低值已调整为
1秒,截图采集与后处理在后台异步执行,不会阻塞下一次截屏触发 - IDE:Android Studio / VS Code + Flutter 插件
-
克隆项目
git clone <repository-url> cd screen_memo
-
安装依赖
flutter pub get
-
生成国际化代码
flutter gen-l10n
-
运行应用
flutter run
- 在 Android Studio 的 Device Manager 中创建 Android 11+ 模拟器
- 启动模拟器后执行:
flutter emulators flutter devices flutter run -d <device_id>
更多维护者开发说明见 docs/DEVELOPMENT.md。
# 代码检查
flutter analyze
# Flutter 测试
flutter test
# i18n 审计
dart run tool/i18n_audit.dart --check
# Debug APK
flutter build apk --debug
# Release APK(按 ABI 拆分)
flutter build apk --release --split-per-abi --tree-shake-icons --obfuscate --split-debug-info=build/symbolsAndroid 原生 JVM 单元测试:
Windows
cd android
.\gradlew.bat testmacOS / Linux
cd android
./gradlew testScreenMemo 支持双向 MCP:既可以在手机上手动开启只读的局域网 MCP 服务,也可以作为 MCP 客户端连接其他外部 MCP 服务,让应用内 AI 在聊天中调用这些外部工具。
局域网 MCP 服务让同一局域网内的 AI 客户端读取动态摘要、搜索结果、上下文片段和少量显式请求的证据图片。
- 在 Android App 的“设置 → MCP 服务”中手动开启局域网 MCP 服务。
- Endpoint 固定为
http://<手机局域网IP>:37621/mcp,请求必须带Authorization: Bearer <token>。 - 标准 MCP 客户端应通过
tools/list获取工具,并通过tools/call调用工具;为兼容部分客户端,也支持把已声明工具名直接作为 JSON-RPCmethod调用。 - 默认不会返回 OCR 原文或图片 base64。只有工具参数显式开启
include_ocr,或调用get_evidence_images时才会返回敏感内容,并带有数量/长度限制。 - 若端口
37621被占用,设置页会显示启动错误,不会自动切换随机端口。
- 在“设置 → MCP 服务 → External MCP servers”中可以用 JSON 添加或编辑、同步、启停和删除外部 MCP 服务。
- 添加/编辑时支持 Claude / RikkaHub 风格的
mcpServersJSON:{ "mcpServers": { "demo": { "type": "streamable_http", "url": "https://example.com/mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } } }- 外部 MCP 客户端支持
streamable_http与旧版 HTTP+SSE(sse)transport;不支持的 transport 会在保存或同步时明确报错,不会静默降级。 - 同步时会调用 MCP
initialize、notifications/initialized、tools/list,并缓存工具名、描述和输入 schema;再次同步会保留用户已有的工具启用状态。 - 外部工具暴露给 AI 时会自动命名为
mcp__<server>__<tool>__<hash>,避免多个 MCP 服务之间的同名工具冲突。 - 新同步的外部工具默认不启用;用户可在设置页打开工具,也可以在聊天中要求 AI 配置并同步 MCP。AI 发起的 MCP 配置、同步和已启用外部工具调用都会直接执行,并在当前这轮聊天里刷新可用工具。
- 外部 MCP 客户端支持
- 在“设置 → 显示与排序 → 主题颜色”里可以自定义当前默认配色。
- 面板右上角支持粘贴导入 JSON,也支持一键复制当前配色 JSON,方便分享和快速恢复。
- 请求头中的敏感值会在 UI、日志和聊天工具结果中脱敏;外部 MCP 工具输出仍应视为不可信数据。
ScreenMemo 支持 RikkaHub 风格的本地 Skill 扩展:用户可以安装包含 SKILL.md 的技能目录,让应用内 AI 在聊天中按需加载专门指令和附属文件。
- 在“设置 → Skills”中可以粘贴单个
SKILL.md创建技能。 - Skills 列表中可以启用/禁用单个技能。只有已启用的技能会暴露给 AI 聊天。
- 点进技能详情可以查看完整文件列表、复制文件内容、编辑
SKILL.md或附属文本文件、新增附属文件,并删除非SKILL.md文件。 - 聊天时 AI 会通过
use_skill工具加载技能:不传path时返回SKILL.md正文和可用文件列表;传入安全的相对路径时读取对应附属文件。读取路径始终限制在该技能目录内。 - Skill 内容来自本地用户安装的扩展,仍应视为外部指令来源;不要把令牌、密钥或隐私数据放进技能目录。
如果 ScreenMemo 帮你找回过重要线索,欢迎支持 ScreenMemo 赞赏作者
每月大概占用多少存储空间?
- 经验值示例:若压缩后约 50 KB / 张,且按每分钟 1 张截图,30 天约 43,200 张,约 2.1 GB / 月。
- 估算公式:月占用(GB)≈
(60 ÷ 截屏间隔秒) × 60 × 24 × 30 × 单张大小(KB) ÷ 1024 ÷ 1024 - 降占用建议:增大截屏间隔、启用目标大小压缩、打开过期清理、只对需要的应用开启采集
- 已有历史截图可在“设置 → 截屏设置 → 全局历史压缩”中按目标大小进行全局压缩,取消时会立即停止启动新的图片处理
- 回放视频保存到系统相册成功后,会自动删除应用内部的临时视频副本;已有历史回放副本可在“存储分析 → 回放视频”中清理
数据会上传到云端吗?
- 默认不会。截图、OCR、索引、统计和大多数配置都保存在本地
- 只有在你显式启用 AI 能力并配置提供商后,相关总结 / 对话请求才会发往你配置的模型服务
支持哪些 AI 提供商?
- 当前内置提供商类型包括
OpenAI、Azure OpenAI、Claude、Gemini和Custom
如何备份 / 迁移数据?
- 在“数据与备份”里可以导出 ZIP 备份;导出前会先扫描范围、生成 manifest,并展示分类进度
- 导入时支持“覆盖导入”和“合并导入”;合并模式会尽量去重并保留现有数据
- 合并导入只合并
output下的截图、索引和数据库数据;全量备份里的shared_prefs、app_flutter、no_backup等运行配置根目录会自动跳过 - 多个大备份建议使用桌面合并工具在电脑上处理,再回传到手机
- 如果导入后发现索引或 OCR 缺失,可在“导入诊断”中执行诊断与 OCR 修复
- 备份默认不包含 cache、code cache、临时缩略图和外部日志
对电量与性能的影响如何?
- 主要取决于截屏间隔、压缩策略、AI 重建频率和后台保活状态
- 建议启用目标大小压缩、过期清理,并按应用细分策略,避免对不重要应用持续采集
手机端处理多个大备份 ZIP 时速度有限,因此项目额外提供桌面合并入口 lib/main_desktop_merger.dart。
- 选择多个 ZIP 备份文件和输出目录
- 合并前执行结构预检,尽量提前发现坏包或不兼容数据
- 合并备份中的
output数据树:截图文件、分片数据库和主库元数据,并跳过重复内容 - 合并收藏、NSFW 标记和用户设置等元数据
- 实时显示处理进度、告警、影响应用和去重结果
- 处理完成后将合并结果重新打包成新的 ZIP
Windows
flutter build windows -t lib/main_desktop_merger.dart --releasemacOS
flutter build macos -t lib/main_desktop_merger.dart --releaseLinux
flutter build linux -t lib/main_desktop_merger.dart --release| 权限 | 作用 | 建议 |
|---|---|---|
| 通知权限 | 前台服务、导出 / 修复 / 重建进度、每日提醒 | 建议开启 |
| 无障碍服务 | 自动截屏、Activity 重建、部分后台 AI 流程 | 主功能必需 |
| 使用统计权限 | 前台应用识别、应用维度筛选与统计 | 强烈建议 |
| 已安装应用可见性 | 读取已安装应用列表,用于应用选择、自动加入新安装应用、筛选与统计 | 主功能需要 |
| 忽略电池优化 / 自启动 | 提高后台持续采集与重建稳定性 | 强烈建议 |
| 精确闹钟 | 每日总结提醒 | 可选 |
| 相册 / 下载写入 | 保存截图、回放视频或导出结果 | 可选 |
当前 README 与应用界面都维护以下四种语言:
- 简体中文
- 英文
- 日本語
- 한국어
应用界面文案统一维护在 lib/l10n/app_*.arb,原生 Android 通知、权限说明与前台服务文案维护在 android/app/src/main/res/values*/strings.xml。新增 UI 文案时不要直接写在 Dart Widget 或 Android XML 属性中,应先补齐对应语言资源并重新运行 flutter gen-l10n。
常用命令:
# 生成 l10n 代码
flutter gen-l10n
# 检查 ARB / 平台层 / UI 硬编码回归
dart run tool/i18n_audit.dart --check
# 在确认例外后更新 baseline
dart run tool/i18n_audit.dart --update-baselineflutter test 会自动运行 test/i18n_audit_test.dart,用于阻止新的多语言回归。
欢迎贡献代码、报告问题或提出建议。
- Fork 本项目
- 创建分支:
git checkout -b feature/your-change - 提交修改:
git commit -m "feat: describe your change" - 推送分支:
git push origin feature/your-change - 提交 Pull Request
提交前建议至少运行:
flutter analyzeflutter testdart run tool/i18n_audit.dart --check












