《转》【Android】开源项目Droidreader编译全过程 [复制链接]

2013-11-6 16:09
s19x242514 阅读:1383 评论:0 赞:1

原有PDF功能的开发,是直接从Droidreader编译好的APK中将so文件拿来使用,但因为打开PDF文件经常出错,所以决定下载Droidreader源码进行调试。以下是编译过程中的一些问题及解决方法。

首先,我直接从Droidreader下载源码,打算编译,却发现一些文件找不到,在网上查了下,发现我遗漏掉一个很重要的文档,即是:Droidreader源码中的README。里面清晰地说明了编译的必要准备:开源项目mupdf的相关文件。mupdf是一款c写的轻量级PDF阅读器。于是,我又搜索下Droidreader的编译方法,发现了一篇很好的文章如下:

转自:http://blog.csdn.net/sanjinxiong/article/details/6957130

Droidreader编译方法


所需工具环境:


1.NDK(android-ndk-r5b)

2.mupdf-0.8.15

3.mupdf-thirdparty

4.Droidreader源码


步骤:

一.配置好NDK环境变量


二.拷贝需要的相关包

1.将thirdparty目录中的freetype-2.4.4目录中的所有文件文件夹拷贝到droidreader源码下的freetype文件夹中

2.将thirdparty目录中的jbig2dec目录中的文件文件夹同1操作

3.将thirdparty目录中的openjpeg-1.4目录中的文件文件夹同1操作

4.将thirdparty目录中的jpeg-8c目录中的文件文件夹同1操作

5.将mupdf-0.8.15目录中的所有文件文件夹拷贝到droidreader源码中的mupdf目录下


三.进入droidreader-read-only目录下的jni文件夹ndk-build


编译会出错,如图

make:***没有规则可以创建“/home/archermind/PDF/droidreader-read-only/obj/local/armeabi/objs/openjpeg/openjpeg/libopenjpeg/function_list.o”需要的目标“/home/archermind/PDF/droidreader-read-only/jni/openjpeg/libopenjpeg/function_list.c”。停止。

修改方法:

将源码中jni目录下的Android.mk进行修改。

注释掉或者删除如下行:

openjpeg/libopenjpeg/function_list.c\

openjpeg/libopenjpeg/cidx_manager.c\

openjpeg/libopenjpeg/thix_manager.c\

openjpeg/libopenjpeg/tpix_manager.c\

openjpeg/libopenjpeg/phix_manager.c\

openjpeg/libopenjpeg/ppix_manager.c


再次编译就可以生成libpdfrender.so文件了。

这样将工程导入到eclipse中,就可以运行droidreader了。

如果要将其编入到android系统中,只写模块中的mk文件会造成运行时找不到.so库


一般Android源码中可以在/XXXX/build/target/board/generic目录下的AndroidBorad.mk文件中间添加如下内容:

PRODUCT_COPY_FILES+=packages/apps/Droidreader/libs/armeabi/libpdfrender.so:system/lib/libpdfrender.so


添加后会把项目中libs/armeabi/libpdfrender.so文件拷贝到/XXXX/out/target/product/imx51_bbg/system/lib目录中

这样就完全把DroidReader放到Android编译系统中了

 

**************************************************************转载文章分割线*************************************************************************

本来以为按照这篇文章可以一步到位、编译成功,却不尽然。

问题1:我编译的时候出现一堆错误,而且下载的mupdf源码目录中下的文件夹名为pdf,而非mupdf

              之后才发现我下载的版本是直接从官网http://code.google.com/p/mupdf/downloads/list下载,不同于转载文章的版本。而Droidreader用的mupdf版本是mupdf-0.8.15,所以mk文件中写的目录名为mupdf,而非新版本的pdf。所以我还是下载回作者的版本http://www.mupdf.com/download/archive/ mupdf-0.8.15。

问题2:按照上面文章所写的步骤,大家会发现,

注释掉或者删除如下行:

openjpeg/libopenjpeg/function_list.c\

openjpeg/libopenjpeg/cidx_manager.c\

openjpeg/libopenjpeg/thix_manager.c\

openjpeg/libopenjpeg/tpix_manager.c\

openjpeg/libopenjpeg/phix_manager.c\

openjpeg/libopenjpeg/ppix_manager.c

后进行编译,会出现如下错误:

StaticLibrary : libjbig2dec.a
        StaticLibrary : libmupdf.a
        SharedLibrary : libpdfrender.so
        C:/workplace/Droidreader/obj/local/armeabi/libopenjpeg.a(jp2.o): In function `opj_jp2_encode':
        C:/workplace/Droidreader/jni/openjpeg/libopenjpeg/jp2.c:1196: undefined reference to `write_cidx'
                  collect2: ld returned 1 exit status
        make: *** [/cygdrive/c/workplace/Droidreader/obj/local/armeabi/libpdfrender.so] 错误 1

于是,我尝试了把其注释掉:

jp2.c

 if( jp2->jpip_on){
   pos_cidx = cio_tell( cio);
   
//   len_cidx = write_cidx( pos_jp2c+8, cio, image, *cstr_info, len_jp2c-8);
   
   pos_fidx = cio_tell( cio);
//   len_fidx = write_fidx( pos_jp2c, len_jp2c, pos_cidx, len_cidx, cio);

 

编译成功。

测试的话,可以在终端打开文件管理器,点击PDF文件时弹出软件选择框有" Droidreader "项。


我来说两句
您需要登录后才可以评论 登录 | 立即注册
facelist
所有评论(0)
领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )