把柔记手写本搬上 Windows 桌面:由来、用法,以及怎么用日志帮我改程序
把柔记手写本搬上 Windows 桌面:由来、用法,以及怎么用日志帮我改程序
工程:
rowrite-unity|Unity 2021.3.45f2c1|Windows 桌面端|写于 2026 年 11 月
手上有一台柔记(RoWrite)手写本,真机编号 RY08622526208,固件 1.1.0。配套的官方应用是安卓 App(包名 com.royole.rydrawing,版本 4.2.6):在纸上写字,手机通过蓝牙收点,再在屏幕里把笔迹重建出来。
我想要的其实很简单:在 Windows 电脑上直接连这台本子,纸上写、屏幕上出字,不要账号、不要云、不要手机中转。于是有了这个小工程。这篇文章讲三件事:它怎么来的、怎么用、以及出了问题怎么把日志给我,让我能真正把它改好。
一、项目是怎么来的
从一个 APK 开始
没有协议文档,也没有桌面端开发包,唯一的资料就是那个 90 多兆的 rowrite.apk。做法很朴素:用 jadx 反编译,把里面跟蓝牙、点数据、页同步有关的类一个个读出来,边读边写成工程里的三份文档:
| 文档 | 内容 |
|---|---|
Doc/rowrite_ble_protocol.md |
服务与特征 UUID、帧格式、命令码、实时点结构、长包重组 |
Doc/rowrite_features.md |
官方 App 的功能清单,以及「哪些做、哪些不做」 |
Doc/rowrite_apk_vs_unity_audit.md |
把 C# 实现逐条对回反编译的 Java 源码,查有没有译错 |
蓝牙底层复用现成的 BleWinrtDll 负责 Windows 上的扫描、连接和通知订阅;上面整套协议、点流解析、笔画重建、界面和本地存储,都是用 Unity 的 C# 重写。界面不走预制体,全部用 uGUI 代码搭出来。
范围:只做「连上、收点、重建、存下来」
官方 App 里有登录注册、云同步、商城、手写识别、社交分享、皮肤……这些都不在本工程里。现在的产品模型只有一句话:
纸面书写 → 手写本经蓝牙把点流 / 离线页送过来 → Unity 只负责重建显示,笔记存本地 SQLite。
所以没有账号,没有联网,关掉程序数据也在本机。导出时读的是数据库,不是云。
几个靠真机一点点磨出来的坑
写这个工程最花时间的不是界面,是「点怎么变成字」:
- 一个点 10 字节:坐标 X、Y、压力、时间,全是大端。压力
p > 0是落笔墨点,p = 0是抬笔后的悬浮点。悬浮点必须丢掉,不然字与字之间会被抬笔移动轨迹连成一条长线。 - 画布尺寸不能自己拍脑袋:反编译看官方
DrawingView,纸面是1080 × 1512。设备量程最终定为9400 / 13160,和画布一样是5:7,X、Y 用同一个系数,圆才是圆的。最初用理论值9035 / 12649,真机一写到右边缘,点就被钳到画布边界、笔锋被裁掉半边,改成现在这组值才完整。 - 固定线性映射,不做自适应:设备点直接按量程线性映射到纸面。自适应听起来聪明,但会把「纸上在哪」变成「猜你在哪」,反而对不准。
- 离线页是长包:一个页数据要分片重组、还要还原压缩过的点序列,这部分对着反编译源码逐行校对过。
现在真机能实时写、能拉离线页、能存能导出。剩下的边角,就靠日志慢慢修。
二、程序怎么用
跑起来
两种方式:Unity 编辑器里点 Play,或者直接双击打包好的 Builds/柔记/柔记.exe。Windows 上先打开蓝牙、唤醒手写本(笔按下或按设备键),第一次需要手动连一次。
主界面上方三个页签:笔记 / 设备 / 设置。
第一步:连设备
进「设备」页:
- 点「开始扫描」,列表里出现手写本后点它,再点「连接」。
- 「查询信息」可以看到设备名、电量、固件版本、存储和页数。
- 连过一次之后,启动程序会自动连上次那台:一般几秒,最多二十来秒,连接提示是轻提示,不挡操作;失败可以在设备页手动重连。
设备页第二行还放着模式与工具按钮:「切实时模式」「切同步模式」「进入画布」「调试日志」,第三节会专门讲最后一个。
提醒:界面上保留的「格式化设备 Flash」是调试用的破坏性命令,会清空手写本自己存的笔记,带二次确认,只在排查硬件异常时才用,没事别点。
第二步:实时书写
点「进入画布」(或先「切实时模式」再进)。这时候在纸上写字,笔迹就实时出现在屏幕上。
- 悬空有光标:笔尖没压到纸面时,屏幕上有个小圆点跟着笔走;一落笔就隐藏,写着写着不挡视线;笔离开感应区几秒后也会自动收起。
- 底栏四个按钮:笔型(钢笔 / 铅笔 / 马克笔 / 毛笔)、颜色、粗细、保存。颜色 / 粗细弹窗点空白处即可关闭。
- 不用惦记保存:从编辑页返回时自动保存,直接关程序也会先把当前笔迹落库。
- 笔也能当鼠标用:在纸面任意位置长按约 1 秒弹出类似右键菜单的一级选项(笔型 / 颜色 / 粗细);抬笔悬空移到某一项上停约 1.2 秒展开二级;在二级项上停约 1.5 秒确认。笔离开感应区就取消。当然,直接用鼠标点菜单项也能立刻选中。
第三步:离线页同步
手写本自己会存页。先点「切同步模式」,再点「同步到本地」,设备里已存的页会拉下来生成一篇本地笔记(标题前缀是「设备同步」),中途可以「取消同步」。同步用的量程、翻转、页号起点等参数放在 sync_config.json 里,改完点「重载配置」立即生效;编辑屏要重新进入才会读到新配置。
第四步:笔记与导出
回「笔记」页:可以搜索标题、按分类筛选、点「+ 新建」建空笔记、给笔记加星标、点卡片继续编辑;删除会先弹确认,避免误删。
编辑页右上角「⋯」打开「更多操作」:
| 操作 | 说明 |
|---|---|
| 重命名 | 改笔记标题,即时写库 |
| 清除实时预览 | 只清当前预览层,不动已存笔记 |
| 导出 PNG / JPG / PDF / TXT | 输出到 StreamingAssets/Exports/,成功后自动打开。工程里是 Assets/StreamingAssets/Exports/,打包版是 柔记_Data/StreamingAssets/Exports/ |
PNG、JPG 是每页一张图,PDF 是多页合一本,TXT 只有笔记结构和页 / 笔统计(没做手写识别,所以没有文字内容)。导出读数据库,所以刚写完还没保存的实时笔迹,先点一下「保存」再导出。
「设置」页的「关于」里有版本号、我的邮箱和作者网站。
目前的边界
不含登录、云同步、手写识别、社交分享;导出不含未落库的实时笔迹;设置页的「画布尺寸」选项目前还是个独立开关,没接进会话;笔控菜单的长按 / 悬停时长也还在真机复测中。这些不是「隐藏功能」,是还没做完,欢迎顺手反馈。
三、怎么拿到日志,帮我改程序
为什么日志特别有用
这个工程有一台真机,但固件、批次、电脑蓝牙环境各家不同。很多问题在代码上看起来一模一样,日志里却分得很清楚:是没连上、连上了没订阅到通知、收到点了但压力全是 0、还是坐标映射偏了。
现在有几个参数就是靠日志改出来的:右边缘笔迹裁切,是从日志里看到设备点最大到 X=9068 / Y=12739 才把量程放宽的;笔控菜单的长按时长和抖动半径,是先加了一段临时探测日志,测出悬浮点约 260 点/秒、落笔静止抖动半径只有 6 个设备单位,才敢把长按从 1.6 秒缩到 1.0 秒;自动连接的等待时间,也是对着连接日志和「等太久」的实际反馈一点点压下来的。
所以一份日志,往往就能直接指出「该改哪一行」。
最省事的办法:设备页的「调试日志」按钮
设备页 → 第二行「调试日志」
点一下,资源管理器会打开日志所在目录,并选中那个日志文件;完整路径同时复制到剪贴板,界面上也会弹一条轻提示。程序里所有诊断信息都走 Unity 的日志接口,没有另写日志文件,所以这一个文件就够了。
手动找也行
| 运行方式 | 位置 |
|---|---|
| Unity 编辑器(含点 Play) | %LOCALAPPDATA%\Unity\Editor\Editor.log |
打包版 柔记.exe |
%USERPROFILE%\AppData\LocalLow\xuefei\柔记\Player.log |
| 编辑器 Play 的数据 / 配置目录 | %USERPROFILE%\AppData\LocalLow\Unity\xuefei_柔记\ |
如果启动时用了 -logFile 指定别的位置,按钮会优先认程序自己报的路径。
日志很大,别整份贴过来
Editor.log / Player.log 动辄几兆。用记事本或任意文本编辑器打开,按出问题的时间点往下翻,搜 [RoWrite(离线页同步另搜 [Sync])就能筛出本工程的记录。常用的几类前缀:
| 前缀 | 看什么 |
|---|---|
[RoWrite BLE] |
扫描、连接、通知订阅、工作模式切换 |
[RoWrite RX] |
收到的数据包、首批实时点、长包尺寸异常 |
[RoWrite 设备信息] |
电量 / 固件 / 存储查询、读页探测结果 |
[RoWrite 画布] |
预览笔迹、点范围、量程相关诊断 |
[RoWrite 笔控] |
长按触发、光标命中、菜单进度 |
[Sync] |
离线页同步:取页、页数查询、落库、内存水位 |
[RoWrite 导出] / [RoWrite 保存] |
导出、自动保存与落库结果 |
反馈时把这些一起给我
可以直接照这个模板:
设备编号(SN)/ 固件:RY08622526208 / 1.1.0
产品型号(见机身铭牌或包装,程序不显示):RO-F930-A
运行方式:打包 exe 1.0(或 Unity 编辑器 Play)
Windows 版本:
问题描述:
复现步骤:1. … 2. … 3. …
出问题的大概时间:20:03 左右
日志片段:(问题前后约 30 秒,含 `[RoWrite` 前缀的行)
附件:sync_config.json、截图或录屏
sync_config.json 值得单独附一份,量程、翻转、页号起点都在里面,路径和上表的数据目录一致:打包版在 AppData\LocalLow\xuefei\柔记\,编辑器在 AppData\LocalLow\Unity\xuefei_柔记\。
隐私提醒:日志里会出现设备名、本机文件路径、笔记标题,发之前扫一眼,把不想公开的删掉;日志只记坐标和统计,不含纸面图像,但截图里如果有手写内容,自己先掂量一下。
发到邮箱 awnuxcvbn@163.com,或者到 https://www.xuefei.net.cn 留言都行。
最后
这不是一个「移植完就结束」的项目,更像一台还在调的机器:真机只有一台,我遇到的情况有限。连不上、笔迹偏了、菜单弹出慢半拍、导出少一页——这些在你那边是「不好用」,在我这边只要有日志,就是能定位、能改、能写进下一版的具体问题。
按一下「调试日志」,把那几行贴给我,就是最直接的帮忙。