一款纯本地的 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 保持未签名。
密钥库与口令一旦泄露,任何人都能签出被系统当作「正常更新」的安装包。换机器时请通过安全渠道单独拷贝,不要走代码仓库。
需求规格、数据模型、工程约束与各阶段的验证记录都在这里:
里面记录了每一步的技术取舍与踩过的坑,例如:为什么金额必须用整数、为什么转账要单独建模、为什么数据库迁移必须配迁移测试、以及若干只有实机操作才会暴露的缺陷(图表空数据崩溃、日期选择器的时区换算、启用应用锁时的导航重建等)。
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 形式提供,安装前需允许「安装未知来源应用」。
应用锁密码与账号密码都只保存在本机且不可找回;忘记后只能清除应用数据,因此建议定期导出备份。