【问题标题】:connectedAndroidTest fails with "no connected devices" but am instrument worksconnectedAndroidTest 因“未连接设备”而失败,但仪器工作正常
【发布时间】:2018-01-01 23:14:49
【问题描述】:

我正在设置一个 Jenkins 节点(在 Mac OS X 上)为我的 Android 应用程序运行仪器测试。

我的 Jenkins 项目启动了一个 Android 模拟器并运行 Gradle 任务 :app:connectedAndroidTest。但是任务一直不稳定,有时可以正常运行测试,但大多数时候失败并出现以下错误:

:app:connectedAndroidTest FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:connectedAndroidTest'.
> com.android.builder.testing.api.DeviceException: No connected devices!

经过一番调查,我发现:

  • 该问题仅出现在该机器上;在我的机器(另一台 Mac OS X)上,该任务在 Android Studio 内外始终按预期工作;
  • 问题发生在 Jenkins 外部,即通过手动启动模拟器并从命令行运行 Gradle 任务;
  • 即使 Jenkins 输出警告使用非标准端口,即使使用更常用的 5554-5555 也会出现此问题;
  • adb devices 表示模拟器处于在线状态;
  • adb shell am instrument 也可以;

因此我可以说问题在于:app:connectedAndroidTest 没有检测到正在运行的模拟器。

我已经完成了一个安装 APK 并运行 am instrument 的 shell 脚本,但后者不会产生与 JUnit 兼容的输出。

所以在做其他工作之前,我想知道如何“修复”该 Gradle 任务,以便它检测到模拟器。 我也很高兴获得进一步查明问题的建议,例如找出 Gradle 任务在我的机器上运行的原因。

【问题讨论】:

    标签: android android-emulator android-instrumentation


    【解决方案1】:

    首先清理你的项目,然后重新创建一个Android模拟器,执行一个cmd commond adb start-service。如果再次失败,你应该在市场上使用其他的模拟器。

    【讨论】:

    • 如果您使用真实设备并遇到同样的问题,您会怎么做?
    【解决方案2】:

    我面临着完全相同的问题。 到目前为止有任何提示吗?在我以前的 ant 脚本中,为了确保 adb 连接到设备,我们曾经这样做:

    %ANDROID_SDK%-current\platform-tools\adb.exe devices
    %ANDROID_SDK%-current\platform-tools\adb.exe root
    %ANDROID_SDK%-current\platform-tools\adb.exe devices
    %ANDROID_SDK%-current\platform-tools\adb.exe wait-for-device
    

    通过这种方式,我们确保了设备在测试时可用。

    【讨论】:

    • 我已经用 JUnit 报告完成了模拟 cAT 的 Bash 脚本,但如果应用程序崩溃,我们不会收到任何报告。我猜你的命令必须在模拟器启动之后运行 cAT 之前运行?
    • 好吧,我实际上是在真实设备上使用它。我认为模拟器应该在执行这些命令之前运行,是的。它也应该在 cAT 运行之前运行。您可以做的是使 cAT 动态地依赖于执行上述命令的任务。
    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2023-03-14
    相关资源
    最近更新 更多