在另一个之前运行一个内置的gradle任务

时间:2014-04-12 13:01:41

标签: android gradle android-gradle

我正在运行一些Android测试测试,这些测试要求我正在测试的应用程序是全新安装 - 手机上的应用程序应该不存在。

我通常通过运行

来做到这一点
./gradlew uninstallAll
./gradlew connectedInstrumentTest

但是,有时我忘记卸载并且我的测试失败了。

我想强制uninstallAll在我运行connectedInstrumentTest时自动运行。我该怎么做?

在我的build.gradle中,我尝试了

connectedInstrumentTest.doFirst {
    uninstallAll.execute()
}

但是这给了我

无法在项目':myapp'上找到属性'connectedInstrumentTest'。

我试过

connectedInstrumentTest.dependsOn(uninstallAll)

我得到了同样的错误。

这可能归结为我对Gradle缺乏了解。我已经搜索了这个,但是唯一的例子似乎是自定义任务,而不是Android项目已经内置的任务。

2 个答案:

答案 0 :(得分:2)

@Opal的评论让我有点阅读,我最终得到了这个工作

tasks.whenTaskAdded { task ->

    if(task.name.equals("connectedInstrumentTest")){
        task.dependsOn(uninstallAll)
    }
}

相信问题是试图过早添加依赖项,但将其放入tasks.whenTaskAdded似乎工作正常。现在,当我运行connectedInstrumentTest时,首先卸载应用程序。

答案 1 :(得分:0)

通常

connectedInstrumentTest.dependsOn(uninstallAll)

应该可以工作,但我认为android插件会在评估整个buildcript之后创建一些任务。您可以尝试将上面的代码段放在afterEvaluate块中:

project.afterEvaluate{
    connectedInstrumentTest.dependsOn(uninstallAll)
} 

欢呼声, 勒