项目近期需要用到文档查看器,现有的WPS之类确实比较好用,无奈还需要对应用做些处理,只好寻找开源的实现。开源的文档查看器主要两种方式,一种是完整的Android版本实现,直接拿来即用,如LibreOffice的Android版本;一种是提供了Java库之类,能够解析标准的office文档,但需要移植或自己实现应用界面,文档的展示,如openoffice,POI等(基于openoffice有android版的移植实现,但不开源)。至于其它的各种将文档转成pdf再查看的方式,我没有去尝试。有鉴于实现简单和项目情况,第一种方式成为必然选择,但也了解了其可能出现文档解析不全(如有时图片无法显示)的问题。本文正是基于此记录编译开源LibreOffice的Android版本的步骤,减少后来人的错误尝试,同时也在github上提供能够简单编译使用的版本。
一、先给出一些基本信息:
本人编译环境Ubuntu 14.04,编译的版本5.3.0.0.alpha0+/05c89af
1.LibreOffice的官方网站:https://www.libreoffice.org/
可以方便的查找到官方Android版本使用,以及源代码下载和编译
2.ubuntu上编译
https://wiki.ubuntu.com/BuildingLibreOffice
https://wiki.documentfoundation.org/Development/BuildingForAndroid
3.如下摘录官方的编译说明:
libreoffice文档查看器的编译
官方说明非常简单
(1)获取代码
git clone git://anongit.freedesktop.org/libreoffice/core libreoffice
cd libreoffice
(2)将Android SDK and NDK放置external/目录,如 external/android-sdk-linux/和external/android-ndk/目录
(3)编译
创建autogen.input文件,调用make
# create your autogen.input, so that it looks like:
cat autogen.input
--with-distro=LibreOfficeAndroid
# configure (and install packages as needed)
./autogen.sh
# start the build
make
实际编译过程中会出现各种问题,缺少各种依赖。
考虑到会是交叉编译获得so文件,所以可以先配置好编译libreoffice在linux上的环境,再编译Android版本
二、实际的编译过程如下,同时由于国内网络原因,考虑了修改成自己的gradle版本和sdk中buildtools等相关版本
(1)源码获取
直接通过git获取源码 经常出现获取到一半无法获取的情况,而且不支持断点续传
官网给出了其它方法:https://www.libreoffice.org/about-us/source-code/
因此直接通过http下载,解压后再通过git补全
(2)配置ubuntu上编译环境
源码获取的官方方法里,也给出了编译链接:https://wiki.documentfoundation.org/Development/BuildingOnLinux
具体就是安装依赖sudo apt-get build-dep libreoffice
(3)编译Android版本
https://wiki.documentfoundation.org/Development/BuildingForAndroid
a.首先指定Android SDK和NDK目录,external/android-sdk-linux/和external/android-ndk/目录
b.修改build tools
如果build tools不符合,执行autogen.sh时就会提示
但是编译过程中提示在ant编译时aapt无法找到一个文件,此时需要确定下自己的build tools是否在24.0.0以上
提示Cannot run program "/home/user/Android/Sdk/build-tools/23.0.2/aapt": error=2 No such file or directory"
stackoverflow上给出的方法http://stackoverflow.com/questions/33427893/can-not-run-android-sdk-build-tools-23-0-2-aapt
c.根据自己的需要选择gradle版本
将build.gradle中的 改成
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
}
不行到时候会让下载gradle-2.10-all,注意替换android/source/gradle/wrapper/gradle-wrapper.properties的下载地址
d.安装了oracle-jdk-8
重新执行./autogen.sh才生效,否则报version不识别
此后,再按照官方提供的BuildingForAndroid方法(上文有介绍)即编译通过,在build的output目录中生成apk,但是对某些文档的显示包括其中的图片仍然会有问题。
e.后来发现stripui的版本可以使用 fullui的版本无法打开文档
测试将makefile文件中的disable_ui的值改为false 不行,强行编译fullui版,还是会崩溃,具体原因不知道
三、提供方便的编译版本
在github上地址:git@github.com:w7849516230/libreoffice_android.git
克隆好后,修改android/source/liboSettings.gradle文件中ext的定义,如liboSrcRoot的路径信息,改写成实际的路径信息
此版本只是修改配置文件信息,提供了so库(没有源文件),因此也只能完成上层的修改优化。
后续有需要了再及时同步LibreOffice最新版本。