高斋晓开卷,独共圣人语。这篇文章主要讲述Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中相关的知识,希望能为你提供帮助。
原文:Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中前言:
关于.jar文件:
平时我们android项目开发中经常会用到第三方的.jar文件。
其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(res、图片等)
---------------------------------------------------------------------------------------------------------
一、首先学习如何在Android studio中将android项目打成.jar文件
【Android项目实战(二十四)(项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中)】1、在app目录下的 build.gradle文件中 添加如下红色字体代码:
dependencies {
compile fileTree(include: [‘*.jar‘], dir: ‘libs‘)
testCompile ‘junit:junit:4.12‘
compile ‘com.android.support:appcompat-v7:23.3.0‘
}
task makeJar(type: Copy) {
delete ‘build/libs/mysdk.jar‘
from(‘build/intermediates/bundles/release/‘)
into(‘build/libs/‘)
include(‘classes.jar‘)
rename (‘classes.jar‘, ‘myjar.jar‘)
}
makeJar.dependsOn(build)
2、生成.jar文件
在Android studio 的下面有 Terminal 选项,可以看到这个命令行的形式
文章图片
我们在此 输入 “ gradle makeJar” 然后回车。等待片刻,变会生成 .jar文件
该.jar文件的地址为:
build/intermediates/bundles/release/
至此,我们就可以将生成的.jar放在别的项目中使用了。
二、深入探索
问题:
存在这么一种情况:
我们要打包的android项目中已经引用了一个或多个第三方.jar文件。那么我们按上面的方法打成.jar文件,在引入到别的项目中使用中,
会发现出现错误:
NoClassDefFoundError
定位到错误代码位置,会发现 生成.jar文件的原始android项目中引用的第三方.jar文件中的类找不到。
这里可以猜测,使用上述方法将android项目打成.jar文件的过程中,并没有将android项目原来引用的第三方.jar文件也一起打入到新的.jar文件中。
可以测试一下,将android项目打成的.jar文件解压缩,会发现只有java代码相关文件,而没有原来android项目中引用的第三方.jar文件
解决方案:
1、首先 问题产生的原因就是 生成.jar文件的android项目原先引用的第三方.jar文件没有被打入到 新的.jar文件中
那么我们想:怎么在android项目打成.jar文件的时候 顺带把 android项目引用的第三方.jar文化也一并打入到新的.jar文件?
试了几天,目前没有找到解决办法。。。此路不通
2、既然android项目原来引用的.jar文件打不进 要生成的.jar文件中去,我们是否可以手动的将android项目引用的第三方项目整合到android项目打成的.jar文件中去?
即 将android项目打成的.jar文件和android项目自身引用的.jar文件合并成一个.jar文件
网上查询了一番: 可以使用 ANT 工具实现 将两个或多个.jar文件合并成一个.jar文件
Apache Ant是一个基于Java的生成工具。据最初的创始人James Duncan Davidson的介绍,这个工具的名称是another neat tool(另一个整洁的工具)的首字母的缩写。
实现步骤:
(1)、下载ANT,这个网上百度一堆
(2)、配置环境变量
文章图片
(3)、检测是否配置成功
点击 开始 -> 运行 -> 输入cmd
打开命令窗口,
输入如下命令:ant
如果出现如下内容,说明安装成功:
Buildfile: build.xml does not exist!
Build failed
注意:因为ant默认运行build.xml文件,这个文件需要我们创建。
如果不想命名为build.xml,运行时可以使用 ant -buildfile test.xml 命令指明要运行的构建文件。
(4)、编辑xml文件,命名随意,这里命名build.xml
打开文件编辑:
< ?xml version="1.0" encoding="utf-8"?> < project name="hosa"//不用改,注意:这里的所有注释在 build.xml文件中 都不要有是我为了给你们看解释写的 basedir="H:\\soft\\jar"//生成的jar存放的位置,并且将要合并的所有.jar文件也放在该目录下 default="makeSuperJar" > //不用改< target name="makeSuperJar"//不用改 description="description" > //不用改< jar destfile="standingbanlanceFB.jar" > //合并后的jar文件的名称 < zipfileset src="https://www.songbingjia.com/android/avoscloud-sdk-v3.14.5.jar" /> // < zipfileset > 标签的都是要参与合并的子jar包 < zipfileset src="https://www.songbingjia.com/android/fastjson.jar" /> < zipfileset src="https://www.songbingjia.com/android/okhttp-2.6.0-leancloud.jar" /> < zipfileset src="https://www.songbingjia.com/android/standingbanlance.jar" /> < zipfileset src="https://www.songbingjia.com/android/okio-1.6.0-leancloud.jar" /> < /jar> < /target> < /project>
(5)、命令行执行合并操作,输入第一行命令,红色部分是我们编辑的build.xml文件的地址
文章图片
(6)、打开build.xml文件中 basedir="H:\\soft\\jar" 该目录,即可看到合并后的jar文件。
推荐阅读
- Android项目实战(二十六)(蓝牙连接硬件设备开发规范流程)
- Android项目实战(二十五)(Android studio 混淆+打包+验证是否成功)
- Android项目实战(三十三)(AS下获取获取依赖三方的jar文件aar 转 jar)
- 页替换算法
- 系统进程队列
- 进程调度器
- 抢占式优先调度图解示例
- 优先排程调度
- TSL的优先级倒置