| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 11 天前 | ||
| 1 年前 | ||
| 11 天前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 4 个月前 | ||
| 1 年前 | ||
| 1 个月前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 6 个月前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 14 天前 | ||
| 6 个月前 |
oh7zip
本项目基于 7zip 开发。
简介
对7zip命令行的封装,支持OpenHarmony沙箱路径文件的压缩和解压,压缩和解压规格参考官网7-zip。
下载安装
ohpm install @ohos/oh7zip
OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包。
约束与限制
兼容性
在下述版本验证通过:
- DevEco Studio: 5.0.5 Release, SDK: API12 Release(5.0.4),ROM:5.0.4;
权限要求
无
编译运行
本项目依赖7zip、bzip2、minizip-ng、openssl、xz、zstd库,编译产物.so文件和头文件需要自行编译, 参考bzip2本地编译脚本 参考minizip-ng本地编译脚本 参考openssl本地编译脚本 参考xz本地编译脚本 参考zstd本地编译脚本
在library下新增libs目录,并将编译生成的7zip库拷贝到该目录下, 在cpp目录下新增thirdparty目录,并将编译生成的bzip2、minizip-ng、openssl、xz、zstd库拷贝到该目录下,如下图所示:

使用示例
import { Uncompress, Config7z } from '@ohos/oh7zip';
// 解压文件
let uncompress: Uncompress = new Uncompress();
let config: Config7z = {
src: getContext().resourceDir + '/test.7z',
dst: getContext().filesDir,
pwd: ''
};
let result: number = uncompress.extractSync(config);
console.info('解压结果:' + result);
使用说明
1. 引入模块
import { Uncompress, Compress, Config7z } from '@ohos/oh7zip';
2. 解压文件
let uncompress: Uncompress = new Uncompress();
let config: Config7z = {
src: getContext().resourceDir + '/test_7z.7z',
dst: getContext().filesDir,
pwd: 'test_7z'
};
// 同步解压
let result: number = uncompress.extractSync(config);
// 异步解压
uncompress.extractAsync(config).then((result: number) => {
console.info('异步解压结果:' + result);
}).catch((error: BusinessError) => {
console.error('异步解压失败: ' + error.message);
});
3. 压缩文件
let compress: Compress = new Compress();
let config: Config7z = {
src: getContext().resourceDir + '/test',
dst: getContext().filesDir + '/test_7z.7z',
pwd: 'test_7z',
fmt: '7z'
};
// 同步压缩
let result: number = compress.compressSync(config);
// 异步压缩
compress.compressAsync(config).then((result: number) => {
console.info('异步压缩结果:' + result);
}).catch((error: BusinessError) => {
console.error('异步压缩失败: ' + error.message);
});
注意事项:
- 压缩格式
fmt仅压缩时使用,解压时忽略。支持加密格式"zip"、"7z",非加密格式"tar",非加密且非目录文件支持"xz"、"gzip"、"bzip2"。- 解压时仅
src数组第一个元素生效。
4. C++接口使用
解压文件:
#include "uncompress.h"
#include "common.h"
using namespace Oh7zip;
std::shared_ptr<Config7z> config = std::make_shared<Config7z>();
config->src = {"path/to/file"};
config->dst = "path/to/output";
config->pwd = "password";
std::shared_ptr<Uncompress> uncompress = std::make_shared<Uncompress>();
// Synchronous decompression
uncompress->ExtractSync(config);
// Asynchronous decompression
uncompress->ExtractAsync(config);
压缩文件:
#include "compress.h"
#include "common.h"
std::shared_ptr<Config7z> config = std::make_shared<Config7z>();
config->src = {"path/to/file"};
config->dst = "path/to/output.7z";
config->pwd = "password";
config->fmt = "7z";
std::shared_ptr<Compress> compress = std::make_shared<Compress>();
// Synchronous compression
compress->CompressSync(config);
// Asynchronous compression
compress->CompressAsync(config);
接口说明
API
| 名称 | 描述 | 类型 | 参数类型 | 返回值 | 必填 | OpenHarmony平台支持 |
|---|---|---|---|---|---|---|
| Uncompress | 解压操作类 | class | - | Uncompress实例 | 是 | 是 |
| Compress | 压缩操作类 | class | - | Compress实例 | 是 | 是 |
Uncompress
| 名称 | 描述 | 类型 | 参数类型 | 返回值 | 必填 | OpenHarmony平台支持 |
|---|---|---|---|---|---|---|
| extractSync | 同步解压文件到沙箱路径 | 方法 | Config7z | number | 是 | 是 |
| extractAsync | 异步解压文件到沙箱路径 | 方法 | Config7z | Promise | 是 | 是 |
Compress
| 名称 | 描述 | 类型 | 参数类型 | 返回值 | 必填 | OpenHarmony平台支持 |
|---|---|---|---|---|---|---|
| compressSync | 同步压缩文件或目录到沙箱路径 | 方法 | Config7z | number | 是 | 是 |
| compressAsync | 异步压缩文件或目录到沙箱路径 | 方法 | Config7z | Promise | 是 | 是 |
Config7z
| 字段名 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| src | string | Array | 是 | - | 压缩的源文件或目录路径;解压时仅src[0]生效 |
| dst | string | 是 | - | 压缩生成的目标文件路径;解压文件存放目录 |
| pwd | string | 否 | "" | 压缩/解压密码 |
| fmt | string | 否 | "7z" | 压缩格式,仅压缩时使用。支持加密格式"zip"、"7z",非加密格式"tar",非加密且非目录支持"xz"、"gzip"、"bzip2" |
| xr | string | Array | 否 | [] | 压缩排除规则,如"!hello.*"、"!dir" |
ErrorInfo错误码
| 错误码 | 名称 | 描述 |
|---|---|---|
| 0 | OK | 压缩/解压成功 |
| 1 | CONFIG_NULL | 解析Config7z为空 |
| 2 | ILLEGAL_SRC | 传入非法的src路径 |
| 3 | ILLEGAL_DST | 传入非法的dst路径 |
| 4 | DST_NO_PERMISSION | 传入的dst路径没有权限 |
| 5 | COMPRESS_FAIL | 7zip压缩失败 |
| 6 | UNCOMPRESS_FAIL | 7zip解压失败 |
| 7 | ASYNCDATA_NULL | 异步数据为空 |
| 8 | COMPRESS_FMT_NOT_SUPPURT | 传入的压缩格式不支持 |
| 9 | COMPRESS_FMT_SRC_ILLEGAL | 压缩格式支持但src不合法,例如压缩gzip格式时src传入目录 |
| 10 | MISSING_PASSWORD | 压缩包需要正确的密码 |
关于混淆
- 代码混淆,请查看代码混淆简介。
- 如果希望oh7zip库在代码混淆过程中不会被混淆,需要在混淆规则配置文件obfuscation-rules.txt中添加相应的排除规则:
-keep
./oh_modules/@ohos/oh7zip
目录结构
|---- ohos_7zip
| |---- entry # 示例应用
| |---- library # oh7zip核心代码实现
|---- libs #so库
|---- src/main
|---- cpp #cpp 核心功能实现模块
| |---- LICENSE # 开源协议文件
| |---- NOTICE # 声明文件
| |---- README.md # 英文说明文档
| |---- README_zh.md # 中文说明文档
| |---- oh-package.json5 # 包配置文件
| |---- build-profile.json5 # 构建配置文件
贡献代码
使用过程中发现任何问题都可以提 Issue ,当然,也非常欢迎发 PR 共建。
开源协议
本项目基于 Apache-2.0 ,请自由地享受和参与开源。