一时兴起

因为自己前段时间一直在做故事会的一个客户端,当然是非官方版,主要是由于自己的兴趣所致。以前就挺喜欢看故事会的,所以就希望做一个故事会的客户端,在手机上随时随地地看。因为故事会的官方APP的体验实在是太差了,而且资源还不全(而且还收费),所以我就打算自己做一个,然后去收集网上的资源。因为网上的故事会是以PDF文件的形式出现的,刚开始我想调用手机上的软件例如WPS等来阅读,后来一想反正做那就做PDF文件阅读功能吧,反正也没做过,正好试试呗。

一波三折

说做就做,刚开始使用的开源库是PDFView,就结果来说,软件体积太大了,而且使用的时候加载有点慢了,所以当时就不是太想使用这个库。后来没办法妥协呗,想了一个折中的办法,在开始的时候,利用PDFView提供的方法将PDF文件转换成一张张的图片保存到手机里,等加载的时候直接使用Picasso等加载图片的库来加载本地图片,这样总体来说还是不错的,直接加载图片比直接解析PDF文件要快很多,所以就出现了第一个版本,有兴趣的可以下载看一看。

后来,又随便在网上搜了搜,又找到一个不错的开源库,也就是MuPdf,这个和PDFView相比体积小,只有原来的一半,这已经是一个很大的诱惑了,没什么比体积小更让人扛不住的了。然后就开始找一些实现代码,最后找到了一个Eclipse版本的,它的阅读方式是横屏滑动阅读,我更喜欢竖屏阅读,所以就改成用ListView来显示,而且重要的是可以直接去显示,而不需要生成图片在手机里(因为这个做了实现封装),所以我就改了改,然后使用LruCache来保证不会出现内存溢出的情况,Demo运行还是不错的。

因为我的那个故事会客户端是使用AndroidStudio开发的,所以必须把MuPdf移植到AndroidStudio上。因为MuPdf需要调用so文件,所以我就先做了一个Demo,看看能不能运行出来,结果没问题再移植,然后悲催就开始了!!

本来so接触的就不多(其实很少%>_<%),所以怎么导入就是一个大问题,去网上搜有的说是建立jniLibs文件夹,然后放在里面,然而并无卵用;还有的说将so文件压缩成jar文件,然后放在libs里面,同样无卵用,最后真是要崩溃了。折腾了一下午,出去吃个晚饭,路上又搜了一种解决方法,告诉自己回去再试最后一次,不行我就放弃了,吃完饭回来试一下居然可以了,终于不在停止运行了。

问题出在哪我想暂时是找不到了,大概就是因为运行是没有正确的加载so文件,所以一些底层方法不能调用而崩溃了。

