先决条件
你需要一个 工作的 Android 开发环境,它由 Android SDK 和 Android NDK 组成。建立这一环境最简单的方式就是使用 Android Studio 下载并安装 SDK 和 NDK。确保 Android/Sdk/tools 和 Android/Sdk/ndk-bundle 目录在你的 PATH 上。
你也需要 Oracle 的 Java JDK(OpenJDK 与 Android 不兼容)。你也需要 Apache Ant 构建系统。你也需要 Git,GNU Make,和一个 C 编译器。
如果一切正常,你应该也能够在命令中运行如下这些命令:
- Android SDK tools: android, emulator, and adb.
- Android NDK tools: ndk-build.
- Oracle Java JDK 8: java, and javac.
- Apache Ant: ant.
- Git: git.
- GNU Make: make, or gmake.
- C compiler: cc, gcc, or clang.
构建
使用 Git 下载工程(不要忘了加上 –recursive 标记):
加上 –recursive 标记是为了让 Git 可以递归地下载 mupdf-android-viewer-mini 工程及其依赖的所有工程。MuPDF 由于牵涉到多个模块,因而采用了 Git 的 submodule 机制来管理这些模块。在 mupdf-android-viewer-mini 工程的根目录下,有一个名为 .gitmodules
描述了它依赖的子模块:
在下载代码时,加了 –recursive 标记,Git 在下载完 mupdf-android-viewer-mini 工程之后,就会下载 mupdf-android-fitz 工程,并把它放在 mupdf-android-viewer-mini 工程的 jni
子目录下。而在 mupdf-android-fitz 工程的根目录下,同样有一个 .gitmodules
文件,描述 mupdf-android-fitz 工程依赖的模块:
Git 在下载完 mupdf-android-fitz 工程之后,还会下载这些模块,并放在 mupdf-android-fitz 工程目录的 thirdparty
目录下,即 mupdf-android-viewer-mini/jni/libmupdf
目录下。
直接使用 Git 的 –recursive 标记下载,与如下的命令序列是等价的:
在开始构建之前,还需要在 mupdf-android-viewer-mini 工程的根目录下创建 local.properties
文件,配置 Android SDK 和 NDK 的路径:
此外,还需要在 mupdf-android-viewer-mini/jni/libmupdf
目录下执行 make generate
命令生成必要的文件:
否则,如果直接执行 make
进行构建,将很快报出找不到某些文件的错误:
之后就可以在 mupdf-android-viewer-mini 工程的根目录下执行如下命令来构建了:
查看 mupdf-android-viewer-mini 工程的 Makefile 文件的内容:
执行 make
只是调用了 gradle 命令 ./gradlew assembleDebug
。
执行上面的 make
命令,在执行到为 armeabi ABI 编译动态链接库时将报错:
默认情况下,./gradlew assembleDebug
将为 ‘armeabi’,’armeabi-v7a’,’arm64-v8a’,’x86’,’x86_64’,’mips’,’mips64’ 起种 ABI 构建动态链接库,但实际上对某些 ABI 的支持完全没有必要,比如早已过时的 ‘armeabi’,以及非常小众的 ‘mips’,’mips64’。因而修改 mupdf-android-viewer-mini/jni/build.gradle
文件,配置 ndk.abiFilters
,过滤掉不需要的 ABI:
无需编译 armeabi 的 abi 之后,mupdf-android-viewer-mini 工程顺利编译通过: