Android 解压缩--交叉编译7zip命令行工具

github 仓库7zip-android

我在7-Zip 23.01 (2023-06-20) 的基础上加上了交叉编译脚步。以此让7zip命令行工具可以在 Android 通过ndk调用来执行。

需要注意 UnRAR 项目的协议,如果你不需要处理rar格式,在脚本中禁用即可。

下载源码

首先去官网下载7zip源码,然后可以先看看官方的 DOC/readme.txt。里边说明了许多编译参数的作用以及协议说明。

修改脚本

CPP/7zip/Bundles/Alone2/makefile.gcc 文件中添加下面的内容。定义这个变量是因为 DEF_FILE 这样才能够生成出动态链接库。

DEF_FILE = 7zz # 变量具体的值可以自由改

删除 CPP/7zip/7zip_gcc.mak 里的所有 -Werror 参数,因为编译时会有许多警告,这个参数会将警告升级为报错,导致无法成功编译。

CPP/7zip/7zip_gcc.mak 的 152 行,删除 -lpthread 参数。
参考 Cannot find -lpthread (google.com).
删除之后像下边这样

LIB2 = -ldl

CPP/7zip/7zip_gcc.mak 文件的底部,添加下面的内容,用来将生成的动态链接库文件放到指定位置

android-install:
	install $(O)/$(PROG)$(SHARED_EXT) $(Output)

编写编译脚步

在源码的根目录下创建一个 shell 脚步文件,写入下面的内容

# 根据实际情况更改路径
NDK=/path/to/your/ndk

# 这部分摘自 Android NDK 官方文档,主要是配置工具链和相关参数
# Only choose one of these, depending on your build machine...
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
# export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64

# Only choose one of these, depending on your device...
export TARGET=aarch64-linux-android
# export TARGET=armv7a-linux-androideabi
# export TARGET=i686-linux-android
# export TARGET=x86_64-linux-android
export API=21
arch=arm64-v8a
# arch=armeabi-v7a
# arch=x86
# arch=x86-64
# 设置输出目录
export Output=$(pwd)/output/$arch
mkdir -p $Output
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export LD=$TOOLCHAIN/bin/ld

# 参考 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=260329#c13
# 这里只添加了armv8-a版本的参数,其他架构自己解决
if [ "$TARGET" == "aarch64-linux-android" ]; then
    export MY_ARCH="-march=armv8-a+crc+crypto"
fi
cd CPP/7zip/Bundles/Alone2
make -j -f makefile.gcc clean
make -j -f makefile.gcc
make -j -f makefile.gcc android-install

最后执行脚本,动态链接库文件会生成在 Output 变量对应的目录下

NDK 中使用

NDK 的使用可以参考其他教程。在代码中,使用函数 int Main2(int argc, char *argv[]) 就可以调用 7zip 命令行工具了,跟在本地执行基本没有什么区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值