如何在Android 6.0及以上嵌入MuPDF


引言

现在大部分关于MuPDF的库,都是1.1一下版本;在嵌入到6.0及以上版本时,会出现错误:libmupdf.so: has text relocations

如何查看当前库文件是否有这个问题?

将当前文件传到linux服务器,使用命令:readelf -a ./libmupdf.so | grep TEXTREL;如果没有linux环境,需要安装cygwin(具体参考百度);

如果返回空,说明没有问题,否则使用该文件在6.0以上版本会报错

MuPDF版本,在1.2版本是一个分水岭,1.2一下版本都会有TEXTREL问题,而1.2及以上在定义JNI方法上跟以前有很大的区别;如果需要在项目上嵌入MuPDF,

又该怎样解决以上的问题?(网上很多libmupdf.so 的库文件,1.0~1.9的都有,在这里我想说的是,就算你下载下来,如果项目中不做调整,一样没什么用)


正题

环境:Ubuntu 14.04(无所谓)、Windows, adt-bundle-linux-x86_64-20140702、android-ndk-r10、mupdf-1.6-source、eclipse(adt-bundle)

这里使用的是mupdf 1.6 不需要选择太高版本的,选择一个合适自己的即可


一.编译mupdf库:

1.下载mudpf,选择自己需要的版本,建议选择1.6~1.10之间的版本

2.解压mupdf源文件:

tar -zxvf mupdf-1.6-source.tar.gz

3.进入解压好的文件

cd mupdf-1.6-source/

4.开始编译

make generate

输入命令后,在当前目录下会出现一个generate文件,这一步很重要,后面生成mupdf库需要依赖它

build         COPYING    include    Makethird  resources  thirdparty
CHANGES       docs       Makefile   platform   scripts
CONTRIBUTORS  generated  Makerules  README     source

5.打开eclipse,导入在mupdf-1.6-source下platform下的android项目,见下面截图:


6.修改project.properties

将target=android-20 修改为你的sdk版本;我这里有20和23的,也就是Android 4.4W和6.0,先确认好自己的sdk版本,很重要

7.修改local.properties.sample 

将问价修改为local.properties;添加sdk路径; 这里是sdk.dir=/cocos2d-x/adt-bundle-linux-x86_64-20140702/sdk/

8.修改jni/Application.mk

APP_PLATFORM 这里写需要嵌入到那个Android版本()

APP_ABI 这里是嵌入的CPU类型(一般是armeabi armeabi-v7a x86 mips)

修改后

APP_PLATFORM=android-6
APP_ABI := armeabi armeabi-v7a

9.使用eclipse打包jni,也就是编译mupdf库,见下图:


配置好以后,点击apply, 点击OK即可;

编译的话可能会花一点时间,中途会出现一些警告,不用管;如果是出现头文件找不到,打开jni.Android,mk 看看 你是否是修改过MUPDF_ROOT;

如果有修改过,就改回来:MUPDF_ROOT := ../..

10.编译完成后,在lib下的armeabi和armeabi-v7a文件夹下会出现libmupdf.so文件,这个就是我们需要的mupdf库


二、将MuPDF嵌入到项目

1.将mupdf库添加在 项目中libs

2.将mupdf-1.6-source中src中com.artifex.mupdfdemo下copy到项目src下(可以直接使用)

3.这样直接放上去会报错,说是在res下面找不到资源(了解过Android都应该知道)

4.将mupdf-1.6-source下res下有报错的内容复制到项目中res目录下相应的位置

5.将所有资源文件依赖解决以后,运行项目测试

6.成功运行


第一部分主要需要注意的是配置文件的配置,以及路径是否正确;第二部分需要注意的是libmupdf.so 在编译的时候默认是com.artifex.mupdfdemo这个包,所以

,在移植mupdf源码时应该将com.artifex.mupdfdemo整个目录移动过来放在项目src下,然后在根据自己的需求做增删;再就是需要注意依赖的资源文件是不是存在,

不存在就去mupdf源码包中copy;如果运行是出现nullPoint,需要引用你当前项目中R.java文件,我们移植过来的时候这些文件就会报错,需要先将res下的依赖解决以后,

eclipse会自动帮我们在gen下的R.java添加我们新增的资源文件ID等

mupdf库下载





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值