2015-10-16 3 views
1

У меня есть система, где после ввода какого-либо пользователя я вызываю os.system("./gradlew assembleDebug "), чтобы получить APK. После этого существует функция, определенная для загрузки APK, который вызывается. Все это хорошо работает в локальной среде. Но на моем экземпляре AWS EC2 прежний вызов не является блокирующим, и функция apk загрузки вызывается даже тогда, когда происходит создание APK, что, очевидно, терпит неудачу. Я использую ngnix для своего экземпляра EC3.Запуск сценария python после успешного создания apk

Я хочу вызвать скрипт python после успешного создания apk.

Это файл в файле build.gradle.

task generateSources << { 
     def script = "python downloadAPK.py".execute() 
    } 

gradle.projectsEvaluated { 
    compileJava.dependsOn(generateSources) 
} 

Я получаю эту ошибку: ошибка (84, 0) Не удалось найти свойство 'compileJava' по проекту ': приложение.

В любом случае, я думаю, что это не поможет мне, так как я не уверен, что это произойдет после создания APK. Поэтому я вижу две вещи, которые можно сделать здесь:

  1. Настройте ngnix или что-то еще на моем экземпляре, что делает первый вызов блокирующим.
  2. Вызвать скрипт python после создания APK. Возможно, зайдите в команду assembleDebug и вызовите скрипт python после успешной сборки.

Пожалуйста, дайте мне знать, какой из них лучше подходит и как это сделать.

ответ

0

Это на самом деле трюк groovy. 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

+0

Спасибо. Но как я узнаю, что эта задача будет вызвана после успешной сборки? –

+0

@HarshVardhan, обновленный ответ, чтобы добавить параметры dependOn для создания задачи. Или вместо подачи в качестве параметра вы можете сделать 'generateSources.dependsOn (assembleDebug)' – JBirdVegas

Смежные вопросы