解决方法

    task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs"){destinationDir file("$projectDir/libs")baseName "Native_Libs2"extension "jar"from fileTree(dir: "libs", include: "**/*.so")into "lib"}tasks.withType(JavaCompile){compileTask -> compileTask.dependsOn(nativeLibsToJar)}

将这一段代码加在build.gradle里,同时将libmupdf.so文件放在如下位置:

图中的Native_Libs2.jar是编译之后出现的,如果编译之后没有出现这个文件,那么可能就不会运行成功了。

哦,对了还要注意的是MuPdf的那些类的包名必须是com.artifex.mupdf,如下:

不然好像也不能运行成功。

柳暗花明

因为在AndroidStudio上可以运行成功了,所以我就打算将原来的客户端重新改写一下,将PdfViewer替换成MuPdf,一来可以减小APK的体积,二来也不用将PDF文件转换成图片来显示,很方便,等完成之后再将软件上传上来让有兴趣的看看。

下载

MuPdf的Demo-Eclipse版

MuPdf的Demo-AndroidStudio版

故事会客户端-PDFView版

故事会客户端-MuPdf版


附:经朋友测试,发现如果打开的PDF文件如果是损坏的话,那么应用就直接崩溃了,其次如果快速的关闭和打开应用,那么应用也会崩溃。这里我上传一份解决上述问题的版本(AndroidStudio版),它解决了上述问题,其实也就是换了一个so库,不过确实不会崩溃就是了。还需要注意的是新版的加载so库的方法和旧版不一样,大家在build.gradle中可以看到。

新版下载


因为我现在提供的so库只有armeabi-v7a版本的,像是x86,armeabi等架构下的都没有,在其他的手机上都出现了不能运行的问题。所以痛定思痛,我决定学习一下源码编译,得到其他架构下的so文件,还好不是太难,主要就是配置一下环境,具体内容可以参见我的这篇博客《Android:ubuntu下编译MuPDF源码》。

Android:使用MuPdf开源库阅读PDF文件相关推荐

  1. Android MuPDF 阅读PDF文件

    MuPDF是一款轻量级的开源软件,可以用来阅读PDF文件.下载完源代码以后,想要运行成功,除了Android SDK之外,还需要Android NDK环境,因此有点麻烦. 但是一旦安装完必须的环境以后 ...

  2. 基于MuPDF库实现PDF文件转换成PNG格式图片

    背景 之所以会接触MuPDF是因为,有位群友在Q群里提问,如何将PDF保存为.PNG图片格式.我一看到这个问题,就蒙了,因为我没有接触过类似的项目或程序.但是,作为一群之主的我,还是要给初学者一个答复 ...

  3. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )

    文章目录 一.项目中配置 OpenSSL 开源库 二.OpenSSL 开源库解密参考代码 三.解密 dex 文件的 Java 代码 四.解密 dex 文件的 Jni 代码 参考博客 : [Androi ...

  4. android 手机 用短信发pdf文件,安卓手机什么pdf阅读器最好用?如何编辑pdf文件

    原标题:安卓手机什么pdf阅读器最好用?如何编辑pdf文件 现在手机上都会安装各种功能的应用app,以便应对工作或休闲娱乐的需求.那么你知道安卓手机上扫描pdf阅读器最好用吗?我认为一款好用的pdf阅 ...

  5. 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档

    在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...

  6. Android 优秀的开源库

    前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 TextView HTextView 一 ...

  7. 使用iText库创建PDF文件

    前言 译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/ 对于excel文件的读 ...

  8. Android常用热门开源库汇总(持续更新)

    原文转载:https://www.yundashi168.com/344.html 请及时关注原文网站,因为后续持续更新都在原网站更新.请多多点赞和关注. 前言 收集了一些比较常见的开源库,特此记录( ...

  9. 手机端 阅读 pdf 文件 touchPDF.js

    touchpdf 中文API 下载地址: http://github.com/loicminghetti/touchpdf/archive/master.zip 一款在手机端 阅读pdf 文件的 js ...

最新文章

  1. Stock Market(luogu 2938)
  2. 区块链101:区块链的应用和用例是什么?
  3. “Lephone.Data.DbEntry”的类型初始值设定项引发异常。(DbEntry.net3.9)
  4. ApacheCN Vue 译文集 20211115 更新
  5. 资源丨用PyTorch实现Mask R-CNN
  6. js刷新页面有哪几种方法
  7. 5 Ways to Speed Up Your Rails App
  8. 机器学习and深度学习学习资料
  9. sublime能编译PHP吗,让sublime编译php、js
  10. vmware 12 可用 序列号
  11. MAC和IP地址伪造发包
  12. CentOS7/rhel7 T440P 控制散热风扇转速等级
  13. 2020年ubuntu安装QQ和微信和迅雷的正确姿势
  14. 不仅仅生成图片,用GAN做无监督的异常检测
  15. Kerberos鉴权后Spark程序连接Redis数据库,解决No Reachable node in cluster错误
  16. 棋盘游戏 五子棋(1.人人对战)
  17. 写脚本的作用是什么?做自媒体,什么样的视频一定要写脚本?
  18. BeanUtils.copyProperties 无法转换数据类型不同的数据
  19. 采购交期改善,这些表格一定要用上
  20. 风云编程python基础语法(5)

热门文章

  1. 上海市浦东新区37街镇最新版行政区域
  2. 各类型数据库介绍对比
  3. Unity 通过TextMeshPro创建属于自己的字体库
  4. 一波带走,SpringBoot 中的各种参数校验方案汇总
  5. ueEditor 增加插件,超级方便
  6. 吴恩达机器学习系列课程作业ex3 matlab实现
  7. 益聚星荣:“真实和虚拟的融合是腾讯未来方向”马化腾要进军元宇宙?
  8. 配置Python镜像
  9. RSA 2048/4096 签名校验算法
  10. html怎么做产品轮播图,商品轮播图是什么意思(html轮播图怎么制作)