Android开发——AndroidStudio将依赖打包成ja
我发现我真不是一个好的开发人员,对自己用过的功能或使用过的方法一段时间不用之后就忘记了,再次使用时,就只记得了个大概。唉,记性不好的我决定相信一下烂笔头,把它记录下来,下次如果再忘记了,还有地方查找。
第一步:新建依赖
首先我新建一个新的依赖,里面放有两个工具类,然后打开依赖的build.gradle文件,确保下图划红线位置是library状态。

第二步:配置打包信息
其次在build.gradle里面android{...}平级的地方配置打包信息
def JAR_BASENAME = "utilsLib" // jar包的名称
def JAR_VERSION = "_V1.0" // jar包的版本号
def JAR_PATH = "build" // 生产jar包的路径位置
def JAR_SUFFIX = ".jar" // 生产jar包的文件后缀
def zipFile = file('build/intermediates/compile_library_classes/debug/classes.jar')// 待打包文件文字
task clearJar(type: Delete) {
delete JAR_PATH + JAR_BASENAME + JAR_VERSION + JAR_SUFFIX //拼接jar包的名字
}
// 方法一:将assets目录打入jar包
task makeJar(type:Jar){
from zipTree(zipFile)
from fileTree(dir:'src/main', includes: ['assets/**']) // 在这里将assets目录打入jar包
baseName = JAR_BASENAME + JAR_VERSION
description = file(JAR_PATH)
}
// 方法二:打包的jar包只有源代码的.class文件,不包含资源文件
task makeJar(type:Jar){
baseName = JAR_BASENAME + JAR_VERSION
//从哪里打包class文件
// from('build/intermediates/packaged-classes/debug/')
from('build/intermediates/javac/debug/compileDebugJavaWithJavac/classes')
//去掉不需要打包的目录和文件
exclude('test/', 'BuildConfig.class', 'R.class')
//去掉R开头的文件
exclude{ it.name.startsWith('R$'); }
}
makeJar.dependsOn(clearJar, build)
代码里面写了两种makeJar的方法,实际运用时,只用其中一种即可。
这里着重说明一下方法二里面打包class文件的路径,不同的AndroidStudio和gradle版本里,这个路径是不同的,具体什么原因不是太清楚,我的理解是文件路径变了而已。
之前使用 from('build/intermediates/packaged-classes/debug/') 这个路径时,打包的jar包里包含class文件。但是今天再使用这个路径时,打包的jar文件里面就没有class文件了。如下图:

而使用 from('build/intermediates/javac/debug/compileDebugJavaWithJavac/classes') 这个路径时,打包的jar文件里面就包含了class文件。如下图:

既然这个路径时不固定的,我的建议是知道上面意思就好,具体使用时查看build/intermediates下的文件夹,看哪一个里面包含class文件,就用哪个好了。
方法二里面还有一个不理解的地方,就是下面两行代码:
//去掉不需要打包的目录和文件
exclude('test/', 'BuildConfig.class', 'R.class')
//去掉R开头的文件
exclude{ it.name.startsWith('R$'); }
这两行代码是参照网上其他人的代码添加的,但不知道是我添加的不对还是其他别的原因,这两行代码不起作用,生成的jar包里面依然包含有BuildConfig文件。有人知道原因的话可以留言告诉我哟。
第三步:开始打包
配置信息添加完成之后,打包的主要工作就做完了,剩下的就是实际生成jar包了,这个比较简单,估计大家也都知道怎么操作了,不过这里我也记录一下吧,有两种方式可实现打包。
方法一:在Gradle面板上,选择要打包的依赖项目,然后在其目录下找到 Tasks --> other --> makeJar命令。

然后双击makeJar开始打包,当Run面板运行完毕后如下字样,提示打包成功。

然后可在依赖项目下找到打包的jar包文件。

方法二:在AndroidStudio终端窗口中输入 gradlew makeJar 命令,也可开始打包。打包完成时会有提醒。
