引言
我用Kindle已经有相当一段时间了,但是一直有个遗憾就是Kindle并不能详细记录你的阅读时长,于是就一直想要开发一个Kindle上的阅读插件。
在百度贴吧中找到有人做过原型插件: https://github.com/KangbingZhao/kykky
但是这个插件只实现了查看今天,昨天,本周和当月的阅读时长,感觉功能有些过于简陋:

于是下定决心自己做一个功能更强大,数据更全面的阅读时长统计插件:
原生性能:基于 GTK 编写,C 语言驱动,无后台常驻,零额外功耗。
深度数据:支持日历视图、时段详情,精准记录每一本电子书的陪伴时间。
极小占用:支持日志压缩算法,数年的阅读数据仅占几 KB 空间。
一键分享:支持生成精美统计图表,让你的阅读成果跃然屏上。
仓库链接如下:
https://github.com/TQHYG/kykky
https://github.com/TQHYG/kindle-reading-gtk
安装教程与功能介绍
首先你需要给你的Kindle越狱,参见 https://bookfere.com/post/406.html
本插件依赖于KUAL插件启动器,你需要安装KUAL:https://bookfere.com/post/311.html#p_2
下载插件目录基本文件:https://github.com/TQHYG/kykky/releases/latest
把这些文件解压到Kindle插件目录中,看起来像这样:

下载插件主程序文件:https://github.com/TQHYG/kindle-reading-gtk/releases
- 固件版本低于 5.16.3 请下载 kindle-reading-gtk_kindlepw2
- 固件版本高于 5.16.3 请下载 kindle-reading-gtk_kindlehf
下载完毕后把文件重命名为 kindle-reading-gtk 并放到插件目录的bin子目录中,看起来像这样:

随后从电脑上弹出Kindle,打开KUAL后应该能看到阅读统计插件的按钮,点击后会打开主界面,先点击更多,启用阅读统计:

可能需要重启一次Kindle才能使更改完全生效。启用后插件是利用系统的日志功能记录阅读数据,不会驻留在后台运行,因此不用担心资源占用与耗电的问题。
大部分功能都是所见即所得,附上几张截图:





另外,点击右上角的X就能退出应用,在日历界面点击日期就可以跳转到那一天的时段详情。
数据备份的话只需要备份插件目录下的log文件夹就可以完整备份你的阅读数据了。
同时也提供了一个网站允许你更方便的分享数据:
在插件的分享功能里扫码也是打开这个网站,方便你迅速的分享最近的阅读数据。
如果使用中遇到什么Bug或者想要加什么新功能都可以提issue:https://github.com/TQHYG/kindle-reading-gtk/issues
插件开发小记
基本原理
Kindle系统的窗口管理器会记录每个时间点打开的是什么窗口,打开了多少时间,通过修改系统的 syslog-ng 设置将阅读窗口打开的相关日志记录到插件目录下,这些日志看起来像这样:

