>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Kotlin

如何用 Kotlin 构建 QuickNovel 网络小说阅读器

亚洲轻小说和 Royal Road 上英文小说的粉丝们经常面临同样的问题。通过手机浏览器阅读网络小说非常不便:页面充斥着各种横幅广告,弹出自动播放的视频,甚至在地铁里没有网络连接就无法打开章节。

QuickNovel 项目试图从根本上解决这个问题。它是一个免费的开源 Android 应用,可从数十个网站提取干净文本,并将其整理成精美的离线书籍。

为什么需要单独的聚合器

与 Moon+ Reader 等标准阅读器不同,QuickNovel 还处理内容分发。作者不在自己的服务器上存储书籍——该应用的工作方式类似于搜索引擎。您输入一个标题,QuickNovel 向支持的平台发送请求,获取 HTML 页面,清除垃圾内容,并将章节组装成统一结构。

源列表声称有大约四十个资源。其中包括 Royal Road、Scribble Hub 和 Anna's Archive 等大型英文目录,以及特定的翻译聚合器。

以下是应用在搜索和下载时的界面:

主屏幕 网站搜索 下载 书籍页面 阅读模式

源代码中有哪些有趣的内容

该应用完全使用 Kotlin 编写,采用 GPL-3.0 许可证。如果您从事 Android 开发,可以在仓库代码中找到几种实用的解决方案。

模块化解析器系统

这类应用最复杂的部分在于支持许多不同的网站。在 QuickNovel 中,每个源都通过 provider 抽象来描述。基类定义了搜索、获取元数据和解析章节文本的规则。添加新网站只需要创建一个包含正确 CSS 选择器或 JSON 端点的文件。

构建和打包为 EPUB

QuickNovel 不仅可以在内置阅读器中渲染文本,还可以将下载的章节打包成标准 EPUB 格式。如果您更喜欢通过第三方阅读器或电子阅读器阅读,这非常方便。

这种方法的主要问题

网页抓取有一个不可避免的缺点。一旦网站所有者更改布局、迁移到新域名或启用激进的 Cloudflare 保护,解析器就会失效。

项目仓库目前约有 250 个未解决的问题。其中大多数涉及解析器失效。这里的开发依赖于社区活动:有人注意到问题,修复代码中的 CSS 选择器,然后提交 pull request。

谁会发现这个项目有用

如果您经常阅读网络小说并希望摆脱广告和对网络连接的依赖,QuickNovel 值得安装。

对于 Kotlin 开发者来说,这是一个很好的示例,展示了如何在实际移动应用中组织数百个页面的异步加载、文件系统操作和 HTML 解析。源代码可在 GitHub 上获取。

相关项目