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

ConnectedAndroidTest执行的任务列表是什么?

丌官玺
2023-03-14

我想了解更多关于ConnectedAndroidTest分级任务的信息。我看到它是用来安装应用程序和测试APK以及运行测试的。

但它的具体步骤是什么?(分级任务(如果有))

共有1个答案

秦昂然
2023-03-14

我的第一个如此回答,请温柔;)

但它的具体步骤是什么?(分级任务(如果有))

因此,如果您希望对ConnectedAndroidTest依赖的任务有一个高级概述,只需运行./gradlew ConnectedAndroidTest./gradlew cat(不使用-q选项)就会在执行cat依赖的每个任务的名称。任务本身内部不能有其他任务,但可以依赖于其他任务在它之前出现。

从这个答案来看,Gradle Build任务实际上是与java相关的,并不负责构建测试APK。相反,它是AssembleAndroidTest任务,该任务位于执行该任务的ConnectedAndroidTest之前。您对ConnectedAndroidTest的理解是正确的,但它实际上安装并运行了测试APK。但我一会儿就会知道怎么做。我的回答的其余部分将深入到有效使用任务所必需的更多细节,但如果您想了解它的工作方式,则会很有用。

一些背景
与许多其他Android gradle插件任务一样,connectedAndroidTest实际上是在执行阶段的某个点放在一起的,因为不同的构建变体(debug、release、Flavor1、Flavor2等)。因此ConnectedAndroidTest在配置阶段(当大多数构建脚本逻辑被执行时)不可用。相反,一旦构建了它,它就被设置为Android对象中TestVariants属性的ConnectedInstrumentTest属性(基本上是一个字段)。

作为一个示例进行说明,如果希望访问此任务以某种方式对其进行操作(可能在任务末尾添加action),可以在build.gradle文件中执行如下操作:

android {
  testVariants.all { variant ->
    variant.connectedInstrumentTest.doLast {
      println "This will be executed right after our connectedInstrumentTest!"
      println "The name of the test type: $connectedInstrumentTest.name"
      println "The type of test $connectedInstrumentTest.class"       
    }
  }
}

然后运行./gradlew-q cat

因此,在这里,我将在任何已构建并分配给ConnectedInstrumentTest属性的任务的结尾添加一个操作,该属性嵌套在Android对象中相当深。此任务可能是ConnectedDebugAndroidTest或类似的任务。

任务在做什么?
现在,从我放入上一个println中的type属性中,我们可以看到任务的类实际上是com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask_Enterprised。老实说,我还不太确定_darment部分是从哪里来的,但是通过google搜索类名的其余部分,我们可以获得任务基类的源代码。

任务的主要操作称为runtests(),它或多或少地向您展示了任务是如何完成它所做的工作的。如果您稍微遵循一下源代码,您最终会发现adb pm install命令将用于安装APK。

虽然我找不到,但我怀疑在其他地方使用了adb命令adb shell am instrument-w com.package.name/android.support.test.runner.AndroidJUnitRunner命令来最终驱动测试

所以我希望这不会太让人困惑--我最近才学到了很多,所以有些事情可能不是100%。我建议大家通过gradle文档,特别是如何创建一个自定义插件和一个自定义任务,并且查看Android gradle插件工具文档。

 类似资料:
  • 我有一个文件,看起来像这样 wsimport任务从wsdl文件生成所需的一些java文件。生成需要一些时间,所以我不希望每次构建jar或编译程序时都执行它。 wsclean任务旨在当wsdl发生更改时使用。 首先,我运行wsimport任务并确认文件生成正确,它们就是! 但是现在,当我运行gradle jar时,生成的文件被删除了。为什么? 当我注释掉wsclean任务时,jar任务成功地继续。为

  • 问题内容: 我很简单(或任何具有的任务) 现在,当我运行时,我总是看到任务正在执行或打印输出 为什么内部任务总是有输出? 问题答案: 如果您具有以下代码: 您正处于任务的 配置 阶段。此阶段在脚本评估期间运行。如果要在执行任务时打印某些内容,则需要为任务添加 操作 。 看起来像: 运行任务时将评估这段代码。与在Task的对象上调用方法完全相同。您可以添加许多操作。 编辑 我也强烈建议您阅读此博客文

  • 向ExecutorService对象提交任务的执行顺序是什么? 场景:让我们暂时假设Executor线程池大小为5,我已经向它提交了20个可运行任务,我们知道一次只能执行5个任务,其余的任务将在bucket中等待。所以我的问题是提交的任务以什么顺序执行。它是遵循FIFO数据结构还是从bucket中随机选取任务。 还有,有没有办法指定它应该以什么顺序执行。 例子:

  • 任务是项目管理中最小单位。任务是一个具体的工作,有明确的负责人和截止时间,比如需要在某个特定的时间段内完成某项工作。

  • 我正在尝试创建一个应用程序,用于查询cat图像的站点,如果JSON ID是唯一的,则将其保存到android设备,然后从设备以幻灯片格式显示它们。尽管如此,我的AsyncTask似乎并没有实际执行。调试器确认已建立网络连接,并且不会向我反馈任何错误,所以我不知道代码出了什么问题。希望有人能帮忙!代码如下:

  • 我有一个Gradle任务,简单地将文件从一个文件夹复制到另一个文件夹。 当在配置阶段调用copy'from''into'方法时,它可以工作,但当在执行阶段调用它们时,它就不工作了。 这样做是有效的 gradle copyServerConfig 如果我把它放在doFirst{}块中,也会发生同样的事情。 我不明白的另一件事是: gradle task1 但如果我改成这样: gradle task1