如何改进将输出APK从Android项目复制到新文件夹的任务?

时间:2015-12-07 12:26:41

标签: android gradle android-gradle

所以我想创建一个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 :了解如何重命名,以便不再是问题

1 个答案:

答案 0 :(得分:1)

好像你可以使用外部属性:

ext.output = "Initial Value"

task firstTask() << {
    output = "Output";
}

task secondTask(dependsOn: firstTask) << {
    println output;
}

会产生: 输出

如果您有多个汇编类型的任务,并且每个任务都设置了&#39;输出&#39;因此,您的复制不再是多个任务,而是多个集合语句。