Gradle Exec任务从命令行构建运行,但不是从Android构建

时间:2017-02-06 20:28:34

标签: android python unix gradle groovy

我正在尝试从Exec类型的Gradle任务执行python脚本。我的主要构建任务依赖于此任务。让我们为这个例子调用我的构建任务assembleProjectDebug。让我们简化一下这个例子:

tasks.create(name: newFooTask, type: Exec) {
    commandLine "python", "doSomething.py"
}

tasks[assembleProjectDebug].dependsOn(newFooTask)

如果我从终端运行./gradlew assembleProjectDebug,我的python脚本会执行,并且一切都在世界各地。但是,如果我尝试使用Build -> Make Project从Android Studio构建,我的python脚本将不会执行。

我也可以确认我当前选择的构建变体设置为projectDebug,并且还可以确认从Android Studio构建时,:app:assembleProjectDebug出现在日志中,让我相信assembleProjectDebug任务已经或将要执行(我可能在那里错了)。

为了简洁起见,我还遗漏了在我的任务中指定环境变量的位置,该环境变量将我的$ PATH变量指向我的python exec的位置。

有没有任何理由,为了解决为子进程分配正确的$ PATH变量,命令行构建将执行此任务,但Android Studio中的构建将不会执行此任务?< / p>

2 个答案:

答案 0 :(得分:0)

您可能需要在Exec任务上设置workingDir

例如:

tasks.create(name: newFooTask, type: Exec) {
   commandLine "python", "doSomething.py"
   workingDir = projectDir
}

答案 1 :(得分:0)

我找到了解决问题的方法。在Android Studio中构建,我的任务依赖关系没有像从命令行构建时那样执行。这是因为在Configure on Demand中选择了Android Preferences -> Build, Execution, Deployment -> Compiler。 Android Studio默认应用此设置。您可以在此处详细了解Configure on Demand

Configure on Demand in Gradle