深夜提醒

现在是深夜,建议您注意休息,不要熬夜哦~

🏮 🏮 🏮

新年快乐

祝君万事如意心想事成!

share-image
中
ESC

微信读书会员到期,我给自己写了个墨水屏阅读器

10 月 2 日,我的微信读书会员到期了,我没续。

不是舍不得那点钱,而是我在墨水屏上用它的每一次,都在跟它较劲:想划线,得跟两个小圆点手柄打架;想知道自己读了多少,它连个数据页都没有。

会员到期的第二天,我把攒了半个月的念头落了地——给自己写了个墨水屏阅读器。

书架

微信读书在我的汉王上难用在哪

我的阅读设备是汉王 Clear7(HANVON P7):7 寸墨水屏,Android 14,1264×1680。用它看微信读书,有两件事特别难受。

一是没有阅读数据页。 看了多久、这个月比上个月多读了多少、今年累计读了多少小时——墨水屏版里一概看不到。手机版有,墨水屏版没有。翻页翻得挺热闹,回头一想,没有任何东西能证明我读过。

二是划线不能按句子、按段落来。 墨水屏和手机不一样:刷新慢、有残影,手指去拖那个选区手柄是“按住—等—再按住—再等”的体验。我只想表达“这句话我要划下来”,结果每次都在跟手柄较劲。而且它的选中范围时大时小,划歪了还得重来一遍。

我的需求其实很朴素:点一下,把这句话划下来;抬个头,能看见自己这周读了几小时。

于是我自己写了一个

给这台机器写了个阅读器,包名 com.awen.ereader。顺手把汉王自带的那套桌面和阅读器也换掉了(随时能切回去,没动系统里的东西)。

现在书架里 63 本:已读 35、在读 1、未读 27。epub 的封面直接从书里抽,txt/md 就按书名生成一张排版封面;未读/在读/已读三个选项卡;长按一本书能标记已读、导出笔记、移出书架;侧面那对翻页键在书架里是挪光标的。

几个实现上的取舍,都是被这台机器逼出来的:

  • 不引 gradle。一台自用的墨水屏阅读器,没必要背一整套 Android 构建系统:aapt2 + javac + d8 + zipalign + apksigner 五步,./build.sh 一条命令出 APK,不联网拉依赖,改一行字重新装上去只要十几秒。
  • epub 自己解。zip → META-INF/container.xml → opf → spine,顺手把 dc:title、dc:creator 和每章标题读出来。txt 一律 UTF-8 严格解码,失败就退 GB18030(中文老书很常见)。
  • 排版用 StaticLayout 按屏切页:字号 12–40、行距、段间距、边距、首行缩进、两端对齐、白纸/米色/夜间三种背景、自定义字体,改完立刻生效且停在原位。

墨水屏不是普通屏幕

写这个 app,有一半时间不是花在功能上,而是花在伺候这块屏上:

  • 它刷新慢,还留残影。所以书架滚动期间完全不整刷,停稳 2 秒才整刷一次,6 秒内最多一次;翻页则攒够 6 页才做一次整屏刷新。
  • 侧面的翻页键,在系统眼里就是音量键。默认按一下弹一个巨大的音量框,在墨水屏上要刷两遍、还留一屏残影。现在这两个键被 app 吃掉:书架里挪光标,阅读时翻页,再也不弹音量条。
  • 另留了一个「整屏刷新」键(KEYCODE_REFRESH),哪一页看着不爽,按一下刷干净。
  • 阅读页一律不弹提示条。圆角白底加 app 图标那种 toast,在墨水屏上看着像系统通知,既压正文又留残影——加书签、划线、存笔记、复制,做完就是做完了,没有“已加书签”。

划线:点一下,剩下的交给句子

这是我最想解决的一件事。现在的流程是这样:

  1. 长按正文,只选中按住的那一个字/词(用 Android 自带的 ICU 分词,“显微镜”不会拆成“显微/镜”);
  2. 操作条上有两个按钮:整句 / 整段,按下去自动把选区撑到整句或整段;
  3. 短按「划线」直接划(沿用上次的线型),长按才把线型/颜色那张卡调出来。

阅读页

划线直接画在正文上,跨行贴合;点已划线的地方能看摘录和笔记,也能删。查词也在这一套里:拼音读音离线出(系统 ICU 的 Han-Latin,不联网不等),释义和中英互译交给模型——离线或者没配模型,读音照样显示。

我给它加了个数据页

数据页

累计阅读时长、今天读了多少、日/周/月/年切换的柱状图。就是我在微信读书墨水屏版里始终找不到的那一页。

书从哪来

趁着会员还没到期,我把想看的书搬了出来:写了个浏览器扩展抓微信读书网页版的正文,落成 markdown,再转成 epub,推到我自建的一台机器上(Rust 写的同步服务,零第三方 crate,签名和凭据信封都是自己实现的)。阅读器打开就同步,进度、笔记、书签一起同步。

所以 10 月 2 日会员到期的时候,我的书架已经搬完了。

顺手修掉的三个毛病

写这篇文章要截图,结果截图的时候又被自己写的东西气到,顺手修了三个:

  1. 「整句」会切在右引号上。书里常写“自己要做一个‘好的恋人’,也要去找一个‘好的恋人’”,原来的逻辑把右引号也当成句末标点,于是整句只选到 “好的恋人” 就断了。现在的规则是:先扫到真正的 。!?,再把后面的收尾引号一起带走。
  2. 「段间距 0」照样空一行。设置里写着 0 = 段落紧贴,可代码遇到 0 直接返回,空行照样占一整行——怎么拉都去不掉。读《为何家会伤人》时段落前面那条莫名其妙的空行,就是它。
  3. 中英之间的空格是乱的。这本 epub 是 PDF 转出来的,正文里到处是“自己总 算看到”“一 个月后”这种被塞进去的空格。现在中文和英文之间固定留一个空格(换iPhone4 → 换 iPhone4),中文之间、中文和全角标点之间的空格全部删掉——光这一本就清掉一百多个。

现在的状态

  • 书架 63 本,正在读《为何家会伤人》(升级版),10%。
  • 朗读默认关着:豆包语音合成 2.8 元/万字符,一本 28 万字的书从头念到尾差不多 78 元,比会员贵。代码留着,想听了改个开关就能用回来。
  • 还没有的:pdf / mobi / azw3、全文搜索、生词本。

微信读书我还会用,用来看书评和别人划的线。但**“在自己的墨水屏上,点一下就把这句话划下来,抬个头还能看见自己读了多少”**这件事,我决定自己动手。

文章作者:阿文
文章链接: https://www.awen.me/post/a7f3c1e9.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿文的博客!

评论

0 条评论
😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️✋ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐⛎ ♈♉♊ ♋♌♍ ♎♏♐ ♑♒♓ 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘❌⭕ 🛑⛔📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭❗ ❕❓❔ ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️✅ 🈯💹❇️ ✳️❎🌐 💠Ⓜ️🌀 💤🏧🚾 ♿🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️
加载中...

留言反馈

😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️✋ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐⛎ ♈♉♊ ♋♌♍ ♎♏♐ ♑♒♓ 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘❌⭕ 🛑⛔📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭❗ ❕❓❔ ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️✅ 🈯💹❇️ ✳️❎🌐 💠Ⓜ️🌀 💤🏧🚾 ♿🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️