所以我想创建一个post-build钩子,它将编译好的APK文件复制到一个新文件夹,并给它一个包含版本代码的名称。这是我到目前为止所得到的:
task copyToPublishFolderDebug(type: Copy, dependsOn: assembleDebug ) {
def targetFile = "MyApp-debug-" + android.defaultConfig.versionCode + ".apk"
from ('build/outputs/apk/MyApp-debug.apk') {
rename 'MyApp-debug.apk', targetFileName
}
into '../build/publish/'
}
assembleDebug.finalizedBy copyToPublishFolderDebug
这可以,但我认为它可以改进
理想的解决方案不是硬编码输入文件名,而是将assembleDebug
的输出传递给此任务。 (相关:https://stackoverflow.com/a/30637190/507339)问题是assembleDebug
没有任何输出。但是zipalignDebug
会这样做,但是评估阶段不存在任务,因此编写from zipalignDebug
不会编译。有办法解决这个问题吗?我可以在afterEvalate
阶段定义任务吗?
我必须将此任务复制粘贴到版本构建(以及我创建的任何其他构建类型)的90%相同任务。有什么办法以简单的方式干掉那件事吗?
编辑:误解了问题#1,认为这是一个文件而不是目录。复制正确完成,但创建文件夹并且不重命名
edit2 :了解如何重命名,以便不再是问题
答案 0 :(得分:1)
好像你可以使用外部属性:
ext.output = "Initial Value"
task firstTask() << {
output = "Output";
}
task secondTask(dependsOn: firstTask) << {
println output;
}
会产生: 输出
如果您有多个汇编类型的任务,并且每个任务都设置了&#39;输出&#39;因此,您的复制不再是多个任务,而是多个集合语句。