C语言使用LZMA SDK解压非加密7z文件介绍:http://hzy3774.iteye.com/blog/2104510

github项目地址:https://github.com/hzy3774/AndroidUn7zip

把前文中相应源文件和头文件复制到jni目录下:

写java接口源文件:

package com.hu.andun7z;

import java.io.File;

public class AndUn7z {

public static boolean extract7z(String filePath, String outPath)

{

File outDir = new File(outPath);

if(!outDir.exists() || !outDir.isDirectory())

{

outDir.mkdirs();

}

return (AndUn7z.un7zip(filePath, outPath) == 1);

}

//JNI interface

private static native int un7zip(String filePath, String outPath);

static {

System.loadLibrary("un7z");

}

}

在项目中只要调用extract7z(String filePath, String outPath)就可以实现解压了

javah -jni 生成对应的c++接口文件,填充函数:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class com_hu_andun7z_AndUn7z */

#ifndef _Included_com_hu_andun7z_AndUn7z

#define _Included_com_hu_andun7z_AndUn7z

#ifdef __cplusplus

extern "C" {

#endif

#include "JniWrapper.h"

/*

* Class: com_hu_andun7z_AndUn7z

* Method: un7zip

* Signature: (Ljava/lang/String;Ljava/lang/String;)I

*/

JNIEXPORT jint JNICALL Java_com_hu_andun7z_AndUn7z_un7zip

(JNIEnv *env, jclass thiz, jstring filePath, jstring outPath)

{

const char* cfilePath = (const char*)env->GetStringUTFChars(filePath, NULL);

const char* coutPath = (const char*)env->GetStringUTFChars(outPath, NULL);

LOGD("start extract filePath[%s], outPath[%s]", cfilePath, coutPath);

jint ret = extract7z(cfilePath, coutPath);

LOGD("end extract");

env->ReleaseStringUTFChars(filePath, cfilePath);

env->ReleaseStringUTFChars(outPath, coutPath);

return ret;

}

#ifdef __cplusplus

}

#endif

#endif

写NDK相关的头文件JniWrapper.h

/*

* JniWrapper.h

*

* Created on: 2014-8-12

* Author: HZY

*/

#ifndef JNIWRAPPER_H_

#define JNIWRAPPER_H_

#include

#include

#include "src/Types.h"

#define LOG_TAG "jniLog"

#undef LOG

#ifdef DEBUG

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)

#else

#define LOGD(...) do{}while(0)

#endif

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)

#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,__VA_ARGS__)

int extract7z(const char* srcFile, const char* dstPath);

#endif /* JNIWRAPPER_H_ */

接口最终调用上文中介绍的函数:int MY_CDECL extract7z(const char* srcFile, const char* dstPath);

打印的输出改到Logcat中输出。

文件成功解压

压缩文件中的路径和输出路径不能存在中文,不然文件输出不了。

android zip格式的ndk,Android 使用NDK (JNI)容易解压7z压缩文件相关推荐

  1. Mac解压Windows 压缩文件(.zip格式)乱码问题

    1.在App Store下载:The Unarchiver解压工具 2.设置The Unarchiver解压格式,打开The Unarchiver软件------>高级------>简体中 ...

  2. java zip加密压缩_Java解压和压缩带密码的zip文件过程详解

    前言 JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名. 为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzi ...

  3. java zip 解压 密码_Java解压和压缩带密码的zip文件过程详解

    前言 JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名. 为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzi ...

  4. java 压缩解压密码zip_Java解压和压缩带密码的zip文件过程详解|chu

    前言 JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名. 为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzi ...

  5. java压缩文件详解_Java解压和压缩带密码的zip文件过程详解

    前言 JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名. 为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzi ...

  6. Mac上zip,rar,tar文件命令解压和压缩

    经常遇到在windowns上的压缩文件,在mac上解压出现问题,特意总结了下在Terminal里常用命令的方式解压和压缩文件 1.zip压缩文件 zip命令的参数很多,可以利用"zip -- ...

  7. 利用R语言解压与压缩 .tar.gz .zip .gz .bz2 等文件

    最近尝试用 R 对一些文件进行批量的解压与压缩,这里记录一些常用的解压与压缩的方法. 由于解压与压缩是对称的两种方法,这里我们着重以对文件的解压为例,分不同的格式进行讲解. .zip 压缩:zip() ...

  8. centos解压分卷rar_centos解压和压缩rar格式文件

    在liunx下原本是不支持rar文件的,需要安装liunx下的winrar版本,操作如下 wget http://www.rarsoft.com/rar/rarlinux-4.0.1.tar.gz t ...

  9. linux备份压缩tgz,linux关于解压和压缩命令 zip rar tar.gz tgz

    linux关于解压和压缩命令 .zip 解压:unzip FileName.zip 压缩:zip FileName.zip DirName .rar 解压:rar -x FileName.zip 压缩 ...

最新文章

  1. ASP.NET MVC项目 解决session失效
  2. c语言 写出raw文件,求指导,如何用c语言实现读取*.raw格式图像
  3. MySQL常见函数介绍
  4. index.html图片弹窗,原生javascript实现图片弹窗交互效果
  5. 使用Source Monitor检测Java代码的环复杂度
  6. Party at Hali-Bula UVA - 1220(树形dp)
  7. P1072-Hankson的趣味题【数论,gcd】
  8. 小度智能音箱维修点_进击的小钢炮!体验小度智能音箱大金刚
  9. 泰山OFFICE在LINUX上的文件图标终于全部正确
  10. android checkboxpreference属性,android – 具有自己布局的CheckBoxPreference
  11. 中兴ZXD2400电源电路图图纸 图纸 线路图不是PCB图
  12. 【2021应用上架】超详细开发者账号申请应用上架审核经验整理
  13. oracle alter database,alter database操作
  14. 安装Mendeley后Word中没有出现对应的Mendeley插件
  15. 苹果笔记本电脑亮度无法调节_macbook怎么调节屏幕亮度|苹果笔记本调显示器亮度方法...
  16. freeMarker导出word带图片
  17. Kubernetes 部署高可用集群(二进制,v1.18)下
  18. RMF客户消费行为评分模型
  19. 获得Windows主机的主机序列号
  20. IoT设备与手机App之间如何实现实时消息通信——业务场景最佳实践

热门文章

  1. rtl语言_21个最佳RTL WordPress主题(从右到左语言)
  2. PHOTOSHOP绘制卡通人物简单教程
  3. python关键字参数必须位于位置参数之前_python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)...
  4. 原创首发:JXMaker扫描助手 扫描图片并将多次扫描图像导出为PDF文档,全免费,开源
  5. 5个增加设计趣味性的方法
  6. 南宁二中三中高考2021成绩查询,2021广西重点高中名单及排名
  7. 微软修补Windows零日漏洞,该漏洞允许在Windows计算机上远程执行
  8. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
  9. GPT4论文翻译 by GPT4 and Human
  10. 【多场景建模】CIKM2021 阿里妈妈多场景CTR预估模型STAR 论文精读