做了一个移动端的 ePub 和 mobi 的阅读器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Yukisama
V2EX    分享创造

做了一个移动端的 ePub 和 mobi 的阅读器

  •  3
     
  •   Yukisama 270 天前 3260 次点击
    这是一个创建于 270 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一段时间看的电子书比较多,就准备找一个的电子书阅读器,顺便建立一个书库。

    一开始选择了 iOS 自带的图书 App ,好处就是 ePub 样式支持完美,能够显示各种复杂样式,界面简洁还支持云同步,但是却没有类似文件夹之类的分类功能,一个系列的书籍只有在他图书商店买的书籍才会自动分类到一起,自己导入的第三方图书就没办法合并了,如果像有些轻小说数量较多的只能用类似标签的方法分类,但是感觉终究只是替代方法,标签不支持搜索,建立太多标签也会影响原本的分类功能,遂放弃。

    然后是多看阅读,这个之前使用小米设备的时候就了解过,对 ePub 的样式支持也非常好,也能支持云同步,还解决了苹果图书没有文件夹分类的问题,但是却没有标签分类了,文件夹也不支持搜索,查找起来会比较麻烦,外加多看主要功能还是在线书城,还是想要一个简洁的纯粹的阅读器,最后还是放弃了。

    之后也尝试了 App Store 里面各种各样的阅读器,但是大部分最主要的问题就是对 ePub 的样式支持不完善,问题少一点的一般是字体样式丢失,复杂的 css 样式无法显示,问题大一点就是各种排版混乱,图片异常拉伸,脚注的小图标也会识别成一个巨大的图片,导致阅读体验下降。最后都还是选择了放弃。

    之后想到了正好申请的开发者证书还在,就打算自己尝试用 Flutter 写一个本地阅读器,但是无奈技术太菜,前前后后用了一个月的时间才差不多完成,再加上没有 Mac 电脑,调试起来比较麻烦。

    这里吐槽苹果的 Webkit ,很多地方和安卓端表现差异太大了,在模拟器上调试好了放到 iOS 设备上之后总是出现一些奇奇怪怪过的问题,一些 Flutter 的第三方库的表现也有些不同,让原本就缓慢的进度雪上加霜。

    最后还是勉强做了个雏形出来,实现了阅读器的大部分功能 [阅读样式调整、系列分类、标签分类、书籍信息编辑、阅读计时器……] ,在开发过程中也学到了不少东西,后续准备增加 WebDav 实现云同步的功能,不过目前还没想好具体的方案。

    代码写的太烂就不放出来丢脸了,已经上架了 App Store ,欢迎下载体验:

    iOS:App Store 下载链接

    Android:蓝奏云 密码:15532

    交流反馈 QQ 群:979919343

    预览:

    预览图 1 预览图 2 预览图 3

    第 1 条附言    270 天前

    刚刚发现蓝奏云手机端下载需要收费,于是增加新链接: 下载链接

    40 条回复    2025-05-14 08:35:33 +08:00
    FanyFull
        1
    FanyFull  
       270 天前
    有想法就开干,你是这个 话说,flutter 开安阅读器会有性能的问题吗?比如,翻页时候的刷新率稳吗?
    zoharSoul
        2
    zoharSoul  
       270 天前
    webview 的有个问题, 仿真翻页怎么办呢?
    zoharSoul
        3
    zoharSoul  
       270 天前
    @FanyFull #1 看描述是 Webview 的, webview 是系统原生组件和 flutter 性能关系不大了
    Yukisama
        4
    Yukisama  
    OP
       270 天前
    @zoharSoul 仿真翻页目前没有实现,只是做了翻页的平滑过渡,如果要做的话应该只能用 CSS 在 WebView 中实现了
    rainrdx
        5
    rainrdx  
       270 天前 via iPhone
    div class="reply_content">完全是我个人的需求了,亚马逊逐渐转向 KFX 格式,现在也有比较完善的 KFX 转 EPUB 代码了,但是还是没有第三方阅读器直接支持 KFX希望作者有机会考虑
    Yukisama
        6
    Yukisama  
    OP
       270 天前 via iPhone
    @FanyFull 在 iOS 上测试,感觉并没有遇到性能问题,因为书籍部分是用系统的 WebView 来渲染的,Flutter 不会影响到性能,安卓上只有在模拟器上测试过,也是没什么问题的。
    Yukisama
        7
    Yukisama  
    OP
       270 天前 via iPhone
    @rainrdx 更多格式也在适配支持,没有看到过 KFX 这个格式,需要研究一下怎么做
    daiqc
        8
    daiqc  
       270 天前 via Android
    安卓的下载链接需要会员
    rainrdx
        9
    rainrdx  
       270 天前
    @Yukisama 谢谢你了
    现在完全成形的转换插件是这个
    https://www.mobileread.com/forums/showthread.php?t=291290&highlight=symbol

    但是没有任何阅读器。主要的问题是亚马逊转向 KFX 格式,我只买正版书,拿到的就是 KFX 。我可能是少许买了正版书又不想用亚马逊生态系统看书的哪些用户。。。。。。
    wszbdyyy
        10
    wszbdyyy  
       270 天前
    支持一下,有想法就干
    ysc3839
        11
    ysc3839  
       270 天前
    @rainrdx 转换吧。其他很多正版平台下载下来的是加密的 epub ,要用 calibre 配合 NoDRM 等工具解密,也算是要转换了。
    leonme
        12
    leonme  
       270 天前 via iPhone
    pad 左右排版是强制的呀?
    Yukisama
        13
    Yukisama  
    OP
       270 天前
    @leonme 是需要那种使用上下滚动来翻页的选项吗?
    Yukisama
        14
    Yukisama  
    OP
       270 天前
    @daiqc 感谢提醒,没想到手机端下载还需要收费,已经增加了新的链接
    Zys2017
        15
    Zys2017  
       270 天前 via Android
    能不能支持添加 txt 呀
    leonme
        16
    leonme  
       270 天前
    @Yukisama #13 对,就是一整行一整行铺满屏幕,上下滑动的哪种效果 我发现苹果的图书在 mac 和 ipad 的横屏下也是这种左右的,且不可调节,不太灵活
    Yukisama
        17
    Yukisama  
    OP
       270 天前
    @Zys2017 #15 txt 会支持的,应该很快就会上线
    Yukisama
        18
    Yukisama  
    OP
       270 天前   1
    @leonme #16 因为最开始没有这个需求,所以暂时没有做,之后会添加这个功能,在设置中切换两种模式
    aowugong
        19
    aowugong  
       270 天前
    ios12.4 ,导入的是 epub ,能在书库看到。但点进去开始阅读就一片空白,不能翻页,只显示电量、进度 0.00%、当前时间
    GG668v26Fd55CP5W
        20
    GG668v26Fd55CP5W  
       270 天前 via iPhone
    有没有在墨水屏安卓设备上测试过?
    Yukisama
        21
    Yukisama  
    OP
       270 天前
    @howie110 #19 这个 Bug 目前没有遇到过,手上的设备没办法复现这个问题,后续会优化一下逻辑来尝试解决
    Yukisama
        22
    Yukisama  
    OP
       270 天前
    @falcon05 #20 没有对应的设备,没办法测试,墨水屏刷新率低可能有过渡动画的地方可能会有些问题
    aero99
        23
    aero99  
       269 天前
    最近我也在找 ios 端的 epub 的电子书阅读客户端,可是总有这样或那样的功能缺失,我要求不高
    1 、支持 epub 、txt 、pdf 等常用格式,最起码支持 epub
    2 、简单分类功能,比如文件夹、标签,支持文件检索和内容检索
    3 、阅读功能排版,更换字体,主题这些应该是最起码的吧
    4 、支持听书功能,这个很重要,尤其看书看累了想休息下,或者睡前听听挺好的
    听书最好是微软那种自然语音,不要 tts 机器音,听着太难受了
    5 、支持 gd 、dp 等云盘,或者 webdav 功能,如果支持电子书 OPDS 协议更好了,可以直接链接 calibre-web 等服务
    目前我是桌面端用 calibre 管理书籍,最后导出标准 epub 中文文件到云盘中,然后到电子书阅读器,比较麻烦
    6 、如果有书签、摘录笔记、标记什么的就更好了,支持 iCloud 备份或同步

    目前功能比较接近的也就是多看了,阅读舒服,但是听说功能已经废了,更新维护极少,感觉小米要放弃的样子
    Yukisama
        24
    Yukisama  
    OP
       268 天前   1
    @aero99 #23 感谢建议,我也是因为其他的阅读器多多少少都有些不符合阅读习惯,所以才打算尝试自己做一个
    1 、目前支持 ePub 和 mobi ,txt 已经在适配,PDF 未来没有支持的打算,排版不可变的设计导致无论如何排版都不是很适合作为书籍直接阅读,PDF 有更适合的阅读器
    2 、之后会单独做标签检索和内容检索
    3 、排版和主题已经支持,后续会支持更换字体
    4 、听书这个功能目前也已经在做
    5 、现在正在对 WebDAV 进行适配,用来实现书籍和进度的云同步,OPDS 协议还得再研究一下
    6 、目前只有书签实现了,笔记功能因为 iOS 端不知为何 WebView 会在选中文字之后依旧能左右滑动,导致选中文字基本不可能,安卓却没有这个问题,之后可能会想办法解决

    多看的功能我觉得除了分类不能搜索之外已经挺完善了,不过确实基本没有更新,登录 Bug 一直都没解决,界面和几年前基本都没有变化
    muayang
        25
    muayang  
       268 天前 via iPhone
    支持一下,已下载,可以考虑添加一个图片灯箱的功能,
    aero99
        26
    aero99  
       268 天前
    @Yukisama #24 希望能够越来越完善,如果功能不错,即使收些费用也没有问题,我目前就主力就是 Calibre 前期整理和补充元数据然后导出转换 epub 到云盘同步到我的 Audiobookshelf 自建书库,普通的书籍就在线看,深入的就再用多看,听书就再导出到另一个 APP ,相当于现在需要四个平台( app )太分散了
    Yukisama
        27
    Yukisama  
    OP
       268 天前   1
    @muayang 图片灯箱指的是把书籍中的所有图片集中显示的功能吗?
    muayang
        28
    muayang  
       267 天前 via iPhone
    @Yukisama 可以有,你说的那个效果可以看看适不适合自己。我指的是那种书籍中的图片点击后会弹出图片,可以放大缩小,可以参考 ios 的自带的图书软件,在阅读到有图片的页面时你点击一下图片看看
    maemolee
        29
    maemolee  
       267 天前
    阅读界面的交互有点难受,但是能阅读 mobi 很强,国内普遍都是只支持 epub
    Yukisama
        30
    Yukisama  
    OP
       267 天前
    @maemolee #29 请问具体是哪些地方交互不方便呢? iOS 的话最近更新了一部分阅读界面的交互方式
    Yukisama
        31
    Yukisama  
    OP
       267 天前   1
    @muayang #28 这个之后会增加,因为目前长按可以保存所以暂时先没有做
    Yukisama
        32
    Yukisama  
    OP
       267 天前   1
    @howie110 #19 最近上线了一个更新,尝试了修复这个问题,可以尝试一下
    aowugong
        33
    aowugong  
       267 天前
    @Yukisama #32 感谢回复。打开书本,现在变成能见到书的封面,然后就是一直在转圈
    maemolee
        34
    maemolee  
       266 天前
    @Yukisama #30 我说话直白一些,您酌情参考:目前直观的两个体验不好的地方:
    1. 阅读区域只在阅读界面的中间部分,外面有个很大的边框。阅读页面的最外一圈热区不是翻页交互,而是退出阅读界面。
    2. 翻页的效果也是有点将就,没有传统阅读软件那种自然的感觉。
    muayang
        35
    muayang  
       266 天前 via iPhone
    @Yukisama #31 可以,有个交互方面的建议,阅读时菜单触发范围有点大,文字覆盖的范围都可以触发,建议左右可以窄些,你可以考虑一下
    Yukisama
        36
    Yukisama  
    OP
       265 天前
    @howie110 #33 那看来还有些问题,不好意思,可能还需要排查一下
    Yukisama
        37
    Yukisama  
    OP
       265 天前
    @maemolee #34 感谢建议
    1 、边框调整之后会添加到样式调整中,第二个交互区域问题确实会有 3%左右的区域无法交互,之后会解决
    2 、翻页的效果目前只有平滑过渡,之后会增加拟真翻页效果
    Yukisama
        38
    Yukisama  
    OP
       265 天前
    @muayang #35 之前由于技术原因所以没有添加这个功能,现在已经解决,之后会和新版本一起上线
    anson264556364
        39
    anson264556364  
       154 天前
    @aero99 现在有更好的方案吗?
    aero99
        40
    aero99  
       154 天前
    @anson264556364 #39 没有,听书现在用源阅读了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3167 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 10:56 PVG 18:56 LAX 03:56 JFK 06:56
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86