立项背景与目标:
市面上主流记账App普遍强制注册云账号、插入广告、绑定社交,个人财务数据被迫上传云端。本项目目标是做一款纯本地、无账号、无广告、无社交、质量对标商业记账软件的自用工具,所有账单数据完全掌握在用户手机本地,不依赖任何云端服务。
核心功能模块:
1. 快捷记账:支持支出/收入/转账三类,自研数字键盘支持"+-×÷"连续算式输入,打开即输金额,3秒内完成一笔;金额精确到分,以整数存储杜绝浮点误差。
2. 多账本与账户:账本在最外层,切换账本即切换整套数据;每个账本独立管理现金、微信、支付宝、银行卡等账户,余额由流水实时计算。
3. 账单批量导入:一键解析微信/支付宝真实导出文件(.xlsx、加密zip、CSV),自动识别表头、匹配分类、按交易单号去重,省去逐笔手工录入。
4. 统计与预算:月度收支结余汇总、分类占比环形图、近6个月趋势柱状图;支持总预算与分类预算,超支时本地通知提醒。
5. 日历视图:月历网格每格显示当日支出,颜色深浅直观反映消费强度,点击可查看当日每笔明细并直接编辑。
6. 定期记账与分期:房租、订阅等周期性账单自动入账,漏期智能补齐上限保护;借贷与人情往来独立建表,不污染收支统计。
7. 数据安全:纯本地SQLite存储,支持导出CSV与数据库文件备份,不做云同步与账号体系。
业务流程:首页打开即见本月概览与当日账单流;点悬浮按钮进入记账页,输入金额→选分类→保存即完成;月末在统计页查看消费结构,在日历页回溯每日开销;需要批量整理时从设置导入历史账单,自动分类去重。
整体架构与设计思路:
采用 MVVM + 单向数据流架构。UI层使用 Jetpack Compose 声明式编写,状态由 ViewModel 持有并通过 StateFlow 驱动;数据层用 Room 封装 SQLite,DAO 直接返回 Flow,数据变化自动刷新界面;领域规则抽成纯函数并配套单元测试。数据库历经4个版本迁移,v3→v4 新增定期记账/借贷三张表时,在真机92笔真实数据上验证一笔未丢、106列逐列比对一致。
个人负责与结果:
从产品设计、数据库建模、UI实现到测试验收由本人独立完成(AI辅助编码,本人负责产品决策与真机验收),v1.0到v2.0共20个开发步骤全部通过真机验收,累计743个单元测试+214项离线SQL验证全部通过。
难点与解决方案:
1. 金额精度:全库以"分"为单位整数存储,UI层再格式化回元,从根上避免浮点误差。
2. 账单去重:用 SHA-256 指纹 + 部分唯一索引(WHERE deleted_at IS NULL) + OnConflictStrategy.IGNORE 三层兜底,既防重复导入,又允许删除后重新导入。
3. 支付宝加密包:标准库不支持 ZipCrypto,自行实现解密算法;按字节内容而非文件后缀判断格式,兼容转存改名场景。
4. 余额一致性:账户余额与欠款均由流水实时聚合,不存冗余字段,配恒等式单元测试防止公式写反。
5. 进度可靠性:定期记账的"账已写、进度未推"拆事务保证;月末31号在小月不漂移,每次按规则重新定位日期。