成功生成apk后运行python脚本

时间:2015-10-16 04:32:05

标签: android python gradle android-gradle

我有一个系统,经过一些用户输入后我调用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生成之后运行。所以我看到两件事可以在这里完成:

  1. 在我的实例上配置ngnix或其他内容,使前者调用阻塞。
  2. 生成APK后调用python脚本。可以使用assembleDebug命令并在构建成功后调用python脚本。
  3. 请让我知道哪一个是更好的方法以及如何去做。

1 个答案:

答案 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后执行

相关问题