尝试运行仪器化测试时出现“未知的API级别”错误。

7
我尝试在一台连接到以太网的设备上运行测试,但是我看到的只有失败。我使用Gradle任务connectedAndroidTest来运行仪器测试,并且在直接连接到我的PC的手持设备上工作正常。然而,同样的测试甚至无法在远程设备上启动。显示的错误是“未找到测试”。之前如果我启动仪器测试而没有连接任何设备,我曾经看到过相同的错误,但是Android Studio以及adb devices的输出都显示了工具链所看到的远程设备。然后我尝试在命令行上运行相同的Gradle任务,带有更多信息。所以我输入:
gradlew connectedAndroidTest --stacktrace --debug
在大量的调试输出中,我发现了一个更好的错误描述:
[INFO] [org.gradle.api.Project] Skipping device 'DEVICE_IP:5555' for 'AppNameHere:': Unknown API Level [WARN] [org.gradle.api.Project] _FoundCompatibleDevices[TestRunner] FAILED
我在谷歌上搜索了这个错误,然后我偶然发现了打印它的源代码。所以我下载了安卓平台工具的源代码,以便更容易地浏览它,对我来说API级别是通过读取属性IDevice.PROP_BUILD_API_LEVEL来检测的,这似乎等于"ro.build.version.sdk"。经过更多的谷歌搜索,我发现它应该在/system/build.prop中定义。设备上的这个文件的内容向我显示它具有正确的API级别19。实际上,在Android Studio中显示了相同的API级别,即显示当前连接设备(及其logcat输出、打开进程等)的android选项卡。然而,在某些情况下,似乎该值不正确。
任何想法出现问题的地方?我应该在哪里寻找真正的问题?在安卓工具链中,设备上的安卓系统中,在我的调查中做错了什么?
我目前正在使用: - Windows 7 - Android Studio 1.1 Preview 1 - Android SDK Tools 24.0.2 - Android SDK Platform-tools 21 - Android SDK Build-tools 19.1

有任何更新吗?我也遇到了同样的问题,尝试在远程服务器上的Jenkins上运行connectedAndroidTests。 - sirFunkenstine
@sirFunkenstine 不,但我最近没有处理它。我想很快会再试一次,如果有任何更新,我会在这里添加。我也希望你能做同样的事情 ;) - dragi
我投票将此问题标记为离题,因为该问题无法再现。我并不确定它是否应该关闭,但似乎我的设置在SO上没有被广泛使用。此外,我不确定问题的根本原因是什么 - 设备上的Android操作系统可能已更新和/或自问题发生以来我已经多次更新了Android Studio和工具,因此“修复”对我来说是未知的,但一些答案(对我而言是错误的)可能对其他人有帮助,根据投票结果。 - dragi
对我来说,这只是将电缆从我的设备上拆下并重新连接的问题。<耸肩> - eis
5个回答

4

我遇到了同样的问题,即在远程Jenkins服务器上运行我的Robotium集成测试。最终,我通过向远程Android项目根目录添加local.properties文件并添加sdk路径来解决此问题。对我而言,它看起来像这样。

   sdk.dir=/usr/local/sdk

然后我遇到了设备未连接的错误,所以我必须运行

/pathToAndroidSdk/platform-tools/adb start-server

并认证我插入的设备。在这个过程中,我几乎把所有的头发都掉光了,但现在集成测试运行正常。

如果您有其他问题,请告诉我。


7
你如何验证设备?我卡在了 Skipping device 'testAVD(AVD)' for 'app:': Unknown API Level 这里。
:没有连接兼容的设备。[TestRunner] FAILED 找到1个已连接的设备,其中0个是兼容的。 AVD已启动并连接,但在本地的GitLab-CI上无法识别。一个等价的模拟器能正常工作。 :-(
- madlymad
1
请告诉我们您如何对设备进行身份验证。 - yUdoDis
我也卡在设备认证上了。@madlymad,你找到解决方案了吗? - Prethia

0

我遇到了同样的错误。我怀疑设备没有完全启动,所以我添加了

while ! "$ANDROID_HOME/platform-tools/adb" shell getprop ro.build.version.sdk; do
  sleep 1
done

这对我来说似乎是有效的。

更新:最好检查init.svc.bootanim,因为Travis CI的android-wait-for-emulator脚本也是这样做的。另请参阅检测Android模拟器何时完全启动


在我的情况下,当我尝试运行测试时,设备始终完全启动,所以这不会有任何影响。 - dragi

0

当出现“始终接受此计算机”USB调试消息时,请勾选始终接受。对我来说,这解决了问题。


0

当我在我的物理安卓设备上设置REACT-NATIVE应用程序时,我遇到了相同的问题。通过将手机开发人员选项中的“选择USB配置”切换为“RNDIS(USB以太网)”,我成功安装了该应用程序。


0

我必须将我的USB配置从充电改为MIDI。

在我的三星手机中,我必须进入设置->开发者选项->USB配置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接