1、环境准备
1、Android SDK:配置为环境变量
2、Android NDK:配置为环境变量
3、CygWin:这个东西安装的时候,要特别地把make组件选上,默认是不安装的。
展开Devel
在里面找到make,然后,Bin 和 Src 如果可以勾选都 勾选上,点击下一步就可以安装了
2、MuPDF源码下载
1 | git clone --recursive git://git.ghostscript.com/mupdf-android-viewer.git |
上面的指令会下载MuPDF的一个Android示例和MuPDF源码,示例无法直接运行,需要编译MuPDF后,才能生成.so文件。
可以通过以下指令,单独获取MuPDF源码和Jni代码
1 | git clone --recursive git://git.ghostscript.com/mupdf.git |
详情,可参考:
1、https://mupdf.com/docs/android-sdk.html
2、https://mupdf.com/
3、配置设置
(1)在工程的根目录下创建 local.properties 文件,配置 Android SDK 和 NDK 的路径:
1 | ## This file is automatically generated by Android Studio. |
(2)启动CygWin,在libmupdf 目录下执行 make generate 命令生成必要的文件:
1 | $ make generate |
4、编译
启动CMD,执行以下指令1
ndk-build APP_BUILD_SCRIPT=libmupdf/platform/java/Android.mk APP_PROJECT_DIR=build/android APP_PLATFORM=android-16 APP_OPTIM=release APP_ABI=armeabi-v7a NDK_ALL_ABIS=armeabi-v7a NDK_DEBUG=0 -j4 APP_SHORT_COMMANDS=true LOCAL_SHORT_COMMANDS=true -B -n
APP_SHORT_COMMANDS=true LOCAL_SHORT_COMMANDS=true 这两个参数是为了解决CmdLine内容过多,Windows参数限制问题。参考:https://stackoverflow.com/questions/12598933/ndk-build-createprocess-make-e-87-the-parameter-is-incorrect
以上指令,也可以配置在Application.mk文件中
编译有可能失败,可更换APP_SHORT_COMMANDS=true LOCAL_SHORT_COMMANDS=true这两个参数的值,再编译,即可成功。
5、总结
(1)这里没有整合Gradle来编译,因为Gradle的默认参数,会导致编译失败,需要特殊配置。大致如下:
1
2
3
4
5
6
7
8
9
10
11
12
13task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
commandLine 'C:\\Users\\xhrong\\AppData\\Local\\Android\\sdk\\ndk-bundle\\ndk-build.cmd',//这里本地ndk的路径
'NDK_LIBS_OUT=libs',
'APP_BUILD_SCRIPT=libmupdf/platform/java/Android.mk',
'APP_ABI=armeabi-v7a',
'APP_PLATFORM=android-16',
'APP_SHORT_COMMANDS=true',
'LOCAL_SHORT_COMMANDS=false'
}
tasks.withType(JavaCompile){
compileTask->compileTask.dependsOn ndkBuild
}
(2)整体上无法直接成功,需要修改参数多次编译。比较麻烦。