我正在尝试从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>
答案 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
: