当前位置: 首页 > 知识库问答 >
问题:

为Spoon Gradle插件设置applicationApk和instrumentationApk

汪弘光
2023-03-14

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

但是我不能在SpoonE中访问像gradle一样的属性xtension.groovy.

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

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

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

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

以及任务扩展它并覆盖InstrumentationArgs以设置包并启动其他类型的测试。

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"]
    }
}

现在我尝试编辑应用程序Apk或仪器Apk文件:

编辑2:我尝试了新事物:

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

共有3个答案

卜盛
2023-03-14

我们需要考虑参数的注释:

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

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

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

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

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'
}
吴凯泽
2023-03-14

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

平航
2023-03-14

您可以在更改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

 类似资料:
  • 我已经在PhpStom中设置了PlantUML插件。 我已经下载了Graphviz 2.36并安装在我的机器上。 我已经搜索了如何设置Graphviz以便使用PlantUML在PhpStorm中做一个用例,但是我找不到任何信息

  • 问题内容: 在IPython 3交互式shell中: 那是因为1和True获得相同的插值,所以考虑到集合消除了重复项,所以只有其中一个(True)得以保留?我们如何保持两者? 问题答案: 集合是哈希的集合。即使该语句为False,该语句为True。因此,它们具有相同的哈希值,并且不能单独存在于集合中,并且 不能将它们都保留在集合中 编辑 使其明确,正如jme指出的,这是因为这两个都是正确的-它们相

  • 问题内容: 我想在gradle构建中设置-parameters命令,以便可以使用反射来访问参数的名称。似乎我应该在以下关闭中执行此操作。 但是compileOptions被列为只读,当我查看源代码时,没有设置器。 https://gradle.org/docs/current/dsl/org.gradle.api.tasks.compile.JavaCompile.html#org.gradle.

  • maven插件的pom.xml设置是 运行mvn clean install时,我收到以下错误 我错过了什么?我尝试了一些更改,比如添加baselineOnMigrate,但没有效果。

  • 问题内容: 我正在编写一个IntelliJ IDEA插件,用于保存称为Tab Session的打开选项卡的会话。该问题是IntelliJIDEA插件开发的后续工作:保存选项卡组,永久保存它们,并根据用户的要求重新加载一组选项卡。 当前,不支持分割窗口。因此,我想做两件事: 检索有关所有拆分窗口或未拆分窗口的信息,这些窗口是编辑器选项卡的容器。我需要它们的位置和分割方向(水平或垂直)。 保存此信息并

  • 我正在编写一个名为Tab Session的IntelliJ IDEA插件,用于保存打开选项卡的会话。这个问题是IntelliJ IDEA插件开发的后续问题:保存选项卡组,持续保存它们,并在用户请求时重新加载一组选项卡。 目前,不支持分割窗口。因此,我想做两件事情: 检索作为编辑器选项卡容器的所有拆分或未拆分窗口的信息。我需要它们的位置和拆分方向(水平或垂直)。 当这些信息被保存并且需要加载一个标签