# realmynote **Repository Path**: romp/realmynote ## Basic Information - **Project Name**: realmynote - **Description**: RealmyNote,完全归你掌控的私人笔记,不依赖第三方云服务商 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-11 - **Last Updated**: 2026-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 我的记事本(RealMyNote) > [English version](README_EN.md) 完全属于自己的安卓笔记 App:无账号、无网络、纯本地存储。只关心两件事——**什么时候写的、写了什么**,像一本传统日记本。 | | | |---|---| | 应用名 | 我的记事本 | | 包名 | com.romp.realmynote | | 最低系统 | Android 5.0 (API 21) | | 语言/技术 | Java + 传统 View,仅 3 个 androidx 基础库,无任何三方依赖 | ## 功能一览 - ✍️ 写作:点 + 或桌面小组件直接进入写作界面,**返回键即自动保存**(空内容不保存) - 📌 **桌面小组件**:长按桌面空白处 → 微件/小组件 → 找「我的记事本 · 快速写笔记」拖到桌面;点一下直达写作界面 - 📥 导入旧笔记:见下方第二章(手把手教程) - 📤 导出:菜单 → 导出全部笔记 → JSON(完整备份,可重新导入)或 CSV(Excel 直接打开) - ☁️ 系统自动备份:手机开启「设置 → 云备份」后笔记随系统自动备份,换机自动恢复(手动导出 JSON 是双保险) --- ## 一、日常使用图文教程 ### 写笔记:返回键就是保存

主界面:笔记按时间倒序排列 新建笔记:键盘自动弹出 写作界面

1. 打开 App 看到的就是笔记列表,最新的在最上面(标题栏下每条笔记都带创建时间) 2. 点右下角 **➕** 进入写作界面,键盘自动弹出,落笔就写 3. 写完**直接按返回键**——自动保存并回到列表(也可以点右上角 ✔);什么都没写就返回则不会产生空笔记 想删除某条笔记:在列表里**长按**它,或在写作界面点右上角 **⋮ → 删除**(删除前都有确认弹窗)。 ### 桌面小组件:点一下就开写

小组件选择器中的「快速写笔记」 添加到桌面后的小组件

1. 长按桌面空白处 → 选 **微件**(有的手机叫「小组件」「添加工具」) 2. 找到 **我的记事本 · 快速写笔记**,按住拖到桌面 3. 以后点一下这个小组件就直达写作界面,写完按返回直接回到桌面 ### 导入与导出

右上角菜单 导出格式选择

