Почему задание gradle выполняется в неправильном порядке? - PullRequest
0 голосов
/ 06 мая 2019

Я хочу запустить задачу для копирования скриншотов с устройств Android после тестирования пользовательского интерфейса.Я добавил в build.gradle модуль:

tasks.whenTaskAdded { task ->
    if (task.name == 'connectedMyAppDebugSources') {
        task.finalizedBy {
            // here is my task
        }
    }
}

при использовании этой задачи:

def fetchScreenshotsTask = task('fetchScreenshots', type: Exec, group: 'reporting') {
    executable "${android.getAdbExe().toString()}"
    args 'pull', '/sdcard/Pictures/screenshots/.', reportDirectory
}

задача запускается в конце, но эта задача не работает, если тесты выполняются на нескольких устройствах,Затем я создал задачу, которая получает идентификатор для всех работающих устройств и запускает еще одну задачу копирования для каждого устройства:

task fetchScreenshotsForAllDeviceTask(group: 'reporting') {

String result = ""
new ByteArrayOutputStream().withStream { os ->
    def output = exec {
        executable "${android.getAdbExe().toString()}"
        args 'devices'
        standardOutput = os
    }
    result = os.toString()

}

List list = result.split('\n')
            .collect {it.split('\t').head()}
            .drop(1)

for(String item: list) {
    createDir(item)
    copy(item)
    clear(item)
    }
}

, и это задача «копирования» для каждого устройства:

def copy(String device) {
    def copyTask = exec {
        executable "${android.getAdbExe().toString()}"
        args '-s', item, 'pull', '/sdcard/Pictures/screenshots/.', reportDirectory
    }
}

Проблемаis: Задача fetchScreenshotsForAllDeviceTask запускается в начале тестов, когда я вставляю его в блок:

 task.finalizedBy {
            // here is my task
        }

В то время как «fetchScreenshotsTask» запускается в конце, если я помещаю его в этот же блок.

1 Ответ

0 голосов
/ 06 мая 2019

Задача fetchScreenshotsForAllDeviceTask (группа: «отчеты») выполняется в жизненном цикле градации фазы конфигурации. Для запуска этой задачи в фазе выполнения необходимо запустить эту задачу в блоке doLast или добавить «<<» к задаче: </p>

task fetchScreenshotsForAllDeviceTask(group: 'reporting') << {
//here is task code
}
...