android - 在没有DependOn的任务中运行成绩任务

标签 android android-studio gradle groovy android-gradle-plugin

假设我从cmd行执行了一组任务,并且可以正常工作:

gradle processReleaseManifest compileReleaseSources run assembleRelease

我定义的任务在这里运行。

所以我的要求是我需要创建一个执行上述4个任务的任务,
例如说新任务abc,以相同的顺序运行上述任务,

我知道我不能在这种情况下使用dependsOn,因为processReleaseManifest compileReleaseSource在显示的构建gradle中使用时,

无法获得类型为'assembleRelease'的项目':app'的未知属性org.gradle.api.Project

那么解决方案是什么?

最佳答案

您可以使用@ lu.koerfer的答案表示,它使用dependsOn列表中的字符串来引用在构建文件中进一步定义的任务。

换句话说,这有效:

task foo {}
task bar(dependsOn: [foo]) {}

这也适用:
task bar(dependsOn: ['foo']) {}
task foo {} 

现在,要使任务按顺序运行,您希望事情并没有那么简单。 dependsOn属性仅告诉任务在任务本身运行之前需要运行哪些任务。它不会告诉gradle按照dependsOn子句中定义的顺序运行任务。

一个例子:
task one {}
task two {} 
task three {} 
task run(dependsOn: [one, two, three]) {}

运行时将导致以下输出:
~> gradle run
:one UP-TO-DATE
:three UP-TO-DATE
:two UP-TO-DATE
:run UP-TO-DATE

BUILD SUCCESSFUL

...请注意以下事实:我们没有按照onetwothreerun的顺序运行。

换句话说,命令行调用会强制任务以定义的顺序运行,而dependsOn是一个集合,没有顺序。

您可以通过几种方法使任务按所需顺序运行。一种是定义对任务的依赖关系(这可能是通用路径):
task one {}
task two(dependsOn: ['one']) {} 
task three(dependsOn: ['two']) {} 
task run(dependsOn: [one, two, three]) {}

结果是:
~> gradle run
:one UP-TO-DATE
:two UP-TO-DATE
:three UP-TO-DATE
:run UP-TO-DATE

BUILD SUCCESSFUL

另一种方法是使用gradle更高版本中添加的task ordering constructs

另外,如果您需要向文件中较早位置定义的任务添加任务依赖项,则可以通过以下方式进行操作:
task foo {}
someTaskDefinedFurtherUp.dependsOn 'foo'

它将任务foo添加到someTaskDefinedFurtherUp的依赖项中。

关于android - 在没有DependOn的任务中运行成绩任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50871078/

相关文章:

java - ArrayAdapter要求资源ID为DialogFragment中的TextView

java - Android 中通过蓝牙发送数据

android - 编译后的APK文件包含大量未知的(A)XML布局

android - 在 Android Studio 中使用 Git 将本地分支与远程分支 merge

android - NavigationView 中的彩色图标

android - 使用 gradle 编译 Twitter4j

php - 我将如何防止在 MySQL 数据库上运行查询并以 JSON 格式输出的 PHP Web 服务脚本的热链接?

android - 在Android Studio中Gradle构建失败

android - gradle构建错误: app:dexDebug

java - 下载的视频在 Android 版本 <= 6.1 上无法播放