gradlew tasks
给了我这些任务(等等):
assemble - Assembles all variants of all applications and secondary packages.
assembleAndroidTest - Assembles all the Test applications.
assembleDebug - Assembles all Debug builds.
assembleRelease - Assembles all Release builds.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
clean - Deletes the build directory.
cleanBuildCache - Deletes the build cache directory.
compileDebugAndroidTestSources
compileDebugSources
compileDebugUnitTestSources
compileReleaseSources
compileReleaseUnitTestSources
mockableAndroidJar - Creates a version of android.jar that's suitable for unit tests.
我可以添加额外的代码assemble
,如下所示:
assemble {
doFirst {
println "hello"
}
}
但不能与此列表中的其他许多人一起使用,例如,尝试添加到assembleDebug
会出现此错误:
Error:(65, 0) Could not find method assembleDebug() for arguments [build_6s1kvuwgpamstoh3d4xsg1ndv$_run_closure3@13494795] on project ':app' of type org.gradle.api.Project.
为什么?
答案 0 :(得分:1)
这很容易解释。当您运行gradle脚本时,它将按声明的顺序进行评估。但是 - 有时,和android项目是一个很好的例子 - 你不(也不能)知道可以创建什么任务,因为它们基于项目的内容(文件,变体,等等)。因此,这些任务是在评估整个项目之前创建的。这就是为什么你不能在build.gradle
中访问 - 因为项目评估尚未完成。
现在,如果您知道将创建名为assembleDebug
的任务,则可以使用[afterEvaluate
] 1在评估后配置任务。此时,将评估整个项目并添加/生成所有任务。
所以:
project.afterEvaluate {
assembleDebug {
doFirst {
println "hello"
}
}
}