koreader 中文文档 下载 App

用户补丁(User Patches)—— KOReader 深度定制

什么是用户补丁

用户补丁是 KOReader 最强大也最危险的定制功能——允许你直接修改 KOReader 内部的 Lua 代码逻辑。如果说配置文件是"调参数",用户补丁就是"改代码"。

两者的区别:

维度配置文件用户补丁
作用调整预设参数修改/替换内置 Lua 逻辑
难度简单(界面操作)高(需要 Lua 基础)
影响范围单本书/某类书KOReader 全局行为
风险无(坏了重新调)可能导致 KOReader 崩溃

新手跳过此页。只有在你觉得"KOReader 默认行为哪里都对但就差一点点"时才需要用户补丁。

用户补丁的存储位置

补丁文件放在 KOReader 配置目录下的 patch/ 子目录,通常是 .patch、.diff 或 .lua 文件。

安装社区补丁

第一步:找到补丁

KOReader 社区维护了补丁库——GitHub issues 中搜索 "user patch" 或去 MobilRead 论坛的 KOReader 专区。常见补丁类型:

补丁类型作用
刷新频率调整改变墨水屏刷新策略
翻页动画替换默认翻页效果
菜单定制增加/隐藏菜单项
排版算法修改流式重排引擎
新手势新增手势映射
快捷键新增键盘快捷键

第二步:放置补丁文件

把补丁文件复制到 KOReader 配置目录的 patch/ 子目录。

第三步:重启 KOReader

重启后进入「设置 → 用户补丁」:

自己写补丁

KOReader 是 Lua 编写的,补丁本质是 Lua 模块的重载或 monkey-patching。

示例:禁用双指滑动手势

-- patch/disable_two_finger_swipe.lua
local Device = require("device")
local originalGesture = Device.EventListener.onTwoFingerSwipe
Device.EventListener.onTwoFingerSwipe = function(self, gesture, direction)
    -- 什么都不做,覆盖默认行为
end

把上面的代码存为 patch/override_gesture.lua,启用后 KOReader 的双指滑动就失效了。

补丁调试技巧

启用日志

在 KOReader 设置中启用开发者模式,开启详细日志。补丁崩溃时日志会明确告诉你哪个文件哪一行出了问题。

逐步添加代码

不要一次把 200 行补丁放进去——先加 10 行看能不能跑,再逐步扩展。

对比原生行为

补丁前先在无补丁状态下确认 KOReader 能正常工作。补丁生效后如果行为变了,说明补丁在起作用——不管是对是错。

风险与备份

风险:用户补丁是 Lua 代码,直接执行,有 bug 就会导致 KOReader 不稳定、崩溃、甚至无法启动。

必须做的事:

  1. 备份配置目录:放补丁前先把 KOReader 配置目录整体复制到电脑
  2. 一个补丁一个文件:出问题时容易定位
  3. 新补丁先单启用:逐个启用,一次一个,找出是哪个有问题
  4. 先读代码再启用:不要启用看不懂的补丁

补丁导致 KOReader 无法启动怎么办

这是最坏情况,但一定能救回来:

  1. KOReader 启动前会尝试加载 patch/ 目录下所有补丁
  2. 补丁有 bug → KOReader 启动时崩溃 → 循环崩溃 → 无法进入界面
  3. 修复方法:用文件管理器(USB 连接/KOReader SSH/SFTP)进入 KOReader 配置目录 → 删除问题补丁文件 → 重启 KOReader

所以一定要一个补丁一个文件——删哪个一目了然。

与插件的区别

维度用户补丁插件
定位替换内部逻辑增加新功能
稳定性可能影响全局模块化,崩溃隔离
更新随 KOReader 更新可能失效随 OTA 一并更新
推荐度仅进阶用户所有用户

常见问题

补丁随 KOReader 更新会失效吗?

可能。KOReader 的 Lua 代码结构会随版本变化——补丁引用的模块名、函数签名可能变了。如果补丁让新版本 KOReader 崩溃,去社区找对应新版本的补丁。

多个补丁冲突?

可能。如果两个补丁都替换了同一个内部函数,只有后加载的那个生效。解决方法:合并补丁,或改用插件系统。

能不能在 Kindle KOReader 上用?

可以。用户补丁是 Lua 层面的,不受平台限制——只要 KOReader 支持该 Lua 模块。

继续阅读