文章目录

  • 一、下载 p7zip 源码
  • 二、交叉编译 Android 中使用 7z 可执行程序
  • 三、参考资料

一、下载 p7zip 源码


下载 7zip 源码 , 下载页面 https://sourceforge.net/projects/p7zip/files/ , 点击页面中的 绿色下载按钮 ;

也可以点击下面的链接直接下载

  • https://jaist.dl.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_src_all.tar.bz2

  • https://nchc.dl.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_src_all.tar.bz2

下载的版本是 p7zip 版本 , 该版本可以在 Linux 中运行 , 交叉编译后在 Android 中运行 ;

下载后的 p7zip_16.02_src_all.tar.bz2 文件 , 解压该文件 ;

进入源码目录后发现 , p7zip 是使用 C/C++ 编写 ;

二、交叉编译 Android 中使用 7z 可执行程序


在 Android 中使用命令行进行压缩与解压缩操作 ;

可以使用命令行的场景 :

压缩解压缩过程可以使用命令行 , 全程不需要执行过程中的数据 , 只要得到结果 , 这种情况下就可以使用 7z 命令实现该效果 ;
如果要边压缩 , 边分析解压出来的文件 , 如病毒扫描 , 那就必须实时监控解压的数据 , 需要移植 7z 源码 , 并进行二次开发实现 ;
使用两种方式得到的压缩解压缩结果相同 , 如果使用代码 , 可以在压缩解压缩过程中进行更多干预操作 ;

Android 中调用命令行方法 :

Runtime.getRuntime().exec("ls -la");

首先要交叉编译出 Android 平台上的可执行文件 , 必须是 ARM 架构的可执行程序 ;

p7zip 源码中给出 Android 平台使用的源码 , 在 p7zip_16.02\CPP\ANDROID 目录下 ;

其中 ,

7z 可以使用插件 , 支持的压缩格式多 , 可以支持 tar , zip 等压缩格式 ;

7zr 只支持 7z 格式的压缩解压缩 ;

这里推荐使用 7zr , 只使用压缩比率最高的格式 7z 格式即可 , 多余的功能基本不需要 ;

进入 7zr 目录下 , 有一个 jni 目录 和 makefile 文件 ,

jni 目录中是 Android.mk 和 Application.mk 两个构建脚本 , 可以使用 ndk-build 进行编译 ;

打开该 makefile 文件 , 该文件最后几行代码给出了相关操作方法 ;

# 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

进入 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\jni 目录 , 执行 ndk-build 命令 , 进行交叉编译 ;

修改 Application.mk 构建脚本 :

APP_ABI := armeabi-v7a arm64-v8a x86 x86_64
APP_PLATFORM := android-8

分析 Android.mk 构建脚本 :

include $(BUILD_EXECUTABLE)
  • include $(BUILD_EXECUTABLE) 配置表示生成可执行文件 ;

  • include $(BUILD_SHARED_LIBRARY) 配置表示生成 .so 动态库 ;

  • include $(BUILD_STATIC_LIBRARY) 配置表示生成 .a 静态库 ;

使用最低版本的 NDK 进行编译 , 使用高版本 NDK 编译各种报错 ;

使用 16.1.4479499 版本的 NDK 进行编译 :

>D:\001_Programs\001_Android\002_Sdk\Sdk\ndk\16.1.4479499\ndk-build.cmd

编译要很长时间 , 输出如下结果后 ,

最终在 D:\develop\7zip\p7zip_16.02\CPP\ANDROID\7zr\libs\armeabi-v7a 目录下 , 生成了可执行的 7zr 程序 ;

总共生成了 444 种 CPU 架构的可执行文件 ;

编译过程中其它生成文件如下图 :

编译时遇到的错误 :

  • 【错误记录】Android Studio 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包动态库的 CPU 架构 )
  • 【错误记录】p7zip 交叉编译 Android 版本 NDK 报错 ( error: case value evaluates to -2 , which cannot be narrowed )

