我正在尝试做一件非常简单的事情。由于 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
,并不真正意味着应该执行此任务。这与您指定一个变量一样,但不对其执行任何操作。
另外,请注意,两个变体路径是相同的,这意味着您尝试将相同的文件复制两次。实际上,这不是唯一的原因,您必须了解,当您尝试在执行阶段调用它时,您的复制任务在配置阶段就已配置,因此您无法更改它的参数和参数,并且该任务的行为始终相同。
如果您想依次调用某些任务,您有多种选择,例如任务依赖性、任务完成或任务排序。您可以在官方用户指南 https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:adding_dependencies_to_tasks。有一种方法可以像方法调用一样调用某些任务,但这是一个非常糟糕的解决方案,您必须避免使用它。
所以,如果你想调用复制任务,那么你可以尝试这样的解决方案
assembleRelease.finalizedBy copyApks
每次组装完成时,这都会调用复制任务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)