compose multiplatform写一个简单的阅读器2

目录

解码全部换成mupdf

遇到的一些问题

相对上一篇文章修正的内容:

使用感受:

未来可能要完成的功能:


解码全部换成mupdf

android里面的pdf解析,背景没有了,换了mupdf就正常了.

解码的代码统一,省的麻烦了.

mupdf不只支持pdf,还支持epub/mobi这些,这在桌面端没有找到一个合适的阅读器,所以写桌面端.后来发现fbreader不错,缺点就是鼠标滚动有点恼火.

mupdf也支持ios,如果要做ios的也容易.

遇到的一些问题

上一篇简单地改造,有明显的bug,这次把bug修正了.且把解码的都换了mupdf,因为它是agpl v3,所以我也加了这个.源码放到了github上.dev分支上.GitHub - archko/KReader

完善的过程,发现几个问题.

  • mac intel的打包有问题,sqldelight打包失败.arm的没有问题.
  • 打包的时候,暂时无法把dylib打进包,对于gradle的打包还是不够熟悉,现在只能打完,然后放进去.
  • mupdf的引用,由于源码编译,发布到本地,所以做了两个,一个是aar,一个是jar.aar是androi在用,jar是桌面端用.windows,linux的包需要自己再打了.
  • lifecycle冲突的话,会导致打包成功,运行失败,但无报错.桌面端的换成org.jetbrains.lifecycle.
  • 要想实现界面的完全复用,恐怕不太容易,手机端与桌面端最大的差异是键盘,所以涉及到这个的只有分开.
  • kotlin代码,在公用模块,好像都是要public,否则是private的.
  • android里面的pdf解析,背景没有了,目前未知如何处理,以前好像修正过,后来忘了,导致一些图片解析后,背景透明,然后整个是黑的.换了mupdf就正常了.
  • bitmap由于要适配多平台,涉及到这个的,就需要不同平台有不同的实现了.

主要涉及的一些问题就是上面, 其它可能还没有机会遇到.

相对上一篇文章修正的内容:
  • 大纲滚动的焦点问题修正,之前是鼠标滚动只会滚动内容,添加了鼠标悬停与点击时的背景色
  • 移动端的换了mupdf解析.
  • mac打包的修改,去除dylib进jar
  • 添加了图片的简单缓存,避免滚动时的重复解码.

使用感受:

kmp,个人觉得,只用桌面端或只用于移动端的话会比较合适,并不合适一个代码用于桌面端与移动端.要修改的东西不少.当然相比整个重新写是省了不少事.

有so的aar,目前没有找到直接使用的方式,所以要么打一个jar不包含so,然后加一个dylib的引用,要么分开引用不同的包.目前我使用方式二,一个引用aar,一个引用jar,aar可以用mupdf官方的,手机端用.jar就只有自己弄了.

内存的占用偏高.相对其它pdf阅读器,pdf expert.

cpu占用偏高.相对qt,fbreader是用qt.

对于java/kt程序员,要写一个高质量的桌面端应用,是个不错的选择.虽然我觉得性能与那些比要差一些,实际还好,compose以后性能还会提升的.相比swing,这个太旧,学习成本是比较大,而android程序员的话,成本比较低.

material3的风格直接用上了.官方的demo有不少.

ios上的感受,目前没有时间搞,需要编译mupdf也比较麻烦.不太清楚它编译后的效果如何.

flutter也可以做桌面应用,有一个pdfrx,有基本的pdf功能了.但是pdf用ffi时,速度是真不咋地.而且它的移动端解码又只能调用系统的,通过channel传输,速度也是不行.

未来可能要完成的功能:

分块加载,目前是一个page一个图片,加载整个页面,对于桌面端还行,对于移动端尤其缩放是非常糟糕的.长条形的图片也会内存溢出.

只实现了加载图片,缩放功能未实现.手机端要复杂,桌面端要容易一些缩放后对整个view应该是容易.

解码需要重构

添加自动切边功能

手机端的功能需要把原来的app功能迁移过来.

添加滤镜.

添加webdav这些历史记录,这样多端可以统一历史记录了.

时间有限,手机的app目前有一个完整的实现了,可能后续去完善compose的动力不大.

更多会完善桌面端的功能,加入切边,历史记录同步.

有兴趣的人可以在github提pr.

手机端现在7.3版了,有兴趣也可以去增加功能.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值