You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:01:07