Android 构建MuPdf 编译so库 并使用

MuPdf官网
MuPdfAndroid开发文档
本次使用版本 14

这篇文章记录编译mupdf-android-viewer库,打包成so库,并在项目中使用.请参考

编译so库

  1. 首先还是获取mupdf-android-viewer库到本地,使库能够正常运行,并安装到手机上,看看效果。
git clone --recursive git://git.ghostscript.com/mupdf-android-viewer.git
  1. 生成必要文件

mupdf-android-viewer/jni/libmupdf目录下执行make generate命令。

➜  libmupdf git:(d63bd227) pwd
/Users/fengxing/openProject/mupdf-android-viewer/jni/libmupdf
➜  libmupdf git:(d63bd227) make generate
  1. 添加local.properties 文件
    在工程跟目录下创建local.properties文件配置sdk,ndk路径
ndk.dir=/Users/fengxing/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/fengxing/Library/Android/sdk
  1. cmake编译
    在根目录执行make进行编译,如果编译成功,那so文件会生成在这里。


    Android 构建MuPdf 编译so库 并使用_第1张图片
    image.png

目录
mupdf-android-viewer/jni/build/intermediates/ndkBuild/debug/obj/local

使用so库

现在我们已经得到了so库,现在我们就使用它。

  1. 创建新项目

创建一个新项目,项目的名字就叫MuPdfSo

  1. 导入so库
    把编译的so库导入新项目中


    image.png

在gradle中添加代码

defaultConfig {
        applicationId "cn.picc.com.mupdfso"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            // 设置支持的SO库架构
            abiFilters 'armeabi'
        }
    }
  1. 创建两个module
    看mupdf-android-viewer的目录结构
Android 构建MuPdf 编译so库 并使用_第2张图片
image.png

可以看出来mupdf-android-viewer由三部分组成,

app:显示pdf
lib:UI显示层
jni:MuPdf核心库

调用顺序:
app-->lib库-->jni库<--> JNI <--> .h -->.c

我们也根据这个模式创建两个module

一个名字叫PdfSo,定义native方法的。
一个名字叫PdfUi,定义显示UI的。

PdfSo

首先来搞PdfSo这个module,PdfSo主要是定义了一些native,和c文件进行沟通,这里我们复制mupdf-android-viewer定义好的类。

image.png

com.artifex.mupdf.fitz这个包,整个全部复制出来,记住 是全部哦。放到PdfSo库中,类似这样。

image.png

因为c代码库中定义的包就这个com.artifex.mupdf.fitz 所以native也必须是这个包。
我们来看下c代码和h代码。

image.png
image.png

看到没 在c代码中有个pkg,这个就是咱们定义的报名,可以修改成我们的报名,就不需要使用他们的包明了。

.c文件可以修改报名,是因为 看图

image.png

是因为根据包名去找字段,但是.h中的字段是写死的,只改c代码的包名可能还会有问题。

好吧,那暂时先使用他们的包名。

PdfUi库

这个就简单了:把lib库的代码直接占过去就行

image.png

别忘了资源文件。

编译一下,也就是 包明的问题,分分钟解决。

在app主模块测试一下,可以使用了。。。。

特此记录。

自定义界面

目前我没有这方便需求。
简单显示就可以的
使用so库 api大小增加8m左右
如果需要自定义界面或者需要什么功能
源码都有了 自己搞把。。。。。。。。

其它PDF请参考

demo地址

你可能感兴趣的:(Android 构建MuPdf 编译so库 并使用)