一、无法通过 adb connect 连接使用远程真机
报错信息如下:
Caused by: org.openqa.selenium.WebDriverException: An unknown server-side error
occurred while processing the command. Original error: Error getting device API
level. Original error: Error executing adbExec. Original error: 'Command 'D:\\so
ftware\\AndroidSDK\\android-sdk-windows\\platform-tools\\adb.exe -P 5037 -s 172.
26.131.185\:7413 shell getprop ro.build.version.sdk' exited with code 1'; Stderr
: 'error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
问题原因: 未添加 adbkey
该台连接设备未授权 adb 服务,需要在 STF 平台增加自己电脑对应的 adbKey。
在 STF 平台增加你的 adbKey之后,就可以随时通过 adb connect 连接使用 STF 的设备了。
添加方式:
-
打开 STF 云真机平台的 Settings 页面,点击 Keys Tab,点击 ADB Keys 右侧的添加按钮,输入自己电脑上对应的 adbkey 和设备名称,添加成功即可;
-
未通过第一种方式添加,当使用 adb connect 方式调用到真机时,云真机平台也会弹出一个添加窗口,该窗口显示请求设备名称(通常显示默认的unknown)及设备对应的 adbkey,询问是否添加,点击添加即可。
二、Appium 连接不上任何设备
报错信息如下:
Caused by: org.openqa.selenium.WebDriverException: An unknown server-side error
occurred while processing the command. Original error: Error getting device API
level. Original error: Could not find a connected Android device.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17
:03'
System info: host: 'B011603', ip: '192.168.56.1', os.name: 'Windows 7', os.arch:
'amd64', os.version: '6.1', java.version: '1.8.0_181'
Driver info: driver.version: AndroidDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while pro
cessing the command. Original error: Error getting device API level. Original er
ror: Could not find a connected Android device.
出错信息表示未连接上任何 Android 设备。
排查问题步骤如下:
先检查是否本机的 adb 服务是否有异常
远程连接手机是通过 adb connect 命令连接云真机上的远程调试连接,若连接不上,需要检查一下是否本机的 adb 服务异常。
检查方式:
-
在云真机平台上选择一个可用的设备,点击 Use 使用该设备
-
打开设备的 Control 页面,复制 Remote Debug 链接
- 打开一个 cmd 窗口,粘贴该命令,检查命令结果
C:\Users\Ken>adb connect 172.26.131.185:7405
adb server version (36) doesn't match this client (41); killing...
* daemon started successfully
failed to authenticate to 172.26.131.185:7405
C:\Users\Ken>adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
检查发现 adb connect 无法连接上设备,提示版本不匹配。
先不急着更新或降版本,继续检查 adb 服务。
- 检查 adb 服务使用的 5037 端口是否被占用
C:\Users\Ken>netstat -ano | findstr "5037"
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 9460
TCP 127.0.0.1:5037 127.0.0.1:55432 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:55433 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:55448 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:55449 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:55463 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:55464 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:55478 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:55479 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:55494 TIME_WAIT 0
结果表明,确实是有应用占用了 5037 端口
- 查看占用端口的服务
C:\Users\Ken>tasklist | findstr "9460"
nox_adb.exe 9460 Console 2 7,296 K
发现是夜神模拟器占用了该端口,杀掉该应用。
- 重新连接远程调试
C:\Users\Ken>adb connect 172.26.131.185:7405
failed to authenticate to 172.26.131.185:7405
C:\Users\Ken>adb devices
List of devices attached
172.26.131.185:7405 device
C:\Users\Ken>adb disconnect 172.26.131.185:7405
disconnected 172.26.131.185:7405
发现可以连接成功了,出现 failed to 提示时,可以忽视,可能是版本问题导致,但 adb devices 命令显示仍然是可以连接上设备的。
注意:测试完毕,记得使用 adb disconnect 命令断开连接。
-
测试完毕,在云真机平台断开设备,方便后续真机使用。