【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )
文章目錄
- 一、修改 7zr 交叉編譯腳本 Android.mk
- 二、完整的 7zr 交叉編譯腳本 Android.mk
- 三、交叉編譯 lib7zr.a 靜態(tài)庫
- 四、Android Studio 導(dǎo)入 lib7zr.a 靜態(tài)庫
- 五、參考資料
前置博客 :
- 【Android 安裝包優(yōu)化】使用 lib7zr.so 動態(tài)庫處理壓縮文件 ( 修改 7zr 交叉編譯腳本 Android.mk | 交叉編譯 lib7zr.so 動態(tài)庫 )
- 【Android 安裝包優(yōu)化】使用 lib7zr.so 動態(tài)庫處理壓縮文件 ( 拷貝 lib7zr.so 動態(tài)庫到 Android Studio 工程 | 配置 build.gradle 構(gòu)建腳本 )
- 【Android 安裝包優(yōu)化】使用 lib7zr.so 動態(tài)庫處理壓縮文件 ( 拷貝 lib7zr.so 動態(tài)庫頭文件到 Android 工程中 | 配置 CMakeLists.txt 構(gòu)建腳本 )
- 【Android 安裝包優(yōu)化】使用 lib7zr.so 動態(tài)庫處理壓縮文件 ( 測試 lib7zr.so 動態(tài)庫調(diào)用 )
- 【Android 安裝包優(yōu)化】使用 lib7zr.so 動態(tài)庫處理壓縮文件 ( jni 中 main 函數(shù)聲明 | 命令行處理 | jni 調(diào)用 lib7zr.so 函數(shù)庫處理壓縮文件完整代碼 )
在之前的一系列博客中使用 lib7zr.so 動態(tài)庫處理壓縮文件 , 本篇博客中使用靜態(tài)庫處理壓縮文件 , 僅做參考 ;
一、修改 7zr 交叉編譯腳本 Android.mk
之前的博客 【Android 安裝包優(yōu)化】p7zip 源碼交叉編譯 Android 平臺可執(zhí)行程序 ( 下載 p7zip 源碼 | 交叉編譯 Android 中使用 7z 可執(zhí)行程序 ) 中 , 下載并編譯了 p7zip 開源項目源碼 , 交叉編譯出了可以在 Android 平臺執(zhí)行的可執(zhí)行文件 ;
D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr 目錄下是 7zr 項目的構(gòu)建腳本 Android.mk 和 Application.mk , 主要使用該構(gòu)建腳本交叉編譯出
- 可執(zhí)行文件 7zr
- 靜態(tài)庫 lib7zr.a ;
進(jìn)入 7zr 目錄下 , 有一個 jni 目錄 和 makefile 文件 ,
jni 目錄中是 Android.mk 和 Application.mk 兩個構(gòu)建腳本 , 可以使用 ndk-build 進(jìn)行編譯 ;
打開該 makefile 文件 , 該文件最后幾行代碼給出了相關(guān)操作方法 ;
# FIXME debug:cd jni ; ndk-build NDK_DEBUG=1adb push ./libs/armeabi/7zr /data/app/adb push ./libs/armeabi/gdbserver /data/app/adb shell chmod 777 /data/app/7zradb shell chmod 777 /data/app/gdbserveradb forward tcp:1234: tcp:1234adb shell /data/app/gdbserver :1234 /data/app/7zr進(jìn)入 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\jni 目錄 , 執(zhí)行 ndk-build 命令 , 進(jìn)行交叉編譯 ;
修改 Application.mk 構(gòu)建腳本 :
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 APP_PLATFORM := android-8注釋可執(zhí)行文件的編譯選項 : -fPIE 指的是生成與地址無關(guān)的可執(zhí)行文件 , 該選項只能應(yīng)用于可執(zhí)行文件 , 不能用于靜態(tài)庫編譯 ;
# Needed since ANDROID 5, these programs run on android-16 (Android 4.1+) # -fPIE 指的是生成與地址無關(guān)的可執(zhí)行文件 , 該選項只能應(yīng)用于可執(zhí)行文件 , # 不能用于動態(tài)庫編譯 # 如果編譯動態(tài)庫 , 需要注釋掉下面兩個配置 # 如果編譯靜態(tài)庫 , 需要注釋掉下面兩個配置 # 如果編譯可執(zhí)行文件 , 可以保留下面兩個配置 #LOCAL_CFLAGS += -fPIE #LOCAL_LDFLAGS += -fPIE -pie設(shè)置 Android.mk 構(gòu)建腳本的編譯結(jié)果 :
include $(BUILD_STATIC_LIBRARY)-
include $(BUILD_EXECUTABLE) 配置表示生成可執(zhí)行文件 ;
-
include $(BUILD_SHARED_LIBRARY) 配置表示生成 .so 動態(tài)庫 ;
-
include $(BUILD_STATIC_LIBRARY) 配置表示生成 .a 靜態(tài)庫 ;
二、完整的 7zr 交叉編譯腳本 Android.mk
修改完成的構(gòu)建腳本 :
# # build 7zr for armeabi and armeabi-v7a CPU # # WARNING : file generated by generate.py #LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# 編譯模塊 # 如果編譯可執(zhí)行文件, 編譯結(jié)果是 7zr # 如果編譯動態(tài)庫, 編譯結(jié)果是 lib7zr.so # 如果編譯靜態(tài)庫, 編譯結(jié)果是 lib7zr.a LOCAL_MODULE := 7zr# 設(shè)置編譯器參數(shù) # -I 指定頭文件引入目錄 , 會引入后面目錄中所有的 .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# 源文件引入 LOCAL_SRC_FILES := \../../../../CPP/7zip/Archive/7z/7zCompressionMode.cpp \../../../../CPP/7zip/Archive/7z/7zDecode.cpp \../../../../CPP/7zip/Archive/7z/7zEncode.cpp \../../../../CPP/7zip/Archive/7z/7zExtract.cpp \../../../../CPP/7zip/Archive/7z/7zFolderInStream.cpp \../../../../CPP/7zip/Archive/7z/7zHandler.cpp \../../../../CPP/7zip/Archive/7z/7zHandlerOut.cpp \../../../../CPP/7zip/Archive/7z/7zHeader.cpp \../../../../CPP/7zip/Archive/7z/7zIn.cpp \../../../../CPP/7zip/Archive/7z/7zOut.cpp \../../../../CPP/7zip/Archive/7z/7zProperties.cpp \../../../../CPP/7zip/Archive/7z/7zRegister.cpp \../../../../CPP/7zip/Archive/7z/7zSpecStream.cpp \../../../../CPP/7zip/Archive/7z/7zUpdate.cpp \../../../../CPP/7zip/Archive/Common/CoderMixer2.cpp \../../../../CPP/7zip/Archive/Common/DummyOutStream.cpp \../../../../CPP/7zip/Archive/Common/HandlerOut.cpp \../../../../CPP/7zip/Archive/Common/InStreamWithCRC.cpp \../../../../CPP/7zip/Archive/Common/ItemNameUtils.cpp \../../../../CPP/7zip/Archive/Common/MultiStream.cpp \../../../../CPP/7zip/Archive/Common/OutStreamWithCRC.cpp \../../../../CPP/7zip/Archive/Common/ParseProperties.cpp \../../../../CPP/7zip/Archive/LzmaHandler.cpp \../../../../CPP/7zip/Archive/SplitHandler.cpp \../../../../CPP/7zip/Archive/XzHandler.cpp \../../../../CPP/7zip/Common/CWrappers.cpp \../../../../CPP/7zip/Common/CreateCoder.cpp \../../../../CPP/7zip/Common/FilePathAutoRename.cpp \../../../../CPP/7zip/Common/FileStreams.cpp \../../../../CPP/7zip/Common/FilterCoder.cpp \../../../../CPP/7zip/Common/InBuffer.cpp \../../../../CPP/7zip/Common/InOutTempBuffer.cpp \../../../../CPP/7zip/Common/LimitedStreams.cpp \../../../../CPP/7zip/Common/MethodId.cpp \../../../../CPP/7zip/Common/MethodProps.cpp \../../../../CPP/7zip/Common/OffsetStream.cpp \../../../../CPP/7zip/Common/OutBuffer.cpp \../../../../CPP/7zip/Common/ProgressUtils.cpp \../../../../CPP/7zip/Common/PropId.cpp \../../../../CPP/7zip/Common/StreamBinder.cpp \../../../../CPP/7zip/Common/StreamObjects.cpp \../../../../CPP/7zip/Common/StreamUtils.cpp \../../../../CPP/7zip/Common/UniqBlocks.cpp \../../../../CPP/7zip/Common/VirtThread.cpp \../../../../CPP/7zip/Compress/Bcj2Coder.cpp \../../../../CPP/7zip/Compress/Bcj2Register.cpp \../../../../CPP/7zip/Compress/BcjCoder.cpp \../../../../CPP/7zip/Compress/BcjRegister.cpp \../../../../CPP/7zip/Compress/BranchMisc.cpp \../../../../CPP/7zip/Compress/BranchRegister.cpp \../../../../CPP/7zip/Compress/ByteSwap.cpp \../../../../CPP/7zip/Compress/CopyCoder.cpp \../../../../CPP/7zip/Compress/CopyRegister.cpp \../../../../CPP/7zip/Compress/DeltaFilter.cpp \../../../../CPP/7zip/Compress/Lzma2Decoder.cpp \../../../../CPP/7zip/Compress/Lzma2Encoder.cpp \../../../../CPP/7zip/Compress/Lzma2Register.cpp \../../../../CPP/7zip/Compress/LzmaDecoder.cpp \../../../../CPP/7zip/Compress/LzmaEncoder.cpp \../../../../CPP/7zip/Compress/LzmaRegister.cpp \../../../../CPP/7zip/UI/Common/ArchiveCommandLine.cpp \../../../../CPP/7zip/UI/Common/ArchiveExtractCallback.cpp \../../../../CPP/7zip/UI/Common/ArchiveOpenCallback.cpp \../../../../CPP/7zip/UI/Common/Bench.cpp \../../../../CPP/7zip/UI/Common/DefaultName.cpp \../../../../CPP/7zip/UI/Common/EnumDirItems.cpp \../../../../CPP/7zip/UI/Common/Extract.cpp \../../../../CPP/7zip/UI/Common/ExtractingFilePath.cpp \../../../../CPP/7zip/UI/Common/HashCalc.cpp \../../../../CPP/7zip/UI/Common/LoadCodecs.cpp \../../../../CPP/7zip/UI/Common/OpenArchive.cpp \../../../../CPP/7zip/UI/Common/PropIDUtils.cpp \../../../../CPP/7zip/UI/Common/SetProperties.cpp \../../../../CPP/7zip/UI/Common/SortUtils.cpp \../../../../CPP/7zip/UI/Common/TempFiles.cpp \../../../../CPP/7zip/UI/Common/Update.cpp \../../../../CPP/7zip/UI/Common/UpdateAction.cpp \../../../../CPP/7zip/UI/Common/UpdateCallback.cpp \../../../../CPP/7zip/UI/Common/UpdatePair.cpp \../../../../CPP/7zip/UI/Common/UpdateProduce.cpp \../../../../CPP/7zip/UI/Console/BenchCon.cpp \../../../../CPP/7zip/UI/Console/ConsoleClose.cpp \../../../../CPP/7zip/UI/Console/ExtractCallbackConsole.cpp \../../../../CPP/7zip/UI/Console/HashCon.cpp \../../../../CPP/7zip/UI/Console/List.cpp \../../../../CPP/7zip/UI/Console/Main.cpp \../../../../CPP/7zip/UI/Console/MainAr.cpp \../../../../CPP/7zip/UI/Console/OpenCallbackConsole.cpp \../../../../CPP/7zip/UI/Console/PercentPrinter.cpp \../../../../CPP/7zip/UI/Console/UpdateCallbackConsole.cpp \../../../../CPP/7zip/UI/Console/UserInputUtils.cpp \../../../../CPP/Common/CRC.cpp \../../../../CPP/Common/CommandLineParser.cpp \../../../../CPP/Common/CrcReg.cpp \../../../../CPP/Common/IntToString.cpp \../../../../CPP/Common/ListFileUtils.cpp \../../../../CPP/Common/MyString.cpp \../../../../CPP/Common/MyVector.cpp \../../../../CPP/Common/MyWindows.cpp \../../../../CPP/Common/NewHandler.cpp \../../../../CPP/Common/Sha256Reg.cpp \../../../../CPP/Common/StdInStream.cpp \../../../../CPP/Common/StdOutStream.cpp \../../../../CPP/Common/StringConvert.cpp \../../../../CPP/Common/StringToInt.cpp \../../../../CPP/Common/UTFConvert.cpp \../../../../CPP/Common/Wildcard.cpp \../../../../CPP/Common/XzCrc64Reg.cpp \../../../../CPP/Windows/ErrorMsg.cpp \../../../../CPP/Windows/FileDir.cpp \../../../../CPP/Windows/FileFind.cpp \../../../../CPP/Windows/FileIO.cpp \../../../../CPP/Windows/FileName.cpp \../../../../CPP/Windows/PropVariant.cpp \../../../../CPP/Windows/PropVariantConv.cpp \../../../../CPP/Windows/Synchronization.cpp \../../../../CPP/Windows/System.cpp \../../../../CPP/Windows/TimeUtils.cpp \../../../../CPP/myWindows/myAddExeFlag.cpp \../../../../CPP/myWindows/mySplitCommandLine.cpp \../../../../CPP/myWindows/wine_date_and_time.cpp \../../../../C/7zCrc.c \../../../../C/7zCrcOpt.c \../../../../C/7zStream.c \../../../../C/Alloc.c \../../../../C/Bcj2.c \../../../../C/Bcj2Enc.c \../../../../C/Bra.c \../../../../C/Bra86.c \../../../../C/BraIA64.c \../../../../C/CpuArch.c \../../../../C/Delta.c \../../../../C/LzFind.c \../../../../C/LzFindMt.c \../../../../C/Lzma2Dec.c \../../../../C/Lzma2Enc.c \../../../../C/LzmaDec.c \../../../../C/LzmaEnc.c \../../../../C/MtCoder.c \../../../../C/Sha256.c \../../../../C/Threads.c \../../../../C/Xz.c \../../../../C/XzCrc64.c \../../../../C/XzCrc64Opt.c \../../../../C/XzDec.c \../../../../C/XzEnc.c \../../../../C/XzIn.c \# Needed since ANDROID 5, these programs run on android-16 (Android 4.1+) # -fPIE 指的是生成與地址無關(guān)的可執(zhí)行文件 , 該選項只能應(yīng)用于可執(zhí)行文件 , # 不能用于動態(tài)庫編譯 # 如果編譯動態(tài)庫 , 需要注釋掉下面兩個配置 # 如果編譯可執(zhí)行文件 , 可以保留下面兩個配置 #LOCAL_CFLAGS += -fPIE #LOCAL_LDFLAGS += -fPIE -pie# include $(BUILD_EXECUTABLE) 配置表示生成可執(zhí)行文件 # include $(BUILD_SHARED_LIBRARY) 配置表示生成 .so 動態(tài)庫 # include $(BUILD_STATIC_LIBRARY) 配置表示生成 .a 靜態(tài)庫 # 此處生成靜態(tài)庫 include $(BUILD_STATIC_LIBRARY)三、交叉編譯 lib7zr.a 靜態(tài)庫
使用最低版本的 NDK 進(jìn)行編譯 , 使用高版本 NDK 編譯各種報錯 ;
使用 16.1.4479499 版本的 NDK 進(jìn)行編譯 :
>D:\001_Programs\001_Android\002_Sdk\Sdk\ndk\16.1.4479499\ndk-build.cmd進(jìn)入 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\jni 目錄 , 執(zhí)行如下命令 :
D:\001_Programs\001_Android\002_Sdk\Sdk\ndk\16.1.4479499\ndk-build.cmd編譯要很長時間 , 輸出如下結(jié)果后 ,
最終在 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\libs\armeabi-v7a 目錄下 , 生成了可執(zhí)行的 7zr 程序 ;
總共生成了 444 種 CPU 架構(gòu)的 靜態(tài)庫 ; 注意靜態(tài)庫的生成位置 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\obj\local 目錄下 ;
靜態(tài)庫編譯出來體積比較大 , 此處 lib7zr.a 靜態(tài)庫有 9.15 MB , 靜態(tài)庫編譯時將所有的符號都編譯在其中 , 因此比動態(tài)庫大十幾倍 ;
動態(tài)庫編譯后體積較小 , 方便分發(fā) , 常用的第三方服務(wù) , 以及開源代碼都使用動態(tài)庫進(jìn)行分發(fā) ;
編譯過程中其它生成文件如下圖 :
編譯時遇到的錯誤 :
- 【錯誤記錄】Android Studio 導(dǎo)入外部 so 動態(tài)庫報錯 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包動態(tài)庫的 CPU 架構(gòu) )
- 【錯誤記錄】p7zip 交叉編譯 Android 版本 NDK 報錯 ( error: case value evaluates to -2 , which cannot be narrowed )
四、Android Studio 導(dǎo)入 lib7zr.a 靜態(tài)庫
主要是修改 CMakeLists.txt 構(gòu)建腳本 , 其它位置不需要修改 ;
# 指定 CMake 最低版本 cmake_minimum_required(VERSION 3.4.1)# 設(shè)置函數(shù)庫編譯 add_library( # 參數(shù) 1 : 設(shè)置生成的動態(tài)庫名稱native-lib# 參數(shù) 2 : 設(shè)置生成的函數(shù)庫類型 : ① 靜態(tài)庫 STATIC ② 動態(tài)庫 SHAREDSHARED# 參數(shù) 3 : 配置要編譯的源文件../cpp/native-lib.cpp)# 打印日志信息 # ${ANDROID_ABI} 的作用是獲取當(dāng)前的 CPU 指令集架構(gòu) # 當(dāng)本次編譯 armeabi-v7a CPU 架構(gòu)時 , ${ANDROID_ABI} 值為 armeabi-v7a # 當(dāng)本次編譯 x86 CPU 架構(gòu)時 , ${ANDROID_ABI} 值為 x86 message("CMAKE_SOURCE_DIR : ${CMAKE_SOURCE_DIR}, ANDROID_ABI : ${ANDROID_ABI}")# 到預(yù)設(shè)的目錄查找 log 庫 , 將找到的路徑賦值給 log-lib # 這個路徑是 NDK 的 ndk-bundle\platforms\android-29\arch-arm\usr\lib\liblog.so # 不同的 Android 版本號 和 CPU 架構(gòu) 需要到對應(yīng)的目錄中查找 , 此處是 29 版本 32 位 ARM 架構(gòu)的日志庫 # # 可以不配置 : # 可以不進(jìn)行該配置, 直接在后面的 target_link_libraries 中鏈接 log 也不會出錯 find_library(log-liblog)# 打印日志庫位置 message(${log-lib})# 引入靜態(tài)庫 ( 推薦 ) : # ① 參數(shù) 1 ( add ) : 設(shè)置引入的靜態(tài)庫名稱 # ② 參數(shù) 2 ( SHARED ) : 設(shè)置引入的函數(shù)庫類型 : ① 靜態(tài)庫 STATIC ② 動態(tài)庫 SHARED # ③ 參數(shù) 3 ( IMPORTED ) : 表示引入第三方靜態(tài)庫 , 導(dǎo)入靜態(tài)庫 , 相當(dāng)于預(yù)編譯靜態(tài)庫 # 后續(xù)還需要設(shè)置導(dǎo)入路徑 , 配合該配置使用 add_library(# 設(shè)置引入的靜態(tài)庫名稱7zr# 設(shè)置引入的函數(shù)庫類型為靜態(tài)庫STATIC# 表示引入第三方靜態(tài)庫IMPORTED)# 設(shè)置上述靜態(tài)庫的導(dǎo)入路徑 # 設(shè)置目標(biāo)屬性參數(shù) : # ① 參數(shù) 1 ( add ) : 要設(shè)置哪個函數(shù)庫的屬性 # ② 參數(shù) 2 ( PROPERTIES ) : 設(shè)置目標(biāo)屬性 # ③ 參數(shù) 3 ( IMPORTED_LOCATION ) : 設(shè)置導(dǎo)入路徑 # ④ 參數(shù) 4 : 配置靜態(tài)庫的文件路徑 set_target_properties(# 設(shè)置目標(biāo)7zr# 設(shè)置屬性PROPERTIES# 導(dǎo)入路徑IMPORTED_LOCATION# ${CMAKE_SOURCE_DIR} 是本 CMakeList.txt 構(gòu)建腳本的路徑 , 是 CMake 工具內(nèi)置的變量# Android CMake 也內(nèi)置了一些變量 , 如 ANDROID_ABI${CMAKE_SOURCE_DIR}/${ANDROID_ABI}/lib7zr.a)# 打印靜態(tài)庫位置 message("靜態(tài)庫位置 : ${CMAKE_SOURCE_DIR}/${ANDROID_ABI}/lib7zr.a")# 引入動態(tài)庫 (不推薦) : 使用下面的方式引入動態(tài)庫會出現(xiàn)于 Android.mk 配置一樣的問題 , 6.0 以上的 Android 系統(tǒng)在運(yùn)行時出現(xiàn)找不到路徑的問題 #add_library(add SHARED IMPORTED) # 設(shè)置函數(shù)庫的導(dǎo)入路徑 #set_target_properties(add PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/armeabi-v7a/libadd.so)# 引入動態(tài)庫 (推薦) : # 設(shè)置變量 # CMAKE_CXX_FLAGS 表示會將 C++ 的參數(shù)傳給編譯器 # CMAKE_C_FLAGS 表示會將 C 參數(shù)傳給編譯器# 參數(shù)設(shè)置 : 傳遞 CMAKE_CXX_FLAGS C+= 參數(shù)給編譯器時 , 在 該參數(shù)后面指定庫的路徑 # CMAKE_SOURCE_DIR 指的是當(dāng)前的文件地址 # -L 參數(shù)指定動態(tài)庫的查找路徑 #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}")# 設(shè)置頭文件查找路徑 include_directories(../cpp/lib7zr/CPP/7zip/Archive../cpp/lib7zr/CPP/7zip/Archive/7z../cpp/lib7zr/CPP/7zip/Archive/BZip2../cpp/lib7zr/CPP/7zip/Archive/Common../cpp/lib7zr/CPP/7zip/Archive/GZip../cpp/lib7zr/CPP/7zip/Archive/Cab../cpp/lib7zr/CPP/7zip/Archive/Lzma../cpp/lib7zr/CPP/7zip/Archive/Tar../cpp/lib7zr/CPP/7zip/Archive/Zip../cpp/lib7zr/CPP/7zip/Archive/Split../cpp/lib7zr/CPP/7zip/Archive/Z../cpp/lib7zr/CPP/7zip/Compress../cpp/lib7zr/CPP/7zip/Crypto../cpp/lib7zr/CPP/7zip/UI/Console../cpp/lib7zr/CPP/7zip/UI/Common../cpp/lib7zr/CPP/Windows../cpp/lib7zr/CPP/Common../cpp/lib7zr/CPP/7zip/Common../cpp/lib7zr/C../cpp/lib7zr/CPP/myWindows../cpp/lib7zr/CPP../cpp/lib7zr/CPP/include_windows)# 鏈接函數(shù)庫 # 參數(shù) 1 : 本構(gòu)建腳本要生成的動態(tài)庫目標(biāo) # 參數(shù) 2 ~ ... : 后面是之前預(yù)編譯的動態(tài)庫或靜態(tài)庫 , 或引入的動態(tài)庫 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\ 目錄下 ;
- 下載地址 :
- GitHub 項目源碼 : https://github.com/han1202012/7-Zip
總結(jié)
以上是生活随笔為你收集整理的【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 高性能音频】Oboe
- 下一篇: 【Android 安装包优化】Andro