Skip to content
Tobin-githubPublic

About

纯使用 DeepSeek-v4-flash + codex cli 开发的记账app. 总花费9.5CNY

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

X-Record

一款纯本地的 Android 记账应用。所有数据(包括账号与密码)都保存在设备本地数据库中,应用不申请网络权限,不上传任何内容。

安装包申请的权限只有 USE_BIOMETRIC 与 USE_FINGERPRINT(应用锁用)。没有 INTERNET,也没有开机自启、唤醒锁、网络状态、读取存储等权限——导出的备份文件通过系统文件选择器由用户自己指定位置,应用全程接触不到文件系统路径。

特点

  • 离线可用:记账、统计、备份全部在本地完成,飞行模式下功能完整。备份通过系统文件选择器导出成 JSON 文件,由用户自己决定放在哪里。
  • 数据算得准:金额一律以「分」为单位用整数运算,表达式求值走 BigDecimal,不会出现 0.1 + 0.2 = 0.30000000000000004 这类错账。
  • 本地多账号:一台设备可注册多个账号,数据彼此隔离,切换账号需要输入对方密码。
  • 账期可配置:每月起始日可设为 1~28 日,明细分组、图表聚合与预算周期统一跟随,不会各算各的。
  • 备份可迁移:导出包含账本、账户、分类、流水、预算与定期账单,换机或重装后可完整恢复。备份文件不含用户名与密码哈希。

已实现功能

四个一级页面加一个悬浮记账入口:

页面 内容
明细 月度收支结余、按日分组与当日小计、左滑删除(可撤销)、点击编辑、账期切换
图表 周/月/年维度、收支趋势柱状图、分类占比环形图与排行
账单 账本管理(新建/重命名/设为默认/删除)、月度汇总、日均与环比、总预算与分类预算进度
我的 账户管理、分类管理、定期账单、数据备份、应用锁、外观、每月起始日、切换/添加/删除账号

记账支持支出 / 收入 / 转账三种类型,自定义数字键盘可做连续运算;转账只改变账户间余额分布,不计入收支统计。

定期账单支持每天 / 每周 / 每月 / 每年与自定义间隔,开启自动记账后会在打开应用时补齐错过的期数。

技术栈

项目 选型
语言 Kotlin 2.2.10
UI Jetpack Compose + Material 3(Compose BOM 2026.02.01)
导航 Navigation Compose 2.10.1(类型安全路由)
数据库 Room 2.8.5(KSP)
依赖注入 Hilt 2.60.1
偏好存储 DataStore Preferences 1.2.1
图表 Vico 3.2.3
生物识别 androidx.biometric 1.1.0
构建 AGP 9.4.0 / Gradle 9.6 / JDK 11
目标平台 minSdk 28,targetSdk 37,compileSdk 37

架构为 MVVM + Repository:Room 返回 Flow,Repository 做聚合,ViewModel 用 stateIn 转 StateFlow,Compose 直接订阅,界面不手写刷新逻辑。

构建

# 调试包
./gradlew :app:assembleDebug

# 发布包(启用 R8 压缩与混淆)
./gradlew :app:assembleRelease

# 单元测试
./gradlew :app:testDebugUnitTest

签名配置

签名密钥与口令不随仓库分发。本地构建发布包前,在项目根目录创建 keystore.properties:

storeFile=jks/xrecord.jks
storePassword=你的口令
keyAlias=你的别名
keyPassword=你的口令

该文件与 *.jks、*.keystore 均已被 .gitignore 排除。

找不到这个文件时构建依然可以完成:debug 回落到默认调试密钥,release 保持未签名。

密钥库与口令一旦泄露,任何人都能签出被系统当作「正常更新」的安装包。换机器时请通过安全渠道单独拷贝,不要走代码仓库。

文档

需求规格、数据模型、工程约束与各阶段的验证记录都在这里:

docs/requirements.md

里面记录了每一步的技术取舍与踩过的坑,例如:为什么金额必须用整数、为什么转账要单独建模、为什么数据库迁移必须配迁移测试、以及若干只有实机操作才会暴露的缺陷(图表空数据崩溃、日期选择器的时区换算、启用应用锁时的导航重建等)。

项目结构

app/src/main/java/top/tobin/xrecord/
├── core/            跨模块纯逻辑:账期计算、金额运算、密码哈希、应用锁
├── data/
│   ├── local/       Room 实体、DAO、数据库与迁移
│   ├── preferences  DataStore 设置
│   ├── backup       备份文件的模型与解析
│   └── repository   数据仓库
└── ui/
    ├── navigation   类型安全路由
    ├── components   可复用组件
    ├── feature/     按页面分包
    └── theme        Material 3 主题

Room 的 schema 导出在 app/schemas/,任何表结构变更都必须提升版本号并编写迁移,当前为版本 2。

尚未实现

  • 记账模板、流水附件与图片
  • 明细页的筛选、搜索与批量操作(长按多选)
  • 导入支付宝 / 微信账单 CSV
  • 图表页的资产变化曲线、账本排序与图标自定义

说明

这是一个个人学习项目,未上架应用商店。发布包以 APK 形式提供,安装前需允许「安装未知来源应用」。

应用锁密码与账号密码都只保存在本机且不可找回;忘记后只能清除应用数据,因此建议定期导出备份。

About

纯使用 DeepSeek-v4-flash + codex cli 开发的记账app. 总花费9.5CNY

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages