discover · compare · collections · requirements · contribute · feed · watching · stats · help with your tokens
PickGear/PalmNote · source
Snapshot 0 · 2026-11-04T12:47:28Z · Kotlin · GPL-3.0
Content fingerprint
3196d715899dfb6bde0534bdfe5fa2c3cf80f79414da487893d66dbbefe690e1GitHub description at capture
PalmNote —— 本地优先(local-first)的生活记录应用:记账、物品管理、生活规划与离线密码本。数据全部保存在本机,无需注册、无需联网,支持中英文。
README at capture
# PalmNote 掌记
> **中文** | [English](README.en.md)
[](LICENSE)



[](https://github.com/PickGear/PalmNote/releases)
[](https://github.com/PickGear/PalmNote/actions/workflows/ci.yml)
> **⚠️ 声明:** PalmNote 正在活跃开发中,可能存在问题和未完善的功能,欢迎反馈与建议!
一款**本地优先(local-first)**的生活记录应用,集成记账、物品管理、生活规划与记录、密码本于一体。无需注册,数据全部存储于本地,无需联网即可使用全部功能。
## 截图
<table>
<tr>
<td align="center"><b>首页</b></td>
<td align="center"><b>物品管理</b></td>
<td align="center"><b>记账</b></td>
</tr>
<tr>
<td><img src="screenshots/zh/dashboard.jpg" width="240"></td>
<td><img src="screenshots/zh/asset_list.jpg" width="240"></td>
<td><img src="screenshots/zh/bill_calendar.jpg" width="240"></td>
</tr>
<tr>
<td align="center"><b>统计报表</b></td>
<td align="center"><b>生活模块</b></td>
<td align="center"><b>导入 / 导出</b></td>
</tr>
<tr>
<td><img src="screenshots/zh/bill_stats.jpg" width="240"></td>
<td><img src="screenshots/zh/life_template_manage.jpg" width="240"></td>
<td><img src="screenshots/zh/bill_import.jpg" width="240"></td>
</tr>
</table>
## 下载
[](https://github.com/PickGear/PalmNote/releases/latest)
从 [Releases](https://github.com/PickGear/PalmNote/releases) 下载最新 APK,或自行构建。
## 更新日志
详见 [CHANGELOG.md](CHANGELOG.md)。
## 功能特性
### 🏠 首页 Dashboard
- 净资产、月度收支概览
- 预算提醒、目标进度、纪念日倒计时
- 卡片拖拽排序、自定义显隐
- 首次启动引导(功能介绍 + 数据安全须知)
### 📦 物品管理
- 物品录入、分类、状态追踪(持有/闲置/已出/丢失/退役)
- 使用记录、日均成本计算
- 保修/保险/维护提醒
- 关联账单、图片附件
### 💰 记账
- 多账本、多钱包管理
- 收支分类、预算设置、月度/年度报表
- 报销管理:支出标记「可报销」,支持部分报销、代记收入与撤销,统计页查看「净支出」
- 回收站:删除钱包 / 账本 / 分类时,账单与物品移入回收站,可随时恢复
- 日历视图、高级筛选
- CSV/XLSX 导入(支持支付宝加密 ZIP 直读)、账单流水导出(CSV,13 列,可选时间范围,UTF-8 带 BOM)
- 导入账单改版为「分拣台」,待复核项一目了然,支持一键撤销
- 桌面小组件
### 🌿 生活模块
- **计划类**(7):存钱计划、购物计划、待办、旅行计划、阅读、学习计划、物品维护
- **时间类**(4):倒计时、正数日、生日、纪念日
- **记录类**(6):打卡(热力图)、心情(日历+趋势图)、日记、订阅记录、专注计时、身体记录
- **通用能力**:自定义模板、跨模块关联、成就徽章
- 删除的记录进入回收站,可随时恢复
### 🎨 主题与外观
- 多套主题色包 + 自定义颜色
- 6 款渐变壁纸,支持自定义图片壁纸(模糊/透明度可调)
- 应用图标青白配色可选
- 桌面小组件统一圆角卡片,适配深色模式,强调色跟随主题
### 🔑 密码本
- 纯离线密码管理:标题/用户名/密码/网址/备注/分类
- 密码生成器(长度与字符集可配、熵强度提示)
- 搜索、分类筛选、密码遮罩查看、一键复制(30 秒自动清除剪贴板)
- 独立主密码或**无锁模式**(可跳过密码),字段级 AES-256-GCM 加密
- **生物识别解锁**(指纹/面部,Keystore 密钥包裹)
- 自动锁定规则可配置(立即 / 跟系统锁屏 / 超时)
### 🔒 安全
- 应用锁(PIN + 生物识别,PBKDF2 加密),自动锁定规则可配置
- SQLCipher 全库加密(AES-256)
- 密码本字段级 AES-GCM 加密 + 密钥包裹
- AES-GCM 加密备份
- 纯本地存储,全部功能无需联网
## 技术栈
| 层 | 方案 |
|---|------|
| 语言 | Kotlin 2.2.21 |
| UI | Jetpack Compose + Material 3 |
| 数据库 | Room 2.7.2 |
| 偏好存储 | DataStore |
| 图片加载 | Coil 3 |
| 导航 | Navigation Compose |
| 图表 | Compose Canvas 自绘 |
| 依赖注入 | Hilt |
| 备份加密 | AES-GCM + PBKDF2 |
| 数据库加密 | SQLCipher |
| 后台任务 | WorkManager |
| 序列化 | Kotlinx Serialization |
| 农历 | Lunar |
| 生物识别 | AndroidX Biometric |
| 构建 | Gradle(AGP 8.13)+ Kotlin DSL |
## 架构
双模块结构(`:core` + `:app`):
```
core/ # 核心库模块(namespace: com.palmnote)
├── src/main/java/com/palmnote/
│ ├── data/ # 数据层
│ │ ├── datastore/ # DataStore 偏好
│ │ ├── db/ # Room DAO/Entity/迁移/schema
│ │ ├── event/ # 事件总线
│ │ ├── lock/ # 应用锁加密
│ ├── domain/ # 领域层
│ │ ├── model/ # 领域模型
│ │ ├── repository/ # Repository 接口
│ │ ├── service/ # 业务服务(TriggerEngine 等)
│ │ └── util/ # 工具类(DateUtils/CurrencyUtils)
│ ├── di/ # Hilt 注入(@Qualifier 等)
│ └── ui/ # 通用 UI:components/theme/lock/notification/widget
├── src/main/res/ # core 资源(字符串/主题)
└── schemas/ # AppDatabase Room schema(v1-v9)
app/ # 应用模块(namespace: com.palmnote.app)
├── src/main/java/com/palmnote/
│ ├── data/ # 备份/导入导出/repository 实现/worker
│ ├── feature/ # 密码本(字段级加密)+ usecase
│ ├── ui/ # 业务 UI:asset/bills/dashboard/life/settings/search/navigation/backup
│ └── PalmNoteApp.kt # Application
├── src/main/res/ # app 资源(含与 core 共用的字符串 key)
└── schemas/ # VaultDatabase Room schema(v1-v4)
```
> core 不依赖 app;app 依赖 core(`implementation(project(":core"))`)。
> AppDatabase 由 core 导出 schema 至 `core/schemas`,迁移测试经 assets 读取校验。
## 构建
```bash
# 克隆项目
git clone https://github.com/PickGear/PalmNote.git
# 打开 Android Studio 或命令行构建
./gradlew assembleDebug
```
**环境要求:**
- Android Studio(支持 AGP 8.13)
- JDK 17
- compileSdk 36 / targetSdk 34(自用/侧载;上架时按需升回)
## 设计规范
- 全局设计系统(色彩、字体、间距、组件、动画):[docs/design-spec.md](docs/design-spec.md)
- 密码本模块设计:[docs/feature-vault.md](docs/feature-vault.md)
## 隐私
**纯本地、不联网、不收集。** 应用在清单中显式移除 `INTERNET` 权限,系统层面即无法联网;
无账号、无遥测、无广告与统计 SDK,所有数据只存储在本机。
完整说明(数据结构、加密方式、删除与导出)见 [隐私政策](docs/privacy/privacy-zh.md)。
## 权限说明
PalmNote 遵循最小权限原则,申请的全部权限如下:
| 权限 | 用途 |
| --- | --- |
| 网络访问 | **未申请**——清单中以 `tools:node="remove"` 显式移除,系统层面不存在该权限 |
| 通知(Android 13+) | 仅用于生活规划的提醒;首次进入主界面时询问一次,拒绝不影响其他功能 |
| 日历读写 | 仅在打开「日历同步」开关时申请,用于将待办/纪念日写入系统日历 |
| 精确闹钟 | 仅用于提醒准点触发;需要时引导到系统设置页手动开启 |
| 开机自启 | 仅用于重启手机后恢复已设定的提醒,不采集任何数据 |
账单、备份与崩溃日志的导入导出全部通过系统文件选择器(SAF)完成,**无需存储权限**;应用不申请相机权限。
## 已知限制
PalmNote 是纯本地应用,以下限制是"零联网"设计的直接代价,使用前请知悉:
- **本机是唯一副本**:卸载应用或清除数据后记录无法找回,没有云端可以恢复。
- **数据安全靠习惯**:应用内置自动备份(默认关闭,可在「设置 → 数据与备份 → 备份与恢复」开启)与手动备份;备份位置可选网盘同步文件夹。请定期确认备份状态。
- **主密码无法找回**:密码本与加密备份都由主密码保护,忘记后任何人都无法恢复。
- **无应用内更新**:新版本请到 [Releases](https://github.com/PickGear/PalmNote/releases) 下载覆盖安装。
- **解析不猜测**:账单文件缺字段或对不上分类时会进「待复核」,导入页明确列出而不是静默填入猜测值。
- **功能仍在完善中**:桌面小组件、生活页、其他模块与设置均未完全成型,部分场景尚不完整;基本功能闭环预计在 v1.5 版本完成。当前版本请以自用/尝鲜为主。
## 如何贡献
欢迎提交 Bug、功能建议与代码:
- 提交 Bug 或功能请求 → [Issues](https://github.com/PickGear/PalmNote/issues)
- 提交代码 → [Pull Requests](https://github.com/PickGear/PalmNote/pulls)
- 交流群(QQ)→ 1036958236(学习交流与建议)
- 贡献指南 → [CONTRIBUTING.md](CONTRIBUTING.md)
- 安全漏洞报告 → [SECURITY.md](SECURITY.md)
- 社区行为准则 → [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
## 开源协议
本项目基于 [GPL-3.0](LICENSE) 许可证发布。第三方组件及依赖的版权与许可证声明见 [NOTICE](NOTICE)。
## 免责声明
PalmNote 与微信、支付宝等第三方服务的权利人无任何关联、合作或背书关系。对第三方账单文件(CSV/XLSX/加密 ZIP)的导入仅为在本地对用户自有数据作格式兼容处理,"微信""支付宝"等名称仅作描述性使用,相关商标归其权利人所有。账单解析全程在设备本地完成,不联网、不上传任何数据。
本软件按"现状"提供,不附带任何形式的担保;因使用本软件导致的任何数据丢失或损失,开发者不承担责任。完整的担保免责与责任条款见 [GPL-3.0 LICENSE](LICENSE)。
## 联系方式
- GitHub Issues:https://github.com/PickGear/PalmNote/issues