Установите applicationApk и toolsationApk для плагина Spoon Gradle

Я хотел бы установить файлы .apk, которые будут использоваться для запуска моих тестов с помощью SpoonGradlePlugin.

Есть доступные свойства, которые я могу установить программно из файла gradle:

https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonExtension.groovy

Но у моего проекта есть разные вкусы и названия, и я хотел бы их протестировать. С текущей настройкой я получаю:

* What went wrong:
A problem was found with the configuration of task ':app:spoonDebugAndroidTest'.
> File '/Users/F1sherKK/Dev/MyApp-Android/app/build/outputs/apk/app-debug.apk' specified for property 'applicationApk' does not exist.

Мои названия сборки:

app-debug-androidTest-unaligned.apk
MyApp-debugA-1.2.3-201.apk
MyApp-debugB-1.2.3-201.apk
MyApp-debugC-1.2.3-201.apk

Вот почему я хотел бы настроить свой .apk где-нибудь в коде gradle или в консоли. То, что я нашел до сих пор, есть поля, доступные в плагине Spoon Gradle:

https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonRunTask.groovy

с именами:

  /** Instrumentation APK. */
  @InputFile
  File instrumentationApk

  /** Application APK. */
  @InputFile
  File applicationApk

Но я не могу получить доступ к тем свойствам, которые находятся в градиенте, в SpoonExtension.groovy.

Есть ли способ настроить эти поля?

// РЕДАКТИРОВАТЬ - добавлено несколько попыток: это моя базовая конфигурация ложки:

spoon {
    debug = true
    baseOutputDir = file("$buildDir/spoon-log")
    if (project.hasProperty('spoonClassName')) {
        className = project.spoonClassName

        if (project.hasProperty('spoonMethodName')) {
            methodName = project.spoonMethodName
        }
    }
}

И задачи, расширяющие его и перезаписывающие instumentationArgs для установки пакета и запуска других видов тестов.

task spoonAllTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.sendmoney.instrumentation"]
    }
}

task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.instrumentation.flowtests"]
    }
}

И теперь я пытаюсь отредактировать файл applicationApk или toolsationApk:

введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения

Edit2: я попробовал новую вещь:

task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        inputs.property("applicationApk", "$buildDir/outputs/apk/ap12345p-debug.apk")
        inputs.property("instrumentationApk", "$buildDir/outputs/apk/ap125p-debug.apk")
        println inputs.getFiles()
        println inputs.getProperties()
        instrumentationArgs = ["package=com.azimo.sendmoney.instrumentation.flowtests"]
    }
}

И ответ терминала:

2015-10-26 20:24:12 [SR.runTests] Executing instrumentation suite on 0 device(s).
2015-10-26 20:24:12 [SR.runTests] Application: com.azimo.sendmoney.debug1 from /Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/app-debug.apk
2015-10-26 20:24:12 [SR.runTests] Instrumentation: com.azimo.sendmoney.debug1.test from /Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/app-debug-androidTest-unaligned.apk
:app:spoon
:app:spoonFlowTests
file collection
{instrumentationApk=/Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/ap125p-debug.apk, applicationApk=/Users/F1sherKK/Dev/Azimo-Android/app/build/outputs/apk/ap12345p-debug.apk}
:Azimo-Android:app:help

Welcome to Gradle 2.5.

To run a build, run gradlew <task> ...

To see a list of available tasks, run gradlew tasks

To see a list of command-line options, run gradlew --help

To see more detail about a task, run gradlew help --task <task>

BUILD SUCCESSFUL

Total time: 13.289 secs

person F1sher    schedule 22.10.2015    source источник


Ответы (4)


См. мой ответ на ваш другой вопрос объясняя, что не так с тем, как вы настраиваете свои задачи.

person Roman Mazur    schedule 21.01.2016

Вы можете применить плагин Spoon после изменения имени apk следующим образом:

applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
        }
    }
afterEvaluate {
        apply plugin: 'spoon'
        spoon {
            debug = true;
        }
    }

Источник: https://github.com/stanfy/spoon-gradle-plugin/issues/70

person riwnodennyk    schedule 02.11.2015
comment
Это проигнорирует ваши пользовательские настройки ложки, такие как debug = true. См. проблему github.com/stanfy/spoon-gradle-plugin/issues/94< /а> - person Carlo Matulessy; 17.01.2017