三、参考资料


参考资料 :

  • 7-Zip 官网 : https://www.7-zip.org/

Android NDK 编译构建脚本参考文档 :

  • ndk-build 脚本 : https://developer.android.google.cn/ndk/guides/ndk-build
  • Android.mk 构建脚本 : https://developer.android.google.cn/ndk/guides/android_mk
  • Application.mk 构建脚本 : https://developer.android.google.cn/ndk/guides/application_mk

博客资源 : 源码 , 编译后的可执行文件, 在 7zip\p7zip_16.02\CPP\ANDROID\7zr\libs\ 目录下 ;

  • 下载地址 : https://download.csdn.net/download/han1202012/18215890

【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )相关推荐

  1. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.so 动态库 四.参考资料 一.修改 7zr 交叉编 ...

  2. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...

  3. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

  4. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.完整代码示例 1.Java 层代码 2.JNI 层代码 3.日志头文件 4.执行结果 四.参考资料 前置博客 ...

  5. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.配置 CMakeLists.txt 构建脚本 1.导入动态库 2.导入头文件 三.完整 CMakeLists ...

  6. 【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )

    文章目录 一.Android Studio 导入可执行 7zr 程序 二.从 Assets 资源文件拷贝 7zr 到内置存储空间 三.参考资料 一.Android Studio 导入可执行 7zr 程 ...

  7. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )

    文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...

  8. 【Android 安装包优化】Android 中使用 7zr 可执行程序 解压缩文件

    文章目录 一.Android 中使用 7zr 可执行程序 解压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序 解压缩文件 在上一篇博客 [Android 安装包 ...

  9. 【Android 安装包优化】Android 中使用 7zr 可执行程序 压缩文件

    文章目录 一.Android 中使用 7zr 可执行程序压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序压缩文件 在上一篇博客 [Android 安装包优化]A ...

  10. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )

    文章目录 一.resources.arsc 资源映射表文件格式 二.头文件 数据格式 三.全局字符串池 数据格式 四.包数据 数据格式 1.包头 数据格式 2.资源类型字符串池 数据格式 3.资源名称 ...

最新文章

  1. python画折线图代码-python绘制简单折线图代码示例
  2. 泛微e9隐藏明细表_泛微E8 隐藏行、明细表
  3. pytorch随笔-6
  4. Spark常规性能调优三:并行度调节
  5. coreldraw x4怎么会蓝屏_CorelDRAW广告条幅批量制作插件
  6. SpringBoot入门二
  7. 终端到服务器丢包,服务器丢包 ping的时候产生丢包的解决方法
  8. docker mysql总是退出_Docker提升测试效率之路
  9. 解决IDEA每次打开新的maven项目都需要重新配置maven home的问题
  10. 【php数组函数序列】之sort() - 对数组的元素值进行升序排序
  11. Vue使用html2Canvas和canvas2Image下载二维码会模糊的问题解决方法
  12. 单元测试 - mock异常
  13. virtual关键字
  14. netlink 0001 --- 基础简介
  15. 谷歌插件开发ajax请求,2020-01-03(chrome插件:拦截ajax请求并修改返回结果)
  16. 高通QFIL刷机指南
  17. 吉林大学计算机科学与技术学院刘菁,吉林大学2011-2012学年奖学金获奖名单
  18. 中文和英语中主语、谓语、宾语、定语、状语、补语的定义
  19. git 分支关系图谱讲解
  20. 如何学计算机打字,新手学习计算机打字全文阅读

热门文章

  1. 交换机、路由器启动过程详述
  2. Bullet 物理引擎 详细分析 Dbvt (4)
  3. mysql查看数据库命令
  4. HDOJ 1224 Free DIY Tour
  5. 对items函数的理解
  6. 富文本编辑器Quill(二)上传图片与视频
  7. js中三元运算符的两种情况
  8. Java getClass() VS instanceof VS ==
  9. Django REST Framework限速
  10. 存储过程学习笔记(SQL数据库