diff --git a/minizip-ng/CMakeLists.txt b/minizip-ng/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..80106e9cf9eec3d64707abf6ff50e6b4006b9f92 --- /dev/null +++ b/minizip-ng/CMakeLists.txt @@ -0,0 +1,112 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.4.1) +project(minizip-ng) + +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../libiconv/ libiconv_binary_dir) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../openssl openssl_binary_dir) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../bzip2 bzip2_binary_dir) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../zstd zstd_binary_dir) + +set(MINIZIP_SOURCE_DIR + ${CMAKE_CURRENT_SOURCE_DIR}/../libiconv/libiconv/ + ${CMAKE_CURRENT_SOURCE_DIR}/../libiconv/libiconv/lib/ + ${CMAKE_CURRENT_SOURCE_DIR}/../libiconv/libiconv/libcharset/ + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/openssl/ + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/openssl/crypto/ + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/openssl/include/ + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/openssl/include/openssl/ + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/openssl/crypto/modes/ + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/openssl/crypto/ec/curve448/ + ${CMAKE_CURRENT_SOURCE_DIR}/../openssl/openssl/crypto/ec/curve448/arch_32/ + ${CMAKE_CURRENT_SOURCE_DIR}/../bzip2/bzip2/ + ${CMAKE_CURRENT_SOURCE_DIR}/../zlib/zlib/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/src/liblzma/api/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/src/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/dos/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/src/lz/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/src/lzma/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/src/common/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/src/liblzma/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/src/liblzma/common/ + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/xz/src/liblzma/check/ + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/zstd/ + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/zstd/lib/ + ${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/ + ) + +set(MINIZIP_DEFINITIONS + -DHAVE_BZIP2 + -DHAVE_INTTYPES_H + -DHAVE_PKCRYPT + -DHAVE_STDINT_H + -DHAVE_WZAES + -DHAVE_ZLIB + -DHAVE_ZSTD + -DHAVE_LZMA + -DMZ_ZIP_SIGNING + -DHAVE_ICONV + -DLZMA_API_STATIC + -D_POSIX_C_SOURCE=200112L + -DOPENSSL_ARM64_PLATFORM + -D_GNU_SOURCE + ) + +set(MINIZIP_SOURCE + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_compat.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_crypt.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_crypt_openssl.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_os.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_os_posix.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_buf.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_bzip.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_mem.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_os_posix.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_pkcrypt.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_split.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_wzaes.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_zlib.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_zip.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_zip_rw.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_lzma.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_zstd.c") + +set(MINIZIP_FLAG -fPIC + -Wno-error=implicit-function-declaration + -Wall + -Wextra + -Wno-error=missing-braces + -Wno-missing-braces + -Wno-error=visibility + -Wno-visibility + -Wno-error=unused-function + -Wno-unused-function + -Wno-error=unused-variable + -Wno-unused-variable + -Wno-error=undef + -Wno-error=deprecated-declarations + -Wno-deprecated-declarations + -Wno-error=sign-compare + -Wno-error=parentheses-equality + -Wno-parentheses-equality + -Wno-incompatible-pointer-types + -Wno-unused-command-line-argument + -Wno-error=unused-parameter + -Wno-unused-parameter + -Wno-error=header-hygiene + -frtti + -fexceptions + -std=gnu99) + +add_library(minizip_shared SHARED ${MINIZIP_SOURCE}) +target_compile_options(minizip_shared PRIVATE ${MINIZIP_FLAG}) +target_compile_definitions(minizip_shared PRIVATE ${MINIZIP_DEFINITIONS}) +target_include_directories(minizip_shared PRIVATE ${MINIZIP_SOURCE_DIR}) + +target_link_libraries(minizip_shared bzip2) +target_link_libraries(minizip_shared iconv) +target_link_libraries(minizip_shared zstd) +target_link_libraries(minizip_shared openssl) +target_link_libraries(minizip_shared z) +target_link_libraries(minizip_shared xz) \ No newline at end of file diff --git a/minizip-ng/README_zh.md b/minizip-ng/README_zh.md index 14ffe46ec138fb85def2628e7b1c442d96ad30fb..9c8cdc5ba42d7aca885b63c8026faadacc4b84bf 100644 --- a/minizip-ng/README_zh.md +++ b/minizip-ng/README_zh.md @@ -7,11 +7,13 @@ minizip是一个用C编写的zip文件操作库。 - ROM版本:OpenHarmony3.2 Beta1 - API版本:9 - 三方库版本:3.0.4 -- 当前适配的功能:完成了创建和解压BZIP2、LZMA、XZ和ZSTD格式的zip文件 +- 当前适配的功能:完成了 .zip 格式文件的压缩、解压缩 - [License : zlib](https://github.com/zlib-ng/minizip-ng/tree/3.0.4/LICENSE) ## 集成方式 + [系统Rom包集成](docs/rom_integrate.md) ++ [应用Hap包集成](docs/hap_integrate.md) + diff --git a/minizip-ng/docs/hap_integrate.md b/minizip-ng/docs/hap_integrate.md new file mode 100644 index 0000000000000000000000000000000000000000..119c2c8574f6a648cb7fd86ed88d74dd1ed95bf4 --- /dev/null +++ b/minizip-ng/docs/hap_integrate.md @@ -0,0 +1,140 @@ +# minizip-ng 如何集成到应用hap +## 准备应用工程 +​ 本次验证所用的开发板型号为:rk3568。其中,系统源码版本为:openharmony 3.2 Beta1。 +### 准备应用开发环境 +- 开发工具:DevEco Studio 3.0 Beta4 +- SDK版本: openharmony API 9 + +### 增加构建脚本及配置文件 + +- 下载本仓库代码 + + ``` + cd ~/ + git clone git@gitee.com:openharmony-sig/tpc_c_cplusplus.git --depth=1 # 将本仓库下载到本地 + ``` + +- 仓库代码目录结构说明 + + ``` + tpc_c_cplusplus/minizip-ng + ├── docs # 存放三方库相关文档的文件夹 + ├── BUILD.gn # 构建脚本,支持rom包集成 + ├── bundle.json # 三方库组件定义文件 + ├── CMakeLists.txt # 构建脚本,支持hap包集成 + ├── README.OpenSource # 说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将上面的minizip-ng目录及其下面所有文件放在“工程名称\entry\src\main\cpp\third_party”文件夹下。 + +### 准备三方库源码 + +使用如下命令下载三方库minizip-ng源码。 +``` +cd ~/ +git clone -b 3.0.4 https://github.com/zlib-ng/minizip-ng.git +``` + +将下载的三方库minizip-ng的源码放在“工程名称\entry\src\main\cpp\third_party\minizip-ng”文件夹,如下: + +``` +工程名称/entry/src/main/cpp/third_party/minizip-ng +├── docs # 存放三方库相关文档的文件夹 +├── BUILD.gn # 构建脚本,支持rom包集成 +├── bundle.json # 三方库组件定义文件 +├── minizip-ng # 三方库minizip-ng源码目录 +├── CMakeLists.txt # 构建脚本,支持hap包集成 +├── README.OpenSource # 说明三方库源码的下载地址,版本,license等信息 +├── README_zh.md +``` + +添加其它依赖的三方库 +由于minizip-ng依赖iconv、openssl、zlib、bzip2、zstd和lzma。另外,DevEco已经支持zlib库,只需引用库即可,所以,需要在工程中和minizip-ng源码平行的目录中添加以下库代码。 + +- [工程中添加iconv代码的方法]() +- [工程中添加openssl代码的方法]() +- [工程中添加bzip2代码的方法]() +- [工程中添加zstd代码的方法]() +- [工程中添加lzma代码的方法]() + +## 应用中使用三方库 +- 接口声明: + ``` + // 操作命令描述 + interface miniOptions { + include_path?:number // 包含全路径的方式压缩或者解压 + compress_level?:number // 压缩级别 + compress_method?:number // 压缩方式 + overwrite?:number // 以覆盖方式压缩或者解压 + append?:number // 以追加方式压缩或者解压 + disk_size?:number // 磁盘大小 + follow_links?:number // 跟踪符号链接 + store_links?:number // 存储符号链接 + zip_cd?:number // 压缩中心目录 + encoding?:number // 文件使用编码方式 + verbose?:number // 打印当前压缩/解压缩操作的进度 + } + // 接口参数描述 + interface miniProperty { + path:string // 压缩生成的文件/需要被解压的文件路径 + password?:string // 密码(可选) + operate?:string // 调用的接口名称(可选) + file_extract?:string // 保存解压后文件的文件夹(可选) + option:miniOptions // 操作命令描述 + directory?:string // 文件所在路径(可选) + files?:Array // 需要被压缩的文件列表(可选) + } + export const create : () => minizipNapi; + export class minizipNapi { + compress(data:object):number; + decompress(data:object):number; + } + ``` +- 接口使用:
+ 如下代码为ets中对minizip库压缩功能的使用。分别将file1.txt文件压缩成result.zip文件和将该result.zip文件中内容解压到out目录。 + + ``` + // 压缩文件 + compress({path:this.dir + "result.zip", operate:"compress", + option:{append:1, compress_level:9 }, files:[this.dir + "file1.txt"]}); + // 解压缩文件 + decompress({path:this.dir + "result.zip", operate:"decompress", + option:{overwrite:1, compress_level:9}, directory:this.dir + "out"}); + // 生成带密码,带全路径的压缩文件 + compress({path:this.dir + "result1.zip", password:"test", operate:"compress", + option:{overwrite:1,compress_level:9}, files:[this.dir + "file1.txt"]}); + // 解压带密码,带全路径的压缩文件 + decompress({path:this.dir + "result1.zip", password:"test", operate:"decompress", + option:{overwrite:1, compress_level:9}, directory:this.dir + "out"}) + ``` +- 应用中链接三方库 + 打开“工程名称\entry\src\main\cpp\CMakeLists.txt”,添加如下字段: + + ``` + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/minizip-ng) + add_library(entry SHARED minizipNapi.cpp minizip.cpp) + target_link_libraries(entry PUBLIC libace_napi.z.so minizip_shared) + ``` +## 编译工程 +- 连接上设备后,DevEco Studio就会显示被发现设备。然后,点击“运行”,即可依次完成该应用“编译”和“安装”的过程,如图: +  ![install](pic/install.png) +## 运行效果 +安装hap应用后,在ets界面依次完成:压缩文件、解压缩文件、生成带密码和带全路径的压缩文件、解压带密码和带全路径的压缩文件操作后的结果,如下图:
+ ![ets_results](pic/ets_results.png) + +## 参考资料 +- [本文档涉及的技术补充说明](rom_integrate.md) +- [本文档引用的相关参考](rom_integrate.md) +- [相关案例参考](rom_integrate.md) + + + + + + + + + + + diff --git a/minizip-ng/docs/pic/ets_results.png b/minizip-ng/docs/pic/ets_results.png new file mode 100644 index 0000000000000000000000000000000000000000..2b22c490bf3a513efca31d6b6433992227fceefd Binary files /dev/null and b/minizip-ng/docs/pic/ets_results.png differ diff --git a/minizip-ng/docs/pic/install.png b/minizip-ng/docs/pic/install.png new file mode 100644 index 0000000000000000000000000000000000000000..58ac7e732a58239c3c256f918f4cbe5dafe1601a Binary files /dev/null and b/minizip-ng/docs/pic/install.png differ diff --git a/minizip-ng/docs/rom_integrate.md b/minizip-ng/docs/rom_integrate.md index 9a95619a2e2b0190b65a2756b7e7448a49d02f1e..523a832749bca5d30f046dc5b08c9789c9f9f2e9 100644 --- a/minizip-ng/docs/rom_integrate.md +++ b/minizip-ng/docs/rom_integrate.md @@ -15,12 +15,13 @@ |-- docs # 存放三方库相关文档的文件夹 |-- BUILD.gn # 构建脚本,支持rom包集成 |-- bundle.json # 三方库组件定义文件 + ├── CMakeLists.txt # 构建脚本,支持hap包集成 ├── README.OpenSource # 说明三方库源码的下载地址,版本,license等信息 ├── README_zh.md ``` - 将本仓库文件夹拷贝到third_party下 ``` - cp ~/tpc_c_cplusplus/minizipi-ng ~/openharmony/third_party/ -rf + cp ~/tpc_c_cplusplus/minizip-ng ~/openharmony/third_party/ -rf ``` ## 准备三方库源码 - 将源码下载到minizip-ng目录并将其解压出来。 @@ -98,7 +99,7 @@ hb build --target-cpu arm64 # 编译64位系统使用:arm64, 编译32位 ``` - 运行测试程序 程序安装完后,由于测试用例较多,我们准备了1个测试文件 test.c,测试了该库常用的zip文件压缩和解压缩功能,并和期望结果做对比,内容一致,如图: - ![results](pic/results.png) +  ![results](pic/results.png) ## 参考资料 - [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) - [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc)