我有一个系统,经过一些用户输入后我调用os.system("./gradlew assembleDebug ")
来生成一个APK。在此之后,有一个定义的功能下载APK,它被调用。这一切都适用于当地环境。但是在我的AWS EC2实例上,前一个调用不是阻塞调用,即使在APK生成过程中也会调用下载apk函数,这显然会失败。我在我的EC3实例上使用了ngnix。
我想在成功生成apk后调用python脚本。
这是在我的build.gradle文件中。
task generateSources << {
def script = "python downloadAPK.py".execute()
}
gradle.projectsEvaluated {
compileJava.dependsOn(generateSources)
}
我收到此错误错误:(84,0)无法找到属性&#39; compileJava&#39;在项目&#39;:app&#39;。
无论如何我认为这对我没有帮助,因为我不确定这是否会在APK生成之后运行。所以我看到两件事可以在这里完成:
请让我知道哪一个是更好的方法以及如何去做。
答案 0 :(得分:0)
这实际上是一种常规技巧。默认情况下,GString#execute()
未阻止。但是我们可以通过等待exitValue来阻止它。
因此,如果您更改了
,您的代码就可以运行task generateSources << {
def script = "python downloadAPK.py".execute()
}
在让任务完成之前等待Process
结束
task generateSources(dependsOn: assembleDebug) << {
def process = "python downloadAPK.py".execute()
// Wait till the process completes before continuing
int exitValue = process.waitFor()
println "Process exited with value $exitValue"
}
然后当你构建时只运行gradlew generateSources
并且由于该任务依赖于assembleDebug
首先运行,因此将始终在任务运行之前生成apk。这可能也意味着Process#waitFor
没有意义,因为它在生成APK后执行