我们从里面提取出时间戳和持续时间就能知道阅读时长了。
关于开发环境的搭建
这部分是参考Kindle Modding Community上的信息搭建的,其实出乎预料的简单:
https://kindlemodding.org/kindle-dev/gtk-tutorial/prerequisites.html
以下是中文复述:
环境准备 (Prerequisites)
操作系统要求
- 您需要运行 Linux 操作系统(或 Windows 下的 WSL/msys2)。
- MacOS 未经测试,但理论上可能可行。
设备要求
- 您需要一台已越狱的 Kindle。
- 您需要明确了解 Kindle 当前运行的固件版本。
开发工具要求
- 您需要为您的设备编译专门的交叉编译工具链 (Toolchain),具体细节见下文。
- 您的系统中需要安装以下软件包以支持工具链编译:
git,ncurses,gperf,help2man,bison,texinfo,flex,gawk,unzip,wget
- 安装 SDK 需要:
curl和sed。 - 针对本项目(Kindle Reading GTK)额外需要:
meson,gtk2(包含开发头文件), 基础编译工具链。
安装必要软件包
对于 Arch Linux
# 用于工具链编译
sudo pacman -S base-devel curl git gperf help2man unzip wget
# 用于 SDK 安装
sudo pacman -S curl sed libarchive nettle
# 用于本项目开发
sudo pacman -S meson gtk2
对于 Debian/Ubuntu
# 用于工具链编译
sudo apt-get install build-essential autoconf automake bison flex gawk libtool libtool-bin libncurses-dev curl file git gperf help2man texinfo unzip wget
# 用于 SDK 安装
sudo apt-get install curl sed libarchive-dev nettle-dev
# 用于本项目开发
sudo apt-get install meson gtk2.0 libgtk2.0-dev
编译工具链 (Building The Toolchain)
提示: 如果您不想自己手动编译工具链,或者在编译过程中遇到困难,可以使用现成的预编译版本 (Pre-built Release)。
克隆工具链仓库:
git clone --recursive --depth=1 https://github.com/koreader/koxtoolchain.git
为您的设备编译工具链:
cd koxtoolchain
chmod +x ./gen-tc.sh
./gen-tc.sh <target>
请根据下表将 <target> 替换为对应的目标:
| 代号 | 支持的Kindle型号 | 目标 |
|---|---|---|
| kindle | Kindle 2, DX, DXg, 3 | [not supported by this tutorial] |
| kindle5 | Kindle 4, Touch, PW1 | [not supported by this tutorial] |
| kindlepw2 | Kindle PW2 & everything since on FW <5.16.3 | kindlepw2 |
| kindlehf | Any Kindle on FW >= 5.16.3 | kindlehf |
如果您想支持多种 Kindle,可以多次运行 ./gen-tc.sh <other_target>,新的工具链将自动添加到您的 ~/x-tools 目录下。
在大多数 PC 上,每个目标的编译通常需要约 30 分钟。
配置 SDK (Setting up the SDK)
KMC Kindle SDK 通过提供 Kindle 使用的头文件和库文件,对已安装的 koxtoolchain 进行增强。
克隆 SDK 仓库:
git clone --recursive --depth=1 https://github.com/KindleModding/kindle-sdk.git
为目标设备安装 SDK:
cd kindle-sdk
chmod +x ./gen-sdk.sh
./gen-sdk.sh <target>
这里的 <target> 必须与您之前安装的工具链目标保持一致。
重要提示:当 SDK 安装完成后,请务必记录下它返回的 meson-crosscompile.txt 文件的路径,这在后续的编译步骤中至关重要!
开发环境设置完毕后使用这里的说明设置meson项目环境,基本上就像正常使用meson开发C/C++项目那样: https://kindlemodding.org/kindle-dev/gtk-tutorial/setting-up.html
其他需要注意的点就是Kindle上开发的应用窗口标题需要遵循一定的格式,否则可能窗口无法显示或者不符合预期:
https://kindlemodding.org/kindle-dev/awesome-window-manager
其他
很多时候也是在使用的时候才发现问题并优化,例如说日志中有大量文本,随着使用时间的增加,占用的空间也是越来越多,不过这些日志的显著特征是拥有大量重复文本,因此我设计以月份为单位,合并和压缩日志文件,最终效果是这样:

压缩效果还是很好的,并且也不会因为压缩而丢失数据。
结语
开发这个插件的初衷,是为了弥补 Kindle 原生系统在数据统计上的缺失。但在开发过程中,我发现这件事的意义远不止于“记录数字”。
Kindle 是一款神奇的设备,在快节奏的今天,它强迫我们静下心来。而通过这些直观的阅读曲线和热力图,我能清晰地看到自己为了对抗信息碎片化所付出的努力。每一份压缩后的日志,都是一段沉静时光的证明。
目前插件已经实现了核心的统计与分享功能,但它仍有很大的想象空间。作为一个开源项目,我非常欢迎各路极客朋友来提 Issue 甚至贡献代码。如果你在使用过程中发现了 Bug,或者有更棒的想法,请务必告诉我。
希望这款插件能陪你读完更多的好书。毕竟,量化阅读不是目的,保持阅读的习惯才是。
除非注明,否则均为天远日记原创文章,转载必须以链接形式标明本文链接
Comments NOTHING