- 右上角 **⋮** 菜单里有三项:**导入笔记**、**导出全部笔记**、**关于**(看当前版本号) - 导出时二选一:**JSON**(完整备份,可重新导入本 App)或 **CSV**(Excel/WPS 双击直接打开不乱码),文件保存位置由你在系统弹出的界面里选 - 导入支持 XLSX / CSV / JSON,详见下一章手把手教程 --- ## 二、导入旧笔记手把手教程 ⭐ ### 第 1 步:把旧笔记整理成两列表格 打开电脑上的 **Excel**(或 WPS),新建表格,按下面的样子整理,**A 列时间、B 列内容**,一行一条笔记: | | A(创建时间) | B(内容) | |---|---|---| | 1 | 创建时间 | 内容 | | 2 | 2023-05-01 08:30 | 今天天气不错,去公园走了走。 | | 3 | 2023-05-02 | 内容可以很长,可以换行(单元格内 Alt+回车)。 | | 4 | 2023年6月1日 | 时间写法很随意,常见格式都认识。 | 要点: - **第 1 行表头写不写都行**(App 会自动识别并跳过) - **时间列格式很宽松**,以下都能识别: - `2023-05-01 08:30:00`、`2023-05-01 08:30`、`2023-05-01` - `2023/5/1`、`2023.5.1`、`2023年5月1日 08:30`、`20230501` - Excel 的日期单元格(直接就是日期格式的单元格,不用转文字) - 时间戳数字(如 `1718000000`) - 某行时间实在认不出 → 该条会用「导入那一刻的时间」,导入完成后会提示有几条是这种情况,不会丢内容 - 内容列里有逗号、引号、换行都没关系 ### 第 2 步:保存文件 - Excel 里 **文件 → 另存为 → 选 `.xlsx` 格式**(Excel 工作簿)即可 - ⚠️ **不要存成老式 `.xls`**(97-2003 格式),App 不支持,会提示你转存 - 如果你的旧笔记本来就是文本文件,也可以做成 **CSV**(逗号分隔,UTF-8 或 GBK 编码都行);之前从本 App 导出的 **JSON** 也能直接导回 ### 第 3 步:把文件传到手机,任选一种方式 | 方式 | 操作 | |---|---| | 微信(最简单) | 电脑微信发给「文件传输助手」→ 手机微信点开文件 → 右上角 ⋯ → 用其他应用打开/保存,或先「保存到手机」 | | USB 数据线 | 手机连电脑选「传输文件」,把文件拷进手机的 **Download(下载)** 文件夹 | | 网盘 / QQ / 邮箱 | 手机端下载该文件(一般自动存到「下载」目录) | > 建议放到手机的「下载」目录,下一步最容易找到。 ### 第 4 步:在 App 里导入 1. 打开「我的记事本」→ 点右上角 **⋮** → **导入笔记** 2. 弹出系统文件选择器: - 如果直接看到你的文件(「最近」列表)→ 直接点它 - 没看到 → 点左上角 **☰** → 选 **下载**(或你存放的位置)→ 点文件 3. 稍等片刻,弹窗显示结果:「导入完成:新增 X 条,跳过重复 X 条」 ### 放心导:三个安全特性 - **重复导入不怕**:时间+内容完全相同的笔记自动跳过,同一文件导两遍不会重复 - **导入前后随时可导出 JSON 备份**,操作完全可逆 - 导入只是「读」你的文件,不会修改或删除原文件 > 💡 如果你的旧笔记是别的 App 导出的特殊格式(比如备忘录导出的 txt、印象笔记的 enex 等),不知道怎么转成两列表格——把文件发给 Claude Code 看一眼,让它帮你转换或直接写个转换脚本。 --- ## 三、开发环境(本机已全部配好) | 组件 | 位置 | 说明 | |---|---|---| | JDK 11 | `D:\develop\Android Studio\jre` | **构建必须用它**。系统自带 Java 8 太老(编译不了 + HTTPS 证书失效) | | Android SDK | `D:\develop\Android_SDK` | `local.properties` 已指向它 | | adb | `D:\develop\Android_SDK\platform-tools\adb.exe` | 安装 APK 用 | | 模拟器 AVD | `D:\develop\Android_AVD` | 有 Pixel_3_XL_API_28(Android 9)等 | 下载源已换国内镜像(Gradle→腾讯云、Maven→阿里云),首次构建会自动下载 Gradle 7.2 和依赖,之后离线也能构建。 > ⚠️ 不要随意升级 `build.gradle` 里的 AGP / compileSdk 版本——本机 SDK 最高只有 API 31,升级会构建失败。维持现状即可正常开发。 ## 四、常用命令(在项目根目录的 Git Bash 中执行) ```bash # 构建 debug 包(日常开发自测用) JAVA_HOME="D:/develop/Android Studio/jre" ./gradlew assembleDebug # 产物:app/build/outputs/apk/debug/app-debug.apk # 构建正式签名包(装手机用这个) JAVA_HOME="D:/develop/Android Studio/jre" ./gradlew assembleRelease # 产物:app/build/outputs/apk/release/app-release.apk # 安装到手机(手机需开 USB 调试并连接电脑;或直接把 APK 传手机点击安装) /d/develop/Android_SDK/platform-tools/adb install -r app/build/outputs/apk/release/app-release.apk # 启动模拟器测试 ANDROID_AVD_HOME=/d/develop/Android_AVD ANDROID_SDK_ROOT=/d/develop/Android_SDK \ /d/develop/Android_SDK/emulator/emulator.exe -avd Pixel_3_XL_API_28 -no-audio -no-boot-anim ``` 也可以用 Android Studio 打开本项目(File → Open 选项目根目录),直接点绿色运行按钮。 ## 五、发布新版本的标准流程 1. 改代码 2. 打开 `app/build.gradle`,把 `versionCode 1` 加 1(每次发版必须递增),`versionName "1.0"` 按喜好改(显示用) 3. `JAVA_HOME="D:/develop/Android Studio/jre" ./gradlew assembleRelease` 4. 把 `app-release.apk` 装到手机——**覆盖安装,笔记数据完整保留** ### 🔑 签名密钥(重要!) - 密钥文件:`keystore/release.jks`,密码等在 `keystore.properties` - **请把这两个文件备份到网盘/U盘**。以后所有版本必须用同一把钥匙签名才能覆盖安装;钥匙丢了只能卸载重装(先导出 JSON 就不丢数据) - 不要把它们传到公开的 git 仓库(.gitignore 已配置排除) ## 六、想改点什么?代码地图 ``` app/src/main/ ├── AndroidManifest.xml ← 权限、界面注册、备份开关 ├── java/com/romp/realmynote/ │ ├── MainActivity.java ← 列表界面 + 导入导出入口 │ ├── EditorActivity.java ← 写作界面(自动保存逻辑在 save()) │ ├── NoteAdapter.java ← 列表每一行的展示 │ ├── DateFmt.java ← 日期显示格式(想改「2026年6月11日」样式改这里) │ ├── data/ ← 数据库(Note 模型 / 建表 / 增删改查) │ ├── io/ ← 导入导出(CSV/XLSX/JSON 解析与生成) │ │ └── DateParser.java ← 支持的时间格式清单(想多认一种格式在 PATTERNS 加一行) │ └── widget/QuickNoteWidgetProvider.java← 桌面小组件 └── res/ ├── values/strings.xml ← 所有界面文字 ├── values/colors.xml ← 配色(棕色主题改这里) ├── layout/ ← 各界面布局 └── drawable/ic_launcher_foreground.xml← App 图标 ``` 常见小改动速查: | 想做什么 | 改哪里 | |---|---| | 改界面文字 | `res/values/strings.xml` | | 改主题颜色 | `res/values/colors.xml`(primary 是主色棕色) | | 改列表日期格式 | `DateFmt.java` 的 `display()` | | 列表预览多显示几行 | `res/layout/item_note.xml` 的 `maxLines` | | 支持新的导入时间格式 | `io/DateParser.java` 的 `PATTERNS` 数组加一行 | | 改小组件样式 | `res/layout/widget_quick_note.xml` + `drawable/widget_bg.xml` | ## 七、常见问题 | 现象 | 原因与解决 | |---|---| | 构建报 Java 版本错误 / SSL 错误 | 命令前忘了加 `JAVA_HOME="D:/develop/Android Studio/jre"` | | 下载依赖超时 | 检查网络;镜像已配在 `settings.gradle` 和 `gradle-wrapper.properties` | | 手机装不上 release 包 | 手机上已有不同签名的旧版(如 debug 版),先卸载再装 | | 导入 .xls 提示不支持 | 用 Excel 另存为 `.xlsx` 或 CSV 再导入 | | 导入后部分笔记时间不对 | 那些行的时间格式没被识别(导入完成弹窗有提示条数),改成 `2023-05-01` 这类标准格式重导,重复内容会自动跳过 | | Git Bash 里 adb 操作带中文名的文件失败 | Windows bash 编码问题,用通配符代替中文文件名,如 `adb shell 'cp /sdcard/Download/*2026*.csv ...'` | English version: [README_EN.md](README_EN.md) ## 其他文档 - `CLAUDE.md` — 给 AI 助手(Claude Code)看的项目说明,让它日后能快速上手帮你改代码 - `docs/PLAN.md` — 当初的设计方案与功能验证记录 - `testdata/` — 导入功能的测试样例文件(改了导入代码后可用它们回归验证) ## 附录:本项目的 AI 开发记录(供参考) 本项目由 Claude Code(模型 Fable 5)于 2026-06-11 一次会话内完成开发。 ### 用户提示词(按时间顺序,原文) 1. `claude init`(此时目录为空,未生成文档) 2. 核心需求(一段话定义了整个产品): > 我要开发一个个人笔记APP,真正的属于我自己的笔记应用。现在各种笔记应用,都需要登录各家账号,还无法导入导出笔记内容。我想做一个完全本地存储的,便于导入导出的笔记app。内容是纯文本,只关心写作日期和文本内容,就像一个传统一个日记本或者记事本的感觉。目前只考虑支持安卓手机端,要支持创建桌面小组件,快速启动进入写作界面,这是关键。支持导入多种格式的笔记,比如excel,只关心两列,创建时间、笔记内容。支持将所有数据导出为一个文件。当安卓系统自动进行备份时,支持此app的数据备份。 3. 规划阶段问答中的决策:老安卓兼容(问「需要升级吗」)、**Java**、导出 JSON+CSV、手机 Android 8-9 4. 方案确认: > 应用名叫我的记事本,其他的无问题,可以开始开发。上述方案写到本地存档。 5. `请继续`(开发中途) 6. `打包一个 app release 版本` 7. `帮我将相关文档落盘,将来我可能会自己修改打包` 8. `帮我将我给你的提示词,以及你的开发此应用消耗的token、时间,写到 readme 中,以供参考` 9. 导入格式说明前置到文档前部,并求助如何导入旧笔记(即本章第一节的由来) ### 耗时(按文件时间戳与模拟器截图时间推算) | 阶段 | 大致时间 | 用时 | |---|---|---| | 需求澄清 + 环境探测 + 方案设计 | ~09:00–09:20 | ~20 分钟 | | 全部代码编写(数据层/UI/小组件/导入导出引擎) | 09:20–09:45 | ~25 分钟 | | 首次构建(含解决 JDK 证书、国内镜像两个环境问题) | 09:25–09:45 | (与编码并行) | | 模拟器端到端验证(写作/小组件/三种导入/两种导出/备份恢复) | 09:45–10:10 | ~25 分钟 | | 文档编写(CLAUDE.md / PLAN.md) | 10:10–10:15 | ~5 分钟 | | release 签名打包 + 冒烟测试(第二轮对话) | 10:15–10:20 | ~5 分钟 | | README 维护手册(第三轮对话) | ~10:25 | ~5 分钟 | **端到端约 1.5 小时**:从空目录到「功能全部实测通过的签名 release APK + 全套文档」。 ### Token 消耗(估算值) > 注:AI 无法读取自身会话的精确计费数据,以下为按会话规模的估算;精确数字可在 Claude Code 中用 `/cost` 命令查看。 - 工具调用约 90+ 次(写文件 ~40、命令执行 ~35、模拟器截图 12 张) - **输出 token**(生成的代码、文档、命令):约 8–10 万 - **输入 token**:累计数百万级(每轮对话会重复携带上下文 + 截图按图像计费,但绝大部分命中提示缓存,实际成本远低于名义值) - 代码产出:18 个 Java/XML 源文件 + 14 个资源文件,约 2200 行 ### 经验备注 - 一段清晰的需求描述(提示词 2)+ 四个关键决策(提示词 3)就足以驱动完整交付,后续几乎无需返工 - 全程零人工写码;环境问题(旧 JDK 证书失效、Gradle 官方源超时)由 AI 自行诊断并切换镜像解决 - 验证不是「编译通过」而是真机级走查:模拟器上实际点击、导入构造的测试文件、`bmgr` 备份后清数据再恢复