Android gradle task任务打包
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
自定义打包apk的文件名
android {
...
// 自定义打包apk的文件名
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
if (outputFileName != null && outputFileName.endsWith('.apk')) {
outputFileName = "${applicationId}" +
"_${versionCode}" +
"(${versionName})" +
"_${variant.buildType.name}" +
".apk"
}
//这样指定打包地址会报错
//def outputFileDir = "${project.projectDir.absolutePath}/${variant.buildType.name}/${variant.flavorName}/${variant.versionName}"
//variant.getPackageApplicationProvider().get().outputDirectory = new File(outputFileDir)
}
...
}
主要是修改outputFileName的值
注意只能修改一次
创建任务
task hello {
println 'Hello world!1111111'
doLast {
println 'Hello world!222222'
}
}
doLast的理解
doLast {}之外的内容无论如何都会执行而且是在configuration阶段执行。而doLast内的内容只会在task名作为参数传入的时候才会执行而且是在execute阶段执行。
task hello1 {
println 'Hello world!1111111'
doLast {
println 'Hello world!222222'
}
}
task hello2 {
println 'Hello world!333333'
doLast {
println 'Hello world!444444'
}
}
执行task hello1任务 结果为
Executing tasks: [hello1]
Hello world!1111111
Hello world!333333
Hello world!222222
打包命令 gradle assemble
正确理解gradle assemble、assembleDebug、assembleRelease
gradle assemble //仅仅执行项目打包所必须的任务集
gradle build //执行项目打包所必须的任务集,以及执行自动化测试,所以会较慢
//如果当前Project包含多个Module,在Project根目录执行gradle assemble会编译所有的Module
//编译指定productFlavor及buildType的apk
gradle assemble[productFlavor][buildType]
//如果缺失某参数,则会把该参数的所有配置都进行编译,即如果运行gradle assembleflavor,
//则会编译出flavor所有buildType的apk
gradle assemble
gradle assembleflavorRelease
gradle assembleflavorDebug
//注意gradle支持命令缩写上面两个命令也可以写成如下格式
$gradle a
$gradle ass
$gradle aR
$gradle assflavorR
$gradle aD
$gradle assflavorD
怎么在通过gradle task执行以上任务
dependsOn表示在自己之前先执行这个方法
dependsOn 'assembleRelease'
完整代码
task executeAssembleRelease {
//先执行打包任务
dependsOn 'assembleRelease'
//在操作apk包
doLast {
android.applicationVariants.all { variant ->
if ('release'.equalsIgnoreCase(variant.buildType.name)) {
println '------------------------------>release包'
// 打包完成后复制到的目录
def outputFileDir = "${project.projectDir.absolutePath}/${variant.buildType.name}/${variant.flavorName}/"
//方法1
variant.assembleProvider.configure {
File out = new File(outputFileDir)
variant.outputs.forEach { file ->
copy {
from file.outputFile
into out
}
println '------------------------------>打包完成'
println "------------------------------>地址${out}"
}
}
}
//方法2
// variant.assemble.doLast {
// File out = new File(outputFileDir)
// variant.outputs.forEach { file ->
// copy {
// from file.outputFile
// into out
// }
// println '------------------------------>打包完成'
// }
// }
}
}
}