打包多个 jar 包和 so 文件为一个 jar 包,亲测可行

把一个model组件打包为一个jar包,供第三方使用,项目里包含多个 三方jar 包和多个三方so文件,最终打包为一个 jar。

折腾了一下午,还是没成功,so 文件打包不进 最终的jar包里,没得办法,so 文件最终还是需要在使用时,自行引用到项目里。

多个三方jar包打包为一个 jar,现采用 apache-ant 软件合并为一个 jar 包。

最终项目引用的时候,需要手动复制 so 文件到项目里,合并完成的 jar 包正常引用,正常使用。

下面开始详细介绍

1、打包jar包第一步,新建项目,默认为 app model,这个就不多说了。

2、新建model(该model就是需要打包为jar的组件,需要封装的代码都在这个model里),取名为 libraryModel, app model 引用 libraryModel。libraryModel里面引用了多个三方 jar 包和 so 文件。

3、libraryModel 写完业务代码后,在 app model 里进行测试,如果 app model 引用不到 library model 里的 三方jar 的类,把 library model 里面引用的 jar,引用方式 implementation 改为 api ,这样就可以引用到了,代码测试完成。

4、下面开始打包 libraryModel  为 jar 包,需要在 libraryModel gradle 配置

dependencies {
   .........
}


task makeJar(type: Copy) {
    delete 'build/libs/label.jar' //删除build/libs/文件夹下名字为TestJarV1.jar的jar包
    from('build/intermediates/aar_main_jar/debug/classes.jar') //从这个目录下取出默认jar包
    into('build/libs/') //将jar包输出到指定目录下
    include('classes.jar')
    rename('classes.jar', 'label.jar') //自定义jar包的名字
}
makeJar.dependsOn(build)

注:from(.....   classes.jar),为业务代码自动打包的 jar,有些博客的路径和我的不一样,可以参考,因为 Android studio 版本不一样,路径不同,你就在 build/intermediates 下找到 classes.jar就好,使用你项目里的路径。

5、在项目下方功能栏 Terminal 里面输入 gradlew makeJar,这样,配置了 task makeJar 的 library model 会自动打包为 jar 包,名字为 label.jar,在 build/libs 路径下,此时的 label.jar 是不包含 library model 里面使用的三方 jar 和 so 文件的。

6、so 文件需要复制到新项目里使用

7、library model 打包得到的 jar,和需要合并的多个jar,现在开始合并,使用的工具是apache-ant,自行下载安装配置环境变量并测试OK。

8、apache-ant怎么使用自行百度,这里记录一下当时不明白的

该命令合并多个 jar 
ant -buildfile D:\download\apache-ant-1.9.16\make\build.xml

8.1、D:\download\apache-ant-1.9.16\make 路径说明
build.xml 文件和需要合成的多个 jar 包都放在这个路径下,最终合并生成的 jar 包也会在这个路径下。

8.2、关于 build.xml 的说明
这个文件是没有的,需要新建,新建文件,改名字为 build.xml 就可以,build.xml 文件示例内容如下:

<?xml version="1.0" encoding="utf-8"?>
<project
name="LabelHelper"                    //最终生成 jar 文件的名字
basedir="D:\download\apache-ant-1.9.16\make"            //这个是 build.xml 文件和需要合并的 jar共同存放目录
default="makeSuperJar" >

<target
name="makeSuperJar"
description="description" >

<jar destfile="LabelHelper.jar" >                //最终合并完成的 jar 文件全名

<zipfileset src="label.jar" />                    //zipfileset src 开头的是需要合并的全部 jar 包,注意更换名字
<zipfileset src="jxl.jar" />
<zipfileset src="Module_Android_Power.jar" />
<zipfileset src="ModuleAPI_J.jar" />
<zipfileset src="poi-3.12-android-a.jar" />
<zipfileset src="poi-ooxml-schemas-3.12-20150511-a.jar" />
<zipfileset src="SenterOpenApi_IoT_1.2.3.95_Common.jar" />
<zipfileset src="SenterOpenApi_IoT_1.2.3.95_Function_UltraHighFrequency_ModelI.jar" />
</jar>
</target>

</project>


配置好 build.xml 和 把需要合并的 jar 包放在 指定目录(D:\download\apache-ant-1.9.16\make)后,打开 cmd 命令,执行 ant -buildfile D:\download\apache-ant-1.9.16\make\build.xml,查看 log 日志,有 sucess 字样,表示成功,在 D:\download\apache-ant-1.9.16\make 路径下找到最终合并完成的 jar 包。

这样,就完成了 model 打包为一个 jar 并合并多个三方jar包,so文件自行复制使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值