【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )
文章目录
- 一、下载 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 可执行程序 )相关推荐
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )
文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.so 动态库 四.参考资料 一.修改 7zr 交叉编 ...
- 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )
文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )
文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )
文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.完整代码示例 1.Java 层代码 2.JNI 层代码 3.日志头文件 4.执行结果 四.参考资料 前置博客 ...
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )
文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.配置 CMakeLists.txt 构建脚本 1.导入动态库 2.导入头文件 三.完整 CMakeLists ...
- 【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )
文章目录 一.Android Studio 导入可执行 7zr 程序 二.从 Assets 资源文件拷贝 7zr 到内置存储空间 三.参考资料 一.Android Studio 导入可执行 7zr 程 ...
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...
- 【Android 安装包优化】Android 中使用 7zr 可执行程序 解压缩文件
文章目录 一.Android 中使用 7zr 可执行程序 解压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序 解压缩文件 在上一篇博客 [Android 安装包 ...
- 【Android 安装包优化】Android 中使用 7zr 可执行程序 压缩文件
文章目录 一.Android 中使用 7zr 可执行程序压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序压缩文件 在上一篇博客 [Android 安装包优化]A ...
- 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )
文章目录 一.resources.arsc 资源映射表文件格式 二.头文件 数据格式 三.全局字符串池 数据格式 四.包数据 数据格式 1.包头 数据格式 2.资源类型字符串池 数据格式 3.资源名称 ...
最新文章
- python画折线图代码-python绘制简单折线图代码示例
- 泛微e9隐藏明细表_泛微E8 隐藏行、明细表
- pytorch随笔-6
- Spark常规性能调优三:并行度调节
- coreldraw x4怎么会蓝屏_CorelDRAW广告条幅批量制作插件
- SpringBoot入门二
- 终端到服务器丢包,服务器丢包 ping的时候产生丢包的解决方法
- docker mysql总是退出_Docker提升测试效率之路
- 解决IDEA每次打开新的maven项目都需要重新配置maven home的问题
- 【php数组函数序列】之sort() - 对数组的元素值进行升序排序
- Vue使用html2Canvas和canvas2Image下载二维码会模糊的问题解决方法
- 单元测试 - mock异常
- virtual关键字
- netlink 0001 --- 基础简介
- 谷歌插件开发ajax请求,2020-01-03(chrome插件:拦截ajax请求并修改返回结果)
- 高通QFIL刷机指南
- 吉林大学计算机科学与技术学院刘菁,吉林大学2011-2012学年奖学金获奖名单
- 中文和英语中主语、谓语、宾语、定语、状语、补语的定义
- git 分支关系图谱讲解
- 如何学计算机打字,新手学习计算机打字全文阅读