Android studio编译libjpeg-turbo-2.0.0

前言

项目上jni里用了libjpeg-turbo-1.5.0,在优化项目时猜测这个库有点“老”了,就产生了编译最新版本的库的想法,然后下了虚拟机装了ubuntu,ubuntu上又装了各种工具,看文档BUILD.md也是各种懵逼,原来文档上说的命令都是要写到.sh脚本下的,然后在执行sh脚本。当你去寻找so库时会发现,so库生成在libjpeg-turbo-2.0.0文件夹下,而且文件夹下还有很多源码。而且每次执行一个脚本只能生成一个平台的so库,我又不知道如何一个脚本生成所有so库,感觉有点想暴走的冲动。
网上搜到可以用cmake在执行CMakeLists.txt编译jni,试了下,方便很多,记录一下。

具体实现

第一步:把libjpeg-turbo-2.0.0库放在jni文件夹下。
第二步:在app Module上右键选择第二项Link C++ Project With Gradle,然后选择CMakeLists.txt所在位置,点击ok。此时如果你没有安装cmake,AS会自动提示你安装cmake 。
第三步:在CMakeLists.txt中添加

#################################添加.so文件的输出位置#############################################
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../../libs/${ANDROID_ABI})

so文件将会生成在/main/libs下。${PROJECT_SOURCE_DIR}代表当前文件夹即CMakeLists.txt所在的libjpeg-turbo-2.0.0文件夹,/../表示上一层文件夹即jni文件夹,/../../就回到了main文件夹下。
第四步:点击make Project即可生成so文件了。
如果出现错误:More than one file was found with OS independent path 'lib/arm64-v8a/libturbojpeg.so'

在moudle:app的build.gradle下添加:
packagingOptions {
exclude 'lib/arm64-v8a/libturbojpeg.so'
exclude 'lib/x86/libturbojpeg.so'
exclude 'lib/armeabi-v7a/libturbojpeg.so'
exclude 'lib/x86_64/libturbojpeg.so'
}

你可能感兴趣的:(android)