前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )

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

作者头像
韩曙亮
发布2023-03-29 10:37:30
1.7K0
发布2023-03-29 10:37:30
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、下载 p7zip 源码


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

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

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

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

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

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


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

可以使用命令行的场景 :

压缩解压缩过程可以使用命令行 , 全程不需要执行过程中的数据 , 只要得到结果 , 这种情况下就可以使用 7z 命令实现该效果 ;

如果要边压缩 , 边分析解压出来的文件 , 如病毒扫描 , 那就必须实时监控解压的数据 , 需要移植 7z 源码 , 并进行二次开发实现 ;

使用两种方式得到的压缩解压缩结果相同 , 如果使用代码 , 可以在压缩解压缩过程中进行更多干预操作 ;

Android 中调用命令行方法 :

代码语言:javascript
复制
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 文件 , 该文件最后几行代码给出了相关操作方法 ;

代码语言:javascript
复制
# FIXME
debug:
	cd jni ; ndk-build NDK_DEBUG=1
	adb push ./libs/armeabi/7zr /data/app/
	adb push ./libs/armeabi/gdbserver /data/app/
	adb shell chmod 777 /data/app/7zr
	adb shell chmod 777 /data/app/gdbserver
	adb forward tcp:1234: tcp:1234
	adb shell  /data/app/gdbserver :1234 /data/app/7zr

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

修改 Application.mk 构建脚本 :

代码语言:javascript
复制
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64
APP_PLATFORM := android-8

分析 Android.mk 构建脚本 :

代码语言:javascript
复制
include $(BUILD_EXECUTABLE)
  • include $(BUILD_EXECUTABLE) 配置表示生成可执行文件 ;
  • include $(BUILD_SHARED_LIBRARY) 配置表示生成 .so 动态库 ;
  • include $(BUILD_STATIC_LIBRARY) 配置表示生成 .a 静态库 ;

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

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

代码语言:javascript
复制
>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 程序 ;

总共生成了

4

种 CPU 架构的可执行文件 ;

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

编译时遇到的错误 :

三、参考资料


参考资料 :

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、下载 p7zip 源码
  • 二、交叉编译 Android 中使用 7z 可执行程序
  • 三、参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档