5

我想设置 .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

这就是为什么我想在 gradle 代码或控制台中的某个地方设置我的 .apk。到目前为止,我发现 Spoon Gradle Plugin 中有可用的字段:

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 中的 gradle 这样的属性。

有没有办法设置这些字段?

//编辑 - 添加了一些尝试:这是我的基本勺子配置:

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 或 instrumentationApk 文件:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

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
4

4 回答 4

4

您可以在更改 apk 名称后应用 Spoon 插件,如下所示:

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

于 2015-11-02T19:05:13.557 回答
0

我有同样的问题:

...为属性“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 名称的“app”部分重命名为您喜欢的任何名称。在我们的例子中,我们已经"${project.hdmiAppName}"在属性文件中指定了。但我想也可以 "MyApp-${versionName}"

于 2016-07-18T13:02:49.003 回答
0

我们需要考虑参数的注解

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

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

由于它们被标记为@InputFile,我们应该能够创建一个自定义任务,该任务依赖于使用input.files属性传递输入的 Spoon 任务。

一个粗略的例子(未经测试):

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'
}
于 2015-10-22T17:31:27.547 回答
0

请参阅我对您的不同问题的回答,解释您如何配置任务有什么问题。

于 2016-01-21T08:03:18.770 回答