我正在使用AndroidStudio4.1和Gradle 6.7.1
(请注意,"mergeReleaseAssets“不是我的自定义任务,它是系统任务的一部分,我不知道在哪里可以找到”mergeReleaseAssets“的定义)
我想将任务"mergeReleaseAssets“设置为在"myTask”之后执行,如下所示:
...
> Task :app:myTask
...
(no matter how many tasks in the middle should be ok)
...
> Task :app:mergeReleaseAssets
...
build.gradle:中的任务定义
...
task myTask {
doLast {
println String.format("put something in the assets")
}
}
tasks.withType(JavaCompile) { t -> t.finalizedBy myTask }
...
当通过单击Menubar -> "Build“->”重构项目“构建项目时,任务执行顺序并不总是相同的,似乎任务是并行执行的。
第一次生成输出:
Executing tasks: [clean, :app:assembleRelease] in project /home/testproject
> Task :clean UP-TO-DATE
> Task :app:clean UP-TO-DATE
> Task :app:preBuild UP-TO-DATE
> Task :app:preReleaseBuild UP-TO-DATE
> Task :app:compileReleaseAidl NO-SOURCE
> Task :app:compileReleaseRenderscript NO-SOURCE
> Task :app:generateReleaseBuildConfig
> Task :app:checkReleaseAarMetadata
> Task :app:generateReleaseResValues
> Task :app:generateReleaseResources
> Task :app:createReleaseCompatibleScreenManifests
> Task :app:extractDeepLinksRelease
> Task :app:processReleaseMainManifest
> Task :app:processReleaseManifest
> Task :app:processReleaseManifestForPackage
> Task :app:mergeReleaseResources
> Task :app:processReleaseResources
> Task :app:mergeReleaseNativeDebugMetadata NO-SOURCE
> Task :app:mergeReleaseShaders
> Task :app:javaPreCompileRelease
> Task :app:compileReleaseJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
> Task :app:myTask
> Task :app:compileReleaseSources
> Task :app:lintVitalRelease
> Task :app:compileReleaseShaders NO-SOURCE
> Task :app:generateReleaseAssets UP-TO-DATE
> Task :app:mergeReleaseAssets
> Task :app:compressReleaseAssets
> Task :app:dexBuilderRelease
> Task :app:checkReleaseDuplicateClasses
> Task :app:processReleaseJavaRes NO-SOURCE
> Task :app:collectReleaseDependencies
> Task :app:sdkReleaseDependencyData
> Task :app:mergeReleaseJniLibFolders
> Task :app:mergeReleaseNativeLibs
> Task :app:stripReleaseDebugSymbols NO-SOURCE
> Task :app:validateSigningRelease
> Task :app:mergeReleaseJavaResource
> Task :app:desugarReleaseFileDependencies
> Task :app:mergeExtDexRelease
> Task :app:mergeDexRelease
> Task :app:packageRelease
> Task :app:assembleRelease
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.7.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 2m 0s
32 actionable tasks: 30 executed, 2 up-to-date
Build Analyzer results available
第二次生成输出:
Executing tasks: [clean, :app:assembleRelease] in project /home/testproject
> Task :clean UP-TO-DATE
> Task :app:clean UP-TO-DATE
> Task :app:preBuild UP-TO-DATE
> Task :app:preReleaseBuild UP-TO-DATE
> Task :app:compileReleaseAidl NO-SOURCE
> Task :app:compileReleaseRenderscript NO-SOURCE
> Task :app:generateReleaseBuildConfig
> Task :app:checkReleaseAarMetadata
> Task :app:generateReleaseResValues
> Task :app:generateReleaseResources
> Task :app:javaPreCompileRelease
> Task :app:createReleaseCompatibleScreenManifests
> Task :app:extractDeepLinksRelease
> Task :app:processReleaseMainManifest
> Task :app:processReleaseManifest
> Task :app:processReleaseManifestForPackage
> Task :app:mergeReleaseNativeDebugMetadata NO-SOURCE
> Task :app:mergeReleaseShaders
> Task :app:compileReleaseShaders NO-SOURCE
> Task :app:generateReleaseAssets UP-TO-DATE
> Task :app:mergeReleaseAssets
> Task :app:compressReleaseAssets
> Task :app:checkReleaseDuplicateClasses
> Task :app:processReleaseJavaRes NO-SOURCE
> Task :app:mergeReleaseResources
> Task :app:processReleaseResources
> Task :app:mergeReleaseJavaResource
> Task :app:compileReleaseJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
> Task :app:desugarReleaseFileDependencies
> Task :app:myTask
> Task :app:compileReleaseSources
> Task :app:lintVitalRelease
> Task :app:dexBuilderRelease
> Task :app:collectReleaseDependencies
> Task :app:sdkReleaseDependencyData
> Task :app:mergeReleaseJniLibFolders
> Task :app:validateSigningRelease
> Task :app:mergeReleaseNativeLibs
> Task :app:stripReleaseDebugSymbols NO-SOURCE
> Task :app:mergeExtDexRelease
> Task :app:mergeDexRelease
> Task :app:packageRelease
> Task :app:assembleRelease
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.7.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1m 54s
32 actionable tasks: 30 executed, 2 up-to-date
Build Analyzer results available
你可以第一次看到,的顺序是"myTask“-> . -> "mergeReleaseAssets”,,但是第二次,它改为“mergeReleaseAssets”-> . -> "myTask".
然后,我尝试在build.gradle中设置任务依赖项:
project.getTasks().getByName("mergeReleaseAssets").dependsOn(myTask)
//This also not work
//project.getTasks().getByName(":app:mergeReleaseAssets").dependsOn(myTask)
但Android显示错误:
Task with name "mergeReleaseAssets" not found in project ':app'
//Or this error if using ":app:mergeReleaseAssets":
Task with name ":app:mergeReleaseAssets" not found in project ':app'
帮帮忙,谢谢。
发布于 2020-12-01 08:14:45
问题是mergeReleaseAssets
任务是动态创建的,因此不能在build.gradle
脚本中直接引用它。
一个解决方案是使用Project.afterEvaluate
生命周期挂钩,如所描述的这里。
project.afterEvaluate{
// at this stage, task 'mergeReleaseAssets' has been declare, you can reference it to perform additional configuration
project.getTasks().getByName("mergeReleaseAssets").dependsOn(myTask)
}
https://stackoverflow.com/questions/65077890
复制相似问题