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'
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章