Нам нужно рассмотреть аннотацию параметров:

  /** Instrumentation APK. */
  @InputFile
  File instrumentationApk

  /** Application APK. */
  @InputFile
  File applicationApk

Поскольку они помечены как @InputFile, мы должны иметь возможность создать пользовательскую задачу, которая зависит от задачи Spoon, которая передает входные данные с помощью свойства input.files.

Грубый пример (непроверенный):

task customSpoon(type: Exec, dependsOn: spoon) {
     inputs.files ["path/instrumentation.apk", "path/debuggable.apk"]
}  

ОБНОВИТЬ

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

task runSpoonTask(type: Exec) {
    commandLine './gradlew', 'spoon', '$buildDir/outputs/apk/ap12345p-debug.apk', '$buildDir/outputs/apk/ap125p-debug.apk'
}
person bonnyz    schedule 22.10.2015
comment
Могу я попросить вас посмотреть на это немного более внимательно? Я боролся с этим несколько дней. Пробовал Inputs.getProperties(), InputFiles.getProperties() - также ищите имя свойства, которое я мог бы установить, applicationApk = file('myfile'), apk и test-apk, Application и многое другое. Также написал электронное письмо создателю плагина, но ответа нет. Всегда получайте что-то вроде: Нет такого свойства: applicationApk для класса: com.stanfy.spoon.gradle.SpoonExtension_Decorated - person F1sher; 26.10.2015
comment
@ F1sher Вы пытались создать новую задачу, которая зависит от базовой задачи с ложкой, как я предложил? Обновите свой ответ, постарайтесь, я посмотрю - person bonnyz; 26.10.2015
comment
извините, я пытался воспроизвести столько, сколько я помню из того, что я пробовал, и запускал его, я сделал гораздо больше вариаций и т. д. Я не мог форматировать стек в своем коде ... не знаю почему, поэтому я дал вам экраны. - person F1sher; 26.10.2015
comment
@ F1sher Вы пробовали ... именно тот код, который я предложил? (возможно, вам просто нужно установить правильные пути) - person bonnyz; 26.10.2015
comment
Да. Когда я устанавливаю ваш код, ввод становится серым, и когда я навожу на него курсор, я получаю: Не удается разрешить символ «входы». И в терминале после запуска я вижу этот + путь на 100% правильный: возникла проблема с оценкой проекта ': app'. › Нет подписи метода: org.gradle.api.internal.file.UnionFileCollection.getAt() применима для типов аргументов: (java.util.ArrayList) значения: [[/Users/F1sherKK/Dev/myApp/app/build /outputs/apk/app-debug.apk, ...]] Возможные решения: getAt(int), getAt(java.lang.String), putAt(java.lang.String, java.lang.Object), wait( ), получить как путь(), последний() - person F1sher; 26.10.2015
comment
Я добавил еще одно редактирование. Мне удалось добавить несколько файлов, но, как вы можете видеть в результате, он по-прежнему использует файлы по умолчанию, и эта коллекция, которую я создал, игнорируется, хм... - person F1sher; 26.10.2015
comment
@ F1sher Официальные документы действительно неясны по этому поводу. Я добавил альтернативу моему первоначальному ответу, намного проще, но немного менее серьезно;) - person bonnyz; 27.10.2015

У меня такая же проблема:

... указанный для свойства 'applicationApk' не существует

Мы использовали это, чтобы переименовать «app-debug.apk» в «currentProject-debug.apk»:

applicationVariants.all { variant ->
            variant.outputs.each { output ->
                output.outputFile = new File(
                        output.outputFile.parent,
                        output.outputFile.name.replace("app", "${project.hdmiAppName}"))

            }
} 

Но кажется, что это работает намного лучше со Spoon:

defaultConfig {
    applicationId packageName
    ...
    setProperty("archivesBaseName", "${project.hdmiAppName}")
}

Это переименует «приложение» — часть имени APK на то, что вам нравится. В нашем случае у нас есть "${project.hdmiAppName}", указанный в файле свойств. Но я думаю, что это также может быть "MyApp-${versionName}".

person StefanTo    schedule 18.07.2016