gpt4 book ai didi

android - gradle copy as doLast 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:38 26 4
gpt4 key购买 nike

我正在尝试做一件非常简单的事情。由于 gradle 在清理时删除了构建目录中的所有文件,我想在创建发布版本时将 apk 移动到其他地方。所以我在链中添加了一个复制任务,并将其设置为最后一个。我试过的任何东西都不起作用。所以我简化了它并添加了一些日志记录来说明这一点。我认为这是行不通的。

使用两个变量,我可以在任务定义时和执行时检查输入和输出路径是否有效。我还可以检查任务是否已执行。我在输入目录中放了一些文件,以确保无论如何也有一些东西。这是脚本:

def buildPath
def outPath
task copyApks(type: Copy) {

buildPath = "$buildDir\\outputs\\apk"
outPath ="$buildDir\\outputs\\apk2"

logger.error("Source Folder is $buildPath")
logger.error("Destination Folder is $outPath")

from buildPath
into outPath
}


assembleRelease.doLast {
android.applicationVariants.all { variant ->
println "Variant $variant.name"
logger.error("Source Folder is $buildPath")
logger.error("Destination Folder is $outPath")
copyApks
}
}

这是输出,可以看到路径在定义和执行时都是正确的(它们存在并且有效)。也可以看到任务被执行了:

怎么了?

Executing external task 'assembleRelease'...
Parallel execution with configuration on demand is an incubating feature.
Source Folder is C:\Users\Administrator\Projects\Gradle\MB6\app\build\outputs\apk
Destination Folder is C:\Users\Administrator\Projects\Gradle\MB6\app\build\outputs\apk2
................
some other gradle logs
................
:app:assembleRelease
Variant debug
Source Folder is C:\Users\Administrator\Projects\Gradle\MB6\app\build\outputs\apk
Destination Folder is C:\Users\Administrator\Projects\Gradle\MB6\app\build\outputs\apk2
Variant release
Source Folder is C:\Users\Administrator\Projects\Gradle\MB6\app\build\outputs\apk
Destination Folder is C:\Users\Administrator\Projects\Gradle\MB6\app\build\outputs\apk2

BUILD SUCCESSFUL

最佳答案

首先,您必须知道,只是将任务名称添加到您的闭包中,在您的例子中是 copyApks,并不真正意味着应该执行该任务。就像您指定了一个变量,但什么都不做一样。

还有一点,请注意,两个变体路径是相同的,这意味着您正在尝试复制相同的文件两次。实际上,这不是唯一的原因,你必须明白,当你试图在执行阶段调用它时,你的复制任务已经在配置阶段配置好了,所以你不能改变它的 from 和 into 参数,并且此任务将始终表现相同。

如果你想一个接一个地调用一些任务,你有很多选择,比如任务依赖性、任务完成或任务排序。您可以在 official user guide 中阅读相关信息.有一种方法可以像方法调用一样调用某些任务,但这是一个非常糟糕的解决方案,您必须避免使用它。

所以,如果你想调用复制任务,那么你可以尝试这样的解决方案

assembleRelease.finalizedBy copyApks

这将在每次组装完成时调用复制任务。

关于android - gradle copy as doLast 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37981044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com