AS--›Gradle 打包指定文件到jar/dex
借助强大的Gradle
构建系统, 可以很轻松的打包出jar
, 再借助Android SDK
中的dx.bat dx.jar
文件, 就能转换成dex
包
使用Gradle创建生成jar文件的任务
/**
* Jar任务类型, 不支持kotlin文件
* */
task _makeJar(type: Jar) {
//任务依赖于assemble任务. 所以此任务执行前, 会先执行assemble任务
//之所以需要依赖assemble任务, 是因为assemble执行完成后, 会把java文件转换成class文件,
//然后收集需要的class文件到jar文件.
dependsOn(assemble)
//设置生成jar文件所在的路径
destinationDir = file(rootDir.getAbsolutePath() + "/jar")
//设置jar文件版本
version = time()
//设置jar文件中MANIFEST.MF的内容
manifest {
attributes("Manifest-Version": version)
}
//设置jar文件名称, 名称后面会自动拼接上 version 值.
//具体可以查看源码: org.gradle.api.tasks.bundling.AbstractArchiveTask#getArchiveName
baseName "jar_file_name"
//保存jar完整路径到全局变量, 此变量主要用于将jar文件转换成dex文件的参数
project.ext.makeJarPath = getArchivePath().getAbsolutePath()
//需要打包class文件的路径, 这个路径可以是任意的, 也可以是 assemble 任务生成的.
//不同的gradle版本, 生成的路径不一样, 可以在 build 文件夹下搜索即可得到.
from('/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes')
//需要排除的class文件, 比如:去掉R$开头的文件
exclude {
it.name.startsWith('R$') || it.name.startsWith('android')
}
//需要指定包含的class文件, 此规则优先于 exclude
include {
if (it.isDirectory()) {
true
} else {
def name = it.name
name.startsWith('Java1')
}
}
}
之后再AS IDE
的tasks列表
就能看到_makeJar
任务. 双击即可运行.
使用Gradle创建jar转换dex文件的任务
/**
* 此任务需要依赖_makeJar,因为需要拿到jar文件路径
* */
task _jarToDex(type: Exec, dependsOn: _makeJar) {
//借助windows的cmd命令行执行
commandLine 'cmd'
doFirst {
//jar文件对象
def srcFile = file(project.ext.makeJarPath)
//需要生成的dex文件对象
def desFile = file(srcFile.parent + "/" + srcFile.name.substring(0, srcFile.name.lastIndexOf(".")) + ".dex")
//此行可以不需要
workingDir srcFile.parent
//拼接dx.bat执行的参数
def list = []
list.add("/c")
list.add("dx")
list.add("--dex")
list.add("--output")
list.add(desFile)
list.add(project.ext.makeJarPath)
//设置参数到cmd命令行
args list
}
}
执行此任务前, 请确保dx.bat
能在命令行中执行.
此文件在"Android SDK\build-tools\28.0.3\dx.bat"
, 请将Android SDK\build-tools\28.0.3\
路径添加到windows
的PATH
环境变量中, 即可.
群内有各(pian)种(ni)各(jin)样(qun)
的大佬,等你来撩.
联系作者
请使用QQ扫码加群, 小伙伴们都在等着你哦!
关注我的公众号, 每天都能一起玩耍哦!