【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )
文章目錄
- 一、拷貝 p7zip 源碼中的頭文件到 Android Studio 項(xiàng)目中
- 二、配置 CMakeLists.txt 構(gòu)建腳本
- 1、導(dǎo)入動(dòng)態(tài)庫(kù)
- 2、導(dǎo)入頭文件
- 三、完整 CMakeLists.txt 構(gòu)建腳本示例
- 四、參考資料
前置博客 :
- 【Android 安裝包優(yōu)化】使用 lib7zr.so 動(dòng)態(tài)庫(kù)處理壓縮文件 ( 修改 7zr 交叉編譯腳本 Android.mk | 交叉編譯 lib7zr.so 動(dòng)態(tài)庫(kù) )
- 【Android 安裝包優(yōu)化】使用 lib7zr.so 動(dòng)態(tài)庫(kù)處理壓縮文件 ( 拷貝 lib7zr.so 動(dòng)態(tài)庫(kù)到 Android Studio 工程 | 配置 build.gradle 構(gòu)建腳本 )
一、拷貝 p7zip 源碼中的頭文件到 Android Studio 項(xiàng)目中
參考 【Android 安裝包優(yōu)化】使用 lib7zr.so 動(dòng)態(tài)庫(kù)處理壓縮文件 ( 修改 7zr 交叉編譯腳本 Android.mk | 交叉編譯 lib7zr.so 動(dòng)態(tài)庫(kù) ) 博客中的 p7zip 源碼 , D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\jni\Android.mk 中的 -I 引入頭文件參數(shù)中 , 涉及的頭文件目錄 ;
# 設(shè)置編譯器參數(shù) # -I 指定頭文件引入目錄 , 會(huì)引入后面目錄中所有的 .h 頭文件 LOCAL_CFLAGS := -DANDROID_NDK -fexceptions \-DNDEBUG -D_REENTRANT -DENV_UNIX \-DBREAK_HANDLER -D_NO_CRYPTO \-DUNICODE -D_UNICODE -DUNIX_USE_WIN_FILE \-I../../../7zip/Archive \-I../../../7zip/Archive/7z \-I../../../7zip/Archive/BZip2 \-I../../../7zip/Archive/Common \-I../../../7zip/Archive/GZip \-I../../../7zip/Archive/Cab \-I../../../7zip/Archive/Lzma \-I../../../7zip/Archive/Tar \-I../../../7zip/Archive/Zip \-I../../../7zip/Archive/Split \-I../../../7zip/Archive/Z \-I../../../7zip/Compress \-I../../../7zip/Crypto \-I../../../7zip/UI/Console \-I../../../7zip/UI/Common \-I../../../Windows \-I../../../Common \-I../../../7zip/Common \-I../../../../C \ -I../../../myWindows \ -I../../../ \ -I../../../include_windows構(gòu)建腳本在 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\jni\ 目錄中 , 對(duì)應(yīng)的 …/…/…/7zip/Archive 目錄是 D:\develop\7zip\p7zip_16.02\CPP\7zip\Archive 目錄 ,
頭文件都在 p7zip_16.02 源碼根目錄下的 C 和 CPP 目錄中 , 將這兩個(gè)目錄中的源碼拷貝到 Android Studio 工程下的 cpp 目錄中 , 為 lib7zr.so 動(dòng)態(tài)庫(kù)需要的頭文件創(chuàng)建一個(gè) lib7zr 目錄 , 存放相關(guān)源碼 ;
二、配置 CMakeLists.txt 構(gòu)建腳本
1、導(dǎo)入動(dòng)態(tài)庫(kù)
導(dǎo)入動(dòng)態(tài)庫(kù) :
參考 【Android NDK 開(kāi)發(fā)】Android Studio 使用 CMake 導(dǎo)入動(dòng)態(tài)庫(kù) ( 構(gòu)建腳本路徑配置 | 指定動(dòng)態(tài)庫(kù)查找路徑 | 鏈接動(dòng)態(tài)庫(kù) ) 博客 ;
注意不能使用 set_target_properties 設(shè)置導(dǎo)入動(dòng)態(tài)庫(kù) , 這種配置在 Android 6.06.06.0 以上的系統(tǒng)中 , 出現(xiàn)找不到路徑的問(wèn)題 ;
只能使用給 gcc / g++ 設(shè)置動(dòng)態(tài)庫(kù)查找路徑參數(shù)的方式 , 指定動(dòng)態(tài)庫(kù)的查找路徑 ;
使用 set() , 指定一個(gè) CMAKE_CXX_FLAGS 編譯器參數(shù) , 在編譯器參數(shù)后添加 -L 參數(shù)指定動(dòng)態(tài)庫(kù)查找目錄 ;
# 設(shè)置變量 # CMAKE_CXX_FLAGS 表示會(huì)將 C++ 的參數(shù)傳給編譯器 # CMAKE_C_FLAGS 表示會(huì)將 C 參數(shù)傳給編譯器# 參數(shù)設(shè)置 : 傳遞 CMAKE_CXX_FLAGS C+= 參數(shù)給編譯器時(shí) , 在 該參數(shù)后面指定庫(kù)的路徑 # CMAKE_SOURCE_DIR 指的是當(dāng)前的文件地址 # -L 參數(shù)指定動(dòng)態(tài)庫(kù)的查找路徑 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}")2、導(dǎo)入頭文件
導(dǎo)入頭文件 : 使用 include_directories 設(shè)置頭文件的查找路徑 ;
# 設(shè)置頭文件查找路徑 include_directories(lib7zr/CPP/7zip/Archivelib7zr/CPP/7zip/Archive/7zlib7zr/CPP/7zip/Archive/BZip2lib7zr/CPP/7zip/Archive/Commonlib7zr/CPP/7zip/Archive/GZiplib7zr/CPP/7zip/Archive/Cablib7zr/CPP/7zip/Archive/Lzmalib7zr/CPP/7zip/Archive/Tarlib7zr/CPP/7zip/Archive/Ziplib7zr/CPP/7zip/Archive/Splitlib7zr/CPP/7zip/Archive/Zlib7zr/CPP/7zip/Compresslib7zr/CPP/7zip/Cryptolib7zr/CPP/7zip/UI/Consolelib7zr/CPP/7zip/UI/Commonlib7zr/CPP/Windowslib7zr/CPP/Commonlib7zr/CPP/7zip/Commonlib7zr/Clib7zr/CPP/myWindowslib7zr/CPPlib7zr/CPP/include_windows)三、完整 CMakeLists.txt 構(gòu)建腳本示例
# 指定 CMake 最低版本 cmake_minimum_required(VERSION 3.4.1)# 設(shè)置函數(shù)庫(kù)編譯 add_library( # 參數(shù) 1 : 設(shè)置生成的動(dòng)態(tài)庫(kù)名稱(chēng)native-lib# 參數(shù) 2 : 設(shè)置生成的函數(shù)庫(kù)類(lèi)型 : ① 靜態(tài)庫(kù) STATIC ② 動(dòng)態(tài)庫(kù) SHAREDSHARED# 參數(shù) 3 : 配置要編譯的源文件native-lib.cpp)# 使用下面的方式引入動(dòng)態(tài)庫(kù)會(huì)出現(xiàn)于 Android.mk 配置一樣的問(wèn)題 , 6.0 以上的 Android 系統(tǒng)在運(yùn)行時(shí)出現(xiàn)找不到路徑的問(wèn)題# 引入動(dòng)態(tài)庫(kù) #add_library(add SHARED IMPORTED) # 設(shè)置函數(shù)庫(kù)的導(dǎo)入路徑 #set_target_properties(add PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/armeabi-v7a/libadd.so)# 打印日志信息 # ${ANDROID_ABI} 的作用是獲取當(dāng)前的 CPU 指令集架構(gòu) # 當(dāng)本次編譯 armeabi-v7a CPU 架構(gòu)時(shí) , ${ANDROID_ABI} 值為 armeabi-v7a # 當(dāng)本次編譯 x86 CPU 架構(gòu)時(shí) , ${ANDROID_ABI} 值為 x86 message("CMAKE_SOURCE_DIR : ${CMAKE_SOURCE_DIR}, ANDROID_ABI : ${ANDROID_ABI}")# 到預(yù)設(shè)的目錄查找 log 庫(kù) , 將找到的路徑賦值給 log-lib # 這個(gè)路徑是 NDK 的 ndk-bundle\platforms\android-29\arch-arm\usr\lib\liblog.so # 不同的 Android 版本號(hào) 和 CPU 架構(gòu) 需要到對(duì)應(yīng)的目錄中查找 , 此處是 29 版本 32 位 ARM 架構(gòu)的日志庫(kù) # # 可以不配置 : # 可以不進(jìn)行該配置, 直接在后面的 target_link_libraries 中鏈接 log 也不會(huì)出錯(cuò) find_library(log-liblog)# 打印日志庫(kù)位置 message(${log-lib})# 設(shè)置變量 # CMAKE_CXX_FLAGS 表示會(huì)將 C++ 的參數(shù)傳給編譯器 # CMAKE_C_FLAGS 表示會(huì)將 C 參數(shù)傳給編譯器# 參數(shù)設(shè)置 : 傳遞 CMAKE_CXX_FLAGS C+= 參數(shù)給編譯器時(shí) , 在 該參數(shù)后面指定庫(kù)的路徑 # CMAKE_SOURCE_DIR 指的是當(dāng)前的文件地址 # -L 參數(shù)指定動(dòng)態(tài)庫(kù)的查找路徑 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}")# 設(shè)置頭文件查找路徑 include_directories(lib7zr/CPP/7zip/Archivelib7zr/CPP/7zip/Archive/7zlib7zr/CPP/7zip/Archive/BZip2lib7zr/CPP/7zip/Archive/Commonlib7zr/CPP/7zip/Archive/GZiplib7zr/CPP/7zip/Archive/Cablib7zr/CPP/7zip/Archive/Lzmalib7zr/CPP/7zip/Archive/Tarlib7zr/CPP/7zip/Archive/Ziplib7zr/CPP/7zip/Archive/Splitlib7zr/CPP/7zip/Archive/Zlib7zr/CPP/7zip/Compresslib7zr/CPP/7zip/Cryptolib7zr/CPP/7zip/UI/Consolelib7zr/CPP/7zip/UI/Commonlib7zr/CPP/Windowslib7zr/CPP/Commonlib7zr/CPP/7zip/Commonlib7zr/Clib7zr/CPP/myWindowslib7zr/CPPlib7zr/CPP/include_windows)# 鏈接函數(shù)庫(kù) # 參數(shù) 1 : 本構(gòu)建腳本要生成的動(dòng)態(tài)庫(kù)目標(biāo) # 參數(shù) 2 ~ ... : 后面是之前預(yù)編譯的動(dòng)態(tài)庫(kù)或靜態(tài)庫(kù) , 或引入的動(dòng)態(tài)庫(kù) target_link_libraries(native-lib# 表示 編譯 native-lib 模塊, 要鏈接 lib7zr.so 模塊7zr${log-lib})
四、參考資料
參考資料 :
- 7-Zip 官網(wǎng) : https://www.7-zip.org/
Android NDK 編譯構(gòu)建腳本參考文檔 :
- ndk-build 腳本 : https://developer.android.google.cn/ndk/guides/ndk-build
- Android.mk 構(gòu)建腳本 : https://developer.android.google.cn/ndk/guides/android_mk
- Application.mk 構(gòu)建腳本 : https://developer.android.google.cn/ndk/guides/application_mk
博客資源 : 源碼 , 編譯后的可執(zhí)行文件, 在 7zip\p7zip_16.02\CPP\ANDROID\7zr\libs\ 目錄下 ;
- 下載地址 : https://download.csdn.net/download/han1202012/18215890
- GitHub 項(xiàng)目源碼 : https://github.com/han1202012/7-Zip
總結(jié)
以上是生活随笔為你收集整理的【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Android 安装包优化】使用 li
- 下一篇: 【Android 安装包优化】使用 li