Memory 是一款面向英语学习者的 Android 应用,集成 FSRS 间隔重复算法、AI 智能批改、语音评测和 AI 对话等核心功能,帮助用户高效提升英语水平。
| 模块 | 描述 | 核心能力 |
|---|---|---|
| 每日单词学习 | FSRS 科学背词 | 选择题/填空题双模式、智能复习调度 |
| 听写练习 | 逐词播放+作答 | 单词/短语/句子三级听写、OCR 拍照识别 |
| 作文批改 | AI 语法纠错评分 | OCR 拍照提取、AI 自动批改 |
| 发音练习 | 跟读评测 | 音频录制上传、发音/流利度/语调评分 |
| AI 对话 | 自由口语练习 | 文字/语音双模式、实时评分 |
| 每日阅读 | AI 生成阅读材料 | Markdown 渲染、生词标注、句子翻译 |
| 学习评估 | 数据仪表盘 | 掌握度分布、复习趋势、AI 建议 |
| 词书管理 | 60+ 词库支持 | CET4/6、IELTS、TOEFL、GRE 等 |
┌──────────────────────────────────────────┐
│ UI 层 (Activity/Fragment) │
│ WordLearning Dictation Composition ... │
├──────────────────────────────────────────┤
│ MemoryApiClient + ApiBridge (统一网络入口) │
│ OkHttp 单一共享连接池 + Handler 回调 │
├──────────────────────────────────────────┤
│ 后端 API 服务 │
└──────────────────────────────────────────┘
| 层次 | 技术选型 |
|---|---|
| UI 框架 | AndroidX AppCompat, Material Design, ConstraintLayout |
| 网络请求 | OkHttp (MemoryApiClient 唯一入口 + 单一共享连接池) + Retrofit (域接口) + ApiBridge (Handler 桥接) |
| 图片加载 | Glide 4.12.0 |
| 图片裁剪 | uCrop 2.2.8 (Yalantis) |
| Markdown | Markwon 4.6.2 |
| 图表 | MPAndroidChart 3.1.0 |
| 对话框 | Material Dialogs 3.3.0 (afollestad) |
| 音频 | MediaPlayer + AudioRecord (PCM 16bit 16kHz) |
| 本地词库 | Raw JSON 资源文件 (60+ 词库) |
| AI 功能 | 由后端服务统一处理 |
| TTS | 有道词典 API |
用户操作 → Activity/Fragment
↓
ApiBridge.enqueue(MemoryApiClient.域().xxx(...), handler, ok, fail, tag)
↓
后端 API 服务
↓
JSON 响应 → Handler.handleMessage() → UI 更新
Memory/
├── AGENTS.md # AI 编码助手指南
├── build.gradle # 根构建配置
├── settings.gradle # Gradle 设置
├── gradle.properties # Gradle 属性
├── docs/ # 文档目录
├── gradle/wrapper/ # Gradle Wrapper
└── app/
├── build.gradle # 应用构建配置
├── proguard-rules.pro # 混淆规则
├── libs/ # 本地 JAR 库
└── src/
├── androidTest/ # 仪器化测试
├── test/ # 单元测试
└── main/
├── AndroidManifest.xml
├── res/
│ ├── layout/ # 布局文件
│ ├── drawable/ # 图片资源
│ ├── anim/ # 动画
│ ├── raw/ # 词库 JSON
│ └── xml/ # XML 配置
└── java/com/deepsleep/memory/
├── network/ # 网络通信层(MemoryApiClient 唯一入口 + 单一共享 OkHttp 连接池)
│ ├── ApiConstants.java # 环境切换 + getFullUrl + 共享线程池
│ ├── MemoryApiClient.java # 唯一入口:Retrofit 域接口工厂 + 底层专用能力(postStream/downloadWav 等)
│ ├── ApiBridge.java # Retrofit Call → Handler 桥接(enqueue / filePart 流式)
│ └── MemoryApi.java + 域接口 (AuthApi 等) # Retrofit 声明式接口
├── settings/ # 设置管理
│ ├── UserSettingsManager.java
│ └── InnerSettingsManager.java
├── handle_utils/ # 工具类
│ ├── BitmapManager.java
│ ├── AudioPlayer.java
│ ├── MemAudioRecord.java
│ └── lexicon/ # 本地词库
└── ui/ # 界面层
├── MainActivity.java
├── auth_view/ # 登录/注册
├── init_view/ # 词书选择/计划
├── main_view/ # 4 Tab 主界面
│ ├── WordLearningFragment.java
│ ├── TreasureBoxFragment.java
│ ├── DailyReadingFragment.java
│ └── UserHomeFragment.java
├── treasure_view/ # 宝藏箱子模块
│ ├── dictation_view/
│ ├── composition_view/
│ ├── pronunciation_view/
│ ├── aichat_view/
│ └── evaluation_view/
└── extra_view/ # 扩展功能
├── my_word_view/
├── word_search_view/
├── plan_view/
└── setting_view/
- Android Studio Hedgehog (2023.1.1) 或更高版本
- JDK 11+
- Gradle 8.10.2 (使用项目内置的 Gradle Wrapper)
- Android SDK API Level 34
# 克隆项目
git clone https://github.com/pudaa/Memory.git
cd Memory
# 编译 Debug APK
./gradlew assembleDebug
# 安装到设备
./gradlew installDebug
# 编译 Release APK
./gradlew assembleRelease
# 运行单元测试
./gradlew test
# 运行仪器化测试
./gradlew connectedAndroidTest- 打开 Android Studio
- 选择 File -> Open
- 导航到项目根目录并选中
- 等待 Gradle 同步完成
- 点击 Run 按钮运行
项目支持 DEV / TEST / PROD 三套环境,后端地址在构建时从本地 local.properties 注入(不会提交到版本库):
-
在项目根目录
local.properties中配置后端地址:BACKEND_DEV_URL=http://your-dev-host:8080 BACKEND_TEST_URL=http://your-test-host:port BACKEND_PROD_URL=http://your-prod-host:8080 -
app/build.gradle读取这些属性并注入到BuildConfig,运行时通过ApiConstants统一读取。
// 默认 DEV,切换环境
ApiConstants.setEnvironment(ApiConstants.Environment.TEST);
ApiConstants.setEnvironment(ApiConstants.Environment.PROD);
⚠️ local.properties已被.gitignore忽略,请勿将真实后端地址提交到公共仓库。未配置时构建使用占位符地址。
应用需要以下权限:
INTERNET— API 通信CAMERA— OCR 拍照识别RECORD_AUDIO— 发音练习录音READ/WRITE_EXTERNAL_STORAGE— 图片保存与裁剪
注册/登录 -> 选择词书 -> 制定学习计划 -> 主界面
|- Tab0: 每日单词学习 (FSRS)
|- Tab1: 宝藏箱 (听写/作文/发音/AI对话/评估)
|- Tab2: 每日阅读 (AI生成)
|- Tab3: 用户中心 (设置/词书/计划)
- FSRS 间隔重复:服务端根据记忆状态(可提取性、难度、稳定性)动态调度复习
- 逐词听写:支持键盘输入 + OCR 拍照识别,智能过滤提示词
- 卡片式学习:自定义滑动卡片容器,支持选择题/填空题双模式
- 多源查词:集成 Bing、牛津、剑桥词典及本地词库四源查询
- Handler 异步模式:统一的后台线程 + Handler 回调,保持代码风格一致
- 项目技术文档 — 详细的技术架构说明
欢迎提出问题和改进建议!请提交 Issue 或 Pull Request。
Copyright (c) 2026 pudaa