【问题标题】:Running gradle's connectedAndroidTest on a specific device在特定设备上运行 gradle 的 connectedAndroidTest
【发布时间】:2014-07-20 13:43:30
【问题描述】:

如何在特定设备上运行connectedAndroidTest

我希望是这样的:

./gradlew connectedAndroidTest -DconnectedAndroidTest.device=XXXX

我们的 CI 服务器中插入了许多设备,但我似乎找不到任何有关如何定位特定连接设备的文档。

connectedAndroidTest 当前在所有连接的设备上运行测试。

谢谢。

【问题讨论】:

  • 根据此代码 sn-p android-review.googlesource.com/#/c/160929 看起来像一个未来版本
  • 即使在提出问题时不可能,但现在有可能,OP 应该考虑更改接受的答案。 @MotohawkSF 的回复现在是正确的。
  • @JosefAdamcik 同意并完成。

标签: android gradle android-gradle-plugin


【解决方案1】:

它在 2014 年不受支持。connectedCheckhttp://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Android-tasks 的文档明确指出:

运行需要连接设备的检查或 模拟器。它们将在所有连接的设备上并行运行。

有一个功能请求(现在标记为已修复)以选择单个设备:https://code.google.com/p/android/issues/detail?id=66129

【讨论】:

  • 感谢您提供指向现有问题的链接。星期五我阅读了源代码并发现了相同的内容,但没有时间回来回答问题。
  • 根据链接的问题,这不再是真的。这个问题实际上已经解决,现在有一种方法可以选择设备和/或模拟器来运行测试。 @MotohawkSF 的回复现在是有效的(也适用于我)。
【解决方案2】:

我创建了一个“hack”来做到这一点。把这个块放在 build.gradleandroid 部分,然后你必须设置 ANDROID_HOME env变量添加到 sdk 文件夹,UNIT_TESTS_DEVICE_ID 环境变量包含您要在其上运行测试的设备的序列号。

deviceProvider(new com.android.builder.testing.ConnectedDeviceProvider(file(System.getenv("ANDROID_HOME") + File.separator + "platform-tools" + File.separator + "adb")) {
    public String getName() {
        return "singleDevice"
    }

    public List<? extends com.android.builder.testing.api.DeviceConnector> getDevices() {
        List<com.android.builder.testing.api.DeviceConnector> devices = super.devices;
        List<com.android.builder.testing.api.DeviceConnector> toReturn = new ArrayList<>();
        String deviceSerialNum = System.getenv("UNIT_TESTS_DEVICE_ID");
        devices.each {
            if (it.getSerialNumber().equals(deviceSerialNum)) toReturn.add(it);
        }
        if (toReturn.isEmpty()) {
            throw new RuntimeException("Device for unit tests not found!");
        }
        return toReturn;
    }
})

然后您使用任务singleDeviceAndroidTest{Variant} 来运行测试。仅在 gradle 插件版本 1.0.0 上测试。

【讨论】:

    【解决方案3】:

    现在应该可以了。只需将 ANDROID_SERIAL 环境变量设置为您希望运行测试的设备 ID。

    【讨论】:

      【解决方案4】:

      使用ANDROID_SERIAL 变量

      您可以通过两种方式做到这一点:

      1。设置环境变量

      # Set once; all following gradlew commands will use this
      export ANDROID_SERIAL=1000AB0123456YZ
      
      ./gradlew <...>
      

      2。 “设置”只是一个命令

      ANDROID_SERIAL=1000AB0123456YZ ./gradlew <...>
      

      如果您设置/导出了 ANDROID_SERIAL(方法 #1),您可以使用它来覆盖单个命令。

      注意

      这也适用于模拟器标识符(例如,“emulator-5554”)。

      【讨论】:

      • 我接受了这个答案,因为这是新的最佳答案。
      • @MotohawkSF 先生,您应该获得奖牌! 2 年前,我们经历了痛苦来实现我们自己的 shell 脚本和 gradle 任务,以便在特定设备上运行检测测试(使用 adb -s)以实现我们的自动化构建。要是我们知道使用您的解决方案是多么容易就好了!谢谢!
      • 这对我来说也适用于设置 Gitlab 的运行器
      【解决方案5】:

      @MotohawkSF 的回答在 Android Studio 终端中对我不起作用。运行 adb devices

      > adb devices
      List of devices attached
      192.168.22.122:5555    device
      emulator-5554   device
      

      然后

      set ANDROID_SERIAL=192.168.22.122:5555
      gradlew someTask
      

      【讨论】:

        猜你喜欢
        • 2016-08-10
        • 1970-01-01
        • 2023-01-29
        • 1970-01-01
        • 1970-01-01
        • 2014-11-08
        • 2018-05-03
        • 2022-11-10
        • 2016-03-08
        相关资源
        最近更新 更多