KOReader插件开发教程:三步做出你的第一个自定义插件

KOReader插件开发教程:三步做出你的第一个自定义插件 KOReader插件开发教程三步做出你的第一个自定义插件【免费下载链接】koreaderAn ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices项目地址: https://gitcode.com/GitHub_Trending/ko/koreaderKOReader是一款支持EPUB、PDF、FB2等格式的开源电子书阅读器它的插件系统让你不用改一行阅读器源码就能给设备加上自己想要的功能。这篇文章带你走完一个最小插件的完整流程并讲清楚菜单注册背后的机制与常见坑适合刚装好 KOReader、想自己动手扩展功能的新手。 快速认识插件是什么、放在哪里一个 KOReader 插件就是一个独立目录名字必须以.koplugin结尾。默认情况下它放在阅读器安装根目录的 plugins/ 里开机时会被自动扫描加载。一个插件最少由两样东西组成main.lua主程序存放插件的实际逻辑_meta.lua元数据元数据就是描述插件的小配置声明名字、版本、简介。官方仓库自带三十多个插件从自动翻页到云存储都有它们是最好的参照物。三步写出第一个弹出提示插件下面用弹出一句 Hello这个最小目标把 KOReader 插件入门的完整链路走一遍。第一步建目录在plugins/下新建目录hello.koplugin。注意后缀不能省——插件加载器见 frontend/pluginloader.lua按*.koplugin这个命名规律扫描目录少一个字符它就不会看你一眼。第二步写元数据与主程序_meta.lua只需返回一个表return { fullname Hello, description 我的第一个 KOReader 自定义插件, }main.lua是最小的主程序。它返回一个表里面有两个方法init在插件被加载时调用addToMainMenu负责往主菜单里放一个条目callback是回调callback 即用户点了菜单项之后被调用的函数local InfoMessage require(ui/widget/infomessage) local UIManager require(ui/uimanager) local Hello { name hello } function Hello:init() self.ui.menu:registerToMainMenu(self) end function Hello:addToMainMenu(menu_items) menu_items.hello { text Hello, KOReader, callback function() UIManager:show(InfoMessage:new{text Hello, world!}) end, } end return Hello功能说明init里那一行registerToMainMenu就是菜单注册本身——把你的插件登记到主菜单系统名下InfoMessage和UIManager负责在屏幕上弹出提示。第三步部署到设备并验证把整个hello.koplugin目录拷进设备的plugins/重启 KOReader。打开主菜单你应该能看到Hello, KOReader这一项点一下屏幕中央弹出提示。至此 KOReader 插件注册的完整链路你已经亲手跑通了。原理回看菜单是怎么调用到插件的把刚才的过程拆开看注册流程实际做了五件事启动时加载器扫描plugins/挑出所有*.koplugin目录require每个插件的main.lua拿到它返回的表若表里带disabled true就跳过——官方自带的 hello 示例插件 默认就是被这样禁用的想体验它需要去掉那段开关加载器调用插件的init()插件在其中完成菜单注册你打开主菜单时菜单系统调用各插件的addToMainMenu()把它们返回的条目表合并进菜单。表里键名决定条目text是显示文字sorting_hint决定它插在哪一级菜单下你点击Hello, KOReader菜单系统执行的就是那个callback于是UIManager把InfoMessage显示出来。所以注册不是某个一次性的大动作而是开机登记 每次开菜单时按需取条目 点击时执行回调这三段拼起来的。扩展方向从弹出提示到真正干活弹出提示只是热身。KOReader 提供的模块基本都能被插件复用常见扩展方向有四个UI 组件InfoMessage弹提示、ButtonDialog弹按钮对话框、InputDialog收集输入、Menu搭自定义菜单页全部在frontend/ui/widget/下现成可用事件处理通过Dispatcher:registerAction注册自定义动作就能被键盘快捷键或手势插件绑定触发。默认触摸区域划分见下图理解它能帮你判断用户点的是翻页还是菜单文件操作用lfs文件系统库读写、移动、备份文件实现归档同步类功能网络请求用httpclient调 HTTP 接口opds 插件就是靠它从 OPDS 目录拉取书单的。避坑菜单注册的三个常见错误坑一目录名没写对后缀。插件不存在于插件管理页面多半是目录不叫*.koplugin。排查对照加载器要求检查目录名而不是先怀疑代码。坑二main.lua语法错误导致整个插件没加载。现象是菜单项不出现、也没有报错。排查看设备的koreader.log加载失败时堆栈会指向具体文件和行号。坑三require的模块路径拼错。比如把infomessage写成inomessage。排查报错行会直接写出缺失的模块名不确定路径时直接复制官方 hello 插件里的require行。另外提醒一点复杂插件常用return { disabled true }作为默认开关hello 插件就用了这个技巧自己发布插件时保留一个开关用户不用删文件就能禁用它。发布前自查清单目录名以.koplugin结尾且放在plugins/下_meta.lua返回表fullname和description都填了main.lua最后一行是return把插件表交还给加载器init()里调用了registerToMainMenu菜单项能出现在正确位置callback里包了必要的错误处理异常不会让阅读器崩溃在目标设备上完整跑过一遍并确认日志无报错。先别惦记大功能——把弹出提示跑通再去plugins/里挑一个最接近你目标的现成插件读懂它的注册流程改成自己的。KOReader 插件开发的路径就是这样小步验证边抄边懂。【免费下载链接】koreaderAn ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices项目地址: https://gitcode.com/GitHub_Trending/ko/koreader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考