远程ADB多设备场景下Appium执行adb forward报错求助
远程多设备Appium测试ADB转发报错问题
环境信息
- 本地运行基于
appium/appium:v1.22.3-p1的Docker容器,内置Java 17和Maven 3.6.3 - 远程Linux机器运行ADB服务器,通过USB连接多台智能手机
单设备测试正常场景
当远程服务器仅连接1台手机,测试代码指定其UDID时,运行正常:
UiAutomator2Options options = new UiAutomator2Options(); [...] options.setRemoteAdbHost("10.38.223.243"); options.setAdbPort(5038); options.setUdid("R58N12HEW3E");
多设备测试报错场景
当远程服务器连接3台手机,测试代码指定其中一台UDID时:
执行adb devices输出:
List of devices attached 8e410c3e device R58N12HEW3E device RZCT50M61JX device
出现如下错误:
Could not start a new session. Response code 500. Message: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command '/opt/android/platform-tools/adb -H 10.38.223.243 -P 5038 -s R58N12HEW3E forward tcp\:8200 tcp\:6790' exited with code 1'; Command output: adb: error: more than one device/emulator
即使使用-s参数指定UDID,ADB转发仍报错,求解决建议。
解决建议
1. 重置容器与远程ADB的连接
在本地容器内先断开再重连远程ADB服务器,确保设备识别正常:
adb disconnect 10.38.223.243:5038 adb connect 10.38.223.243:5038 # 验证设备列表 adb -H 10.38.223.243 -P 5038 devices
2. 启动容器时绑定远程ADB套接字
添加环境变量让容器内ADB直接复用远程服务器的ADB进程,避免本地ADB干扰:
docker run -e ADB_SERVER_SOCKET=tcp:10.38.223.243:5038 [其他容器参数] appium/appium:v1.22.3-p1
3. 升级Appium或UiAutomator2驱动
当前使用的Appium版本较旧,可能存在多设备场景下的ADB转发Bug,尝试升级:
# 容器内升级UiAutomator2驱动 appium driver update uiautomator2 # 或直接更换最新稳定版Appium镜像 docker run appium/appium:latest [容器参数]
4. 手动提前建立端口转发
在远程Linux机器上手动执行端口转发,再禁止Appium重复配置:
# 远程机器上执行 adb -s R58N12HEW3E forward tcp:8200 tcp:6790
测试代码中添加:
options.setSkipServerInstallation(true);
5. 修复远程ADB权限问题
重启远程ADB服务器并使用sudo提升权限,避免设备访问权限不足:
# 远程机器上执行 adb kill-server sudo adb start-server
内容的提问来源于stack exchange,提问作者Rozmaryn
相关产品推荐
相关产品推荐

