chick_mood/claude.md
2025-10-22 20:05:11 +08:00

462 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 别摇小鸡 - 技术决策与问题记录
> 基于产品需求文档分析的技术架构决策点和待解决问题汇总
## 📋 项目概览
**项目名称:** 别摇小鸡心情记录App
**开发平台:** Android原生Kotlin
**当前版本:** V1.0 MVP
**更新日期:** 2025-10-22
---
## 🏗️ 已确认的技术架构
### 核心技术栈
- **开发语言:** Kotlin
- **UI框架** Android Jetpack (ViewModel, LiveData, Navigation)
- **动画引擎:** Lottie + Property Animation
- **传感器:** Android Sensor Framework (Accelerometer)
- **数据存储:** SQLite Room + SharedPreferences
- **图片处理:** Glide
### 功能开发优先级
**优先级1 (V1.0核心功能)**
- ✅ 六种基础情绪选择(开心、生气、悲伤、烦恼、孤单、害怕)
- ✅ 传感器摇晃检测与心情值计算
- ✅ 小鸡2D动画响应系统
- ✅ 心情记录保存(文字+心情值)
**优先级2 (V1.0后续功能)**
- ✅ 心情日历月视图展示
- ✅ 基础用户设置(昵称、头像)
**优先级3 (V1.1+功能)**
- 📷 图片添加与编辑功能
- 📊 基础心情统计(饼图、趋势图)
- 🔄 云端数据同步选项
---
## 🎯 UI/UX 交互细节 (待UI设计图后确认)
### 页面交互确认点
1. **情绪选择页**
- [ ] 情绪按钮切换交互方式
- [ ] 选中状态的视觉反馈效果
2. **准备摇晃页**
- [ ] 是否需要倒计时动画(3-2-1-开始)
- [ ] 不同情绪的引导文案差异化
3. **摇晃页面**
- [ ] 心情值进度条的位置设计(顶部/底部)
- [ ] 小鸡晕眩状态的渐进变化
4. **结果展示页**
- [ ] 心情强度文字的动画效果
- [ ] 心情值数字的计数动画
### 边界情况处理
5. **异常场景**
- [ ] 摇晃过程中电话接入处理
- [ ] 传感器故障时的备用方案
6. **用户输入**
- [ ] 文字输入字数限制建议(建议200字)
- [ ] 自动保存草稿功能
---
## 🔧 技术实现问题记录
### 传感器与算法相关 (V1.0基础实现)
**高优先级:**
- [ ] **心情值算法调优**
- 当前公式:`心情值 = Σ(加速度幅值) / 摇晃时间`
- 需要根据实际测试数据调整权重系数
- 考虑不同设备传感器的差异性
- [ ] **摇晃检测阈值设定**
- 最小摇晃时间文档建议3秒(可能需要调整到2秒)
- 加速度阈值:区分正常使用和主动摇晃
- 采样频率50Hz是否合适
**中优先级:**
- [ ] **数据滤波算法**
- 低通滤波器参数设置
- 高频噪声去除策略
- 设备兼容性处理
### 动画与性能相关 (V1.0基础实现)
**高优先级:**
- [ ] **小鸡动画系统**
- 占位图资源路径规划
- 动画状态机设计
- 与传感器数据的实时响应
- [ ] **动画性能优化**
- 使用Hardware Layer加速
- ViewPropertyAnimator vs Lottie选择
- 内存占用控制
**中优先级:**
- [ ] **音效反馈系统** (可选功能)
- 摇晃过程中的音效设计
- 音效文件压缩和缓存
### 数据存储与架构
**V1.0基础实现:**
- [ ] **数据库结构确认**
```sql
-- 确认表结构设计是否符合实际使用场景
-- 考虑预留扩展字段
```
- [ ] **数据迁移准备**
- user_config表添加version字段
- 为未来云端同步预留接口
**V1.1+扩展准备:**
- [ ] **云端同步架构预埋**
- sync_queue表的实现
- 冲突解决策略
- 离线优先的设计模式
### 系统适配与兼容性
**高优先级:**
- [ ] **Android版本适配**
- 最低支持版本Android 5.0 (API 21+)
- 目标版本Android 13+ (API 33+)
- 权限管理:动态申请传感器权限
- [ ] **深色模式支持** (待确认)
- 两套色彩方案准备
- 小鸡黄在深色背景下的适配
**中优先级:**
- [ ] **字体适配策略**
- 支持系统字体大小设置
- 使用sp单位限制最大最小字号
- 不同屏幕密度的适配
- [ ] **设备性能差异处理**
- 低端设备的动画降级
- 内存使用优化策略
---
## 📊 数据分析预埋
### 友盟集成准备 (V1.1+)
- [ ] 基础页面访问统计
- [ ] 用户行为路径追踪
- [ ] 性能监控指标
- [ ] 崩溃报告收集
### 本地数据分析
- [ ] 心情记录频率统计
- [ ] 情绪分布分析
- [ ] 摇晃强度分布
- [ ] 用户留存分析
---
## 🚀 性能优化目标
### V1.0性能指标
- [ ] App启动时间 < 2秒
- [ ] 摇晃动画延迟 < 50ms
- [ ] 内存占用 < 100MB
- [ ] 电池消耗控制
### 持续优化项
- [ ] 传感器功耗优化
- [ ] 动画渲染性能提升
- [ ] 数据库查询优化
- [ ] 图片加载和缓存策略
---
## 🏠 首页需求详细分析
### 首页核心定位
**主要功能:** 历史记录浏览展示
**次要功能:** 创建新心情记录入口
**页面性质:** 内容消费型页面(非操作型页面)
### 完整用户流程
**创建新记录流程:**
```
首页 → 点击添加心情按钮 → 底部情绪选择弹框 → 选择情绪 →
添加心情页面(摇晃页) → 心情详情编辑页 → 保存 → 返回首页显示新记录
```
**浏览历史记录流程:**
```
首页 → 左右滑动查看历史记录 → 时间指示器实时更新 →
单条记录操作(收藏/分享/查看详情)
```
### 首页页面结构
**1. 顶部导航栏 (ActionBar/Toolbar)**
- **更多按钮:** 点击弹出侧边抽屉菜单
- **统计按钮:** 跳转到统计页面
**2. 时间指示器**
- **功能:** 显示当前浏览记录的时间
- **交互:** 左右滑动历史记录时,时间动态变化到对应记录时间
- **格式:** "YYYY.MM.DD 星期几 HH:mm"
**3. 历史记录展示区 (核心区域)**
- **容器:** ViewPager2横向滑动卡片
- **卡片元素:**
- 小鸡形象(根据心情显示对应颜色和表情)
- 心情详情(情绪类型、强度、文字内容、图片)
- 操作按钮:收藏/取消收藏、分享、查看详情
- **滑动效果:** 横向推送切换动画
- **数据加载:** 初始10条 + 滑动预加载无限滚动
**4. 添加心情按钮**
- **位置:** 页面右下角FloatingActionButton
- **功能:** 触发创建新心情记录流程
### 关键技术实现方案
**1. 数据加载策略**
- **初始加载:** 最近10条历史记录
- **预加载机制:** 滑动时无感加载更多数据
- **分页实现:** Android Paging 3.x库
- **缓存策略:** Room本地数据库 + 内存缓存
**2. 页面状态管理**
- **空白状态:** 首次使用显示空页面引导
- **位置保持:** 详情页返回时保持原浏览位置
- **自动跳转:** 创建新记录后自动跳转到最新记录
**3. 交互细节**
- **情绪选择弹框:** BottomSheetDialog从底部滑出
- **弹框关闭:** 支持点击外部区域关闭
- **滑动动画:** ViewPager2 + 自定义PageTransformer
- **状态切换:** 属性动画实现平滑过渡
### 首页开发模块拆分
**阶段1基础框架搭建**
- **模块1.1** MainActivity基础布局结构
- **模块1.2** 数据模型定义(MoodRecord, Emotion枚举)
- **模块1.3** Room数据库设计和实现
- **模块1.4** ViewModel和Repository架构
**阶段2历史记录展示**
- **模块2.1** 空白状态页面实现
- **模块2.2** 历史记录卡片Fragment设计
- **模块2.3** ViewPager2集成和分页加载
- **模块2.4** 滑动动画和效果优化
**阶段3添加心情功能**
- **模块3.1** FloatingActionButton实现
- **模块3.2** 情绪选择BottomSheet弹框
- **模块3.3** 页面跳转和参数传递
**阶段4交互细节完善**
- **模块4.1** 动画效果完善
- **模块4.2** 异常处理和边界情况
- **模块4.3** 性能优化和内存管理
**阶段5测试和优化**
- **模块5.1** 端到端流程测试
- **模块5.2** UI细节调整和完善
- **模块5.3** 代码质量优化
### 技术风险评估和解决方案
**风险1大量历史记录的内存占用**
- **解决方案:** ViewPager2 + FragmentStateAdapter + 分页加载
- **优化策略:** 及时回收不可见的Fragment限制内存中同时保持的卡片数量
**风险2滑动流畅性和动画性能**
- **解决方案:** 使用硬件加速,优化布局层级
- **测试策略:** 在低端设备上进行性能测试
**风险3数据状态同步复杂性**
- **解决方案:** 使用LiveData + ViewModel架构确保UI与数据状态同步
- **边界处理:** 网络异常、数据库操作失败等异常情况处理
---
## ❓ 待确认的决策点
### 已确认问题:
1. **✅ 首页定位:** 历史记录浏览为主,创建记录为辅
2. **✅ 交互流程:** 完整的创建和浏览流程已确认
3. **✅ 技术方案:** 数据加载、动画、状态管理策略已确认
4. **✅ 开发规划:** 模块化开发路径已确定
### 待确认问题:
1. **UI交互相关** 具体的动画时长、缓动曲线参数
2. **音效反馈:** V1.0是否需要音效功能
3. **深色模式:** 是否需要支持深色主题
4. **字数限制:** 心情记录文字的长度限制
5. **侧边抽屉:** 更多按钮弹出的具体功能项
6. **统计页面:** 统计页面的具体功能和数据展示
### 其他技术风险评估:
- **传感器兼容性:** 不同设备传感器差异较大(摇晃页面)
- **动画性能:** 实时响应可能影响流畅度
- **数据准确性:** 心情值算法需要大量测试验证
## 🔄 当前开发状态
### ✅ 已完成工作
- **模块1.1**: MainActivity基础布局结构已完成
- **Bug修复**: 语法错误、依赖冲突、主题配置问题(已修复)
- **项目架构**: 从Compose成功转换为View系统
- **测试覆盖**: 完整的单元测试和测试数据生成器
### 🔄 当前状态
- **编译状态**: ✅ 编译成功
- **安装状态**: ✅ 可安装到设备
- **运行状态**: 🔄 主题修复待验证需重启IDE
### 📋 下一步计划
1. **立即任务**: 验证主题修复效果,确保应用正常启动
2. **模块1.2**: 数据模型定义MoodRecord, Emotion枚举
3. **模块1.3**: Room数据库设计和实现
4. **模块1.4**: ViewModel和Repository架构
### ⚠️ 待解决问题
- **文件锁定**: Gradle build目录锁定问题需手动重启IDE解决
- **模块名称**: 已修复settings.gradle.kts中的项目名称不一致问题
- **主题验证**: 修复后的主题需要在设备上验证
- **图标资源**: 当前使用占位图标,需要设计师提供正式资源
**2025-10-22 (Gradle构建错误修复):**
- 🐛 **问题**: Module entity with name: Chick_Mood should be available
- ✅ **分析**: settings.gradle.kts中项目名称与错误信息不一致
- ✅ **修复**: 将rootProject.name从"chick_mood"改为"Chick_Mood"
- 🔄 **待验证**: 需重启IDE解决文件锁定问题后重新构建
**2025-10-22 (R.jar文件锁定问题):**
- 🐛 **问题**: Windows系统文件锁定无法删除R.jar文件
- ✅ **分析**: Java进程未完全释放文件句柄
- ✅ **处理**: 已强制结束Java进程提供完整解决方案
- 🔄 **待完成**: 需用户手动关闭所有程序后删除build目录
---
## 📝 开发规范
### 核心开发原则
**1. 模块化开发**
- ✅ 每次只开发一个小模块,避免一次性编写大量代码
- ✅ 每个模块独立测试,确保功能正确性
- ✅ 模块间接口清晰,便于集成和维护
**2. 测试驱动**
- ✅ 每个模块提供必要的测试数据和测试代码
- ✅ 单元测试覆盖核心业务逻辑
- ✅ 集成测试验证模块间交互
**3. 代码质量**
- ✅ 提供必要且合适的中文注释
- ✅ 代码结构规范、科学,遵循设计模式
- ✅ 便于后续维护和功能迭代
### 编码标准
**代码结构规范**
```kotlin
/**
* 类/方法功能描述
* @param 参数说明
* @return 返回值说明
* @author 开发者
* @date 开发日期
*/
class ClassName {
// 类属性
private val property: Type = initial_value
/**
* 方法功能描述
*/
fun methodName(): ReturnType {
// 方法实现
}
}
```
**注释规范**
- 类和公共方法必须包含KDoc注释
- 复杂业务逻辑添加行内注释说明
- 常量和重要变量添加用途说明
**命名规范**
- 类名PascalCase (例:`MoodActivity`)
- 方法名camelCase (例:`calculateMoodValue()`)
- 常量UPPER_SNAKE_CASE (例:`MAX_SHAKE_DURATION`)
- 变量camelCase (例:`currentMoodValue`)
## 📝 更新记录
**2025-10-22:**
- 创建技术决策文档
- 梳理V1.0核心技术架构
- 记录待解决的交互和技术问题
- 确定功能开发优先级
**2025-10-22 (开发规范):**
- 添加模块化开发原则
- 确立测试驱动开发流程
- 制定代码质量和注释标准
- 明确编码规范和命名约定
**2025-10-22 (首页需求分析):**
- 完成首页UI分析和交互流程理解
- 明确首页定位:历史记录浏览为主,创建记录为辅
- 制定详细的模块化开发规划5个阶段18个模块
- 确定技术实现方案和风险控制策略
- 记录完整用户流程和页面结构需求
**2025-10-22 (模块1.1开发完成):**
- ✅ 完成MainActivity基础布局结构搭建
- ✅ 转换项目架构从Compose到View系统
- ✅ 添加必要的依赖库Room、ViewPager2、LiveData等
- ✅ 创建完整的布局文件和资源文件
- ✅ 实现ViewBinding和基础组件初始化
- ✅ 添加完整的单元测试覆盖
**2025-10-22 (Bug修复记录):**
- 🐛 **问题1**: MainActivity语法错误时间格式化缺少右括号
- ✅ 修复:修正`timeFormatter.format(Date(timestamp))`语法
- 🐛 **问题2**: Compose依赖冲突导致编译失败
- ✅ 修复删除所有Compose相关文件和依赖
- 🐛 **问题3**: 应用启动闪退(主题配置不兼容)
- ✅ 定位:崩溃日志显示布局解析失败
- ✅ 分析Material主题缺少AppCompat支持
- ✅ 修复:更新主题为`Theme.AppCompat.Light.NoActionBar`
- 🔄 待验证需重启IDE解决文件锁定问题
**技术选型决策View系统 vs Compose**
-**选择View系统原因**
- 复杂交互支持更好ViewPager2横向滑动、传感器集成
- 性能优化更直接(内存管理、硬件加速)
- 开发复杂度更低(团队熟悉度高、调试工具完善)
- 长期维护成本更低(稳定性、可预测性)
-**Compose潜在问题**
- 复杂手势处理和自定义动画实现复杂度高
- 大量数据内存占用控制困难
- API稳定性有待观察
---
*此文档将随着开发进展持续更新,记录重要的技术决策和解决方案。*