文件最后提交记录最后更新时间
1 年前
11 天前
1 年前
11 天前
1 年前
1 年前
1 年前
1 年前
1 年前
4 个月前
1 年前
1 个月前
1 年前
1 年前
13 天前
13 天前
1 年前
1 年前
6 个月前
1 年前
1 年前
1 年前
14 天前
6 个月前
README.md

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库拷贝到该目录下,如下图所示:

image-20250611153322646

使用示例

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 ,请自由地享受和参与开源。