简要说明
错误1: Could not find a connected Android device,按下面原理说明,检查5037端口 错误2:adb 提示adb server version(31) doesn’t match this client(41),首先检查下面第3点提到的Remote path是否是空白的,要改为 /wd/hub,第二:用nox_adb.exe 替换 adb.exe,参考下面特别说明。
根据观察得到的连接原理
- 原理:模拟器启动后自动产生5037端口本地监听连接(LISTENING),appium_sevrice则通过这个监听端口进行远程连接(ESTABLISHED)和命令发送,inspector则负责发送命令给appium_service。
- 查看方式:打开cmd窗口,输入 netstat -ano|findstr “5037” 命令,可以查找5037对应的端口号的进程id 也就是pid,可以看到哪些进程使用了5037端口。通过命令 tasklist |findstr “XX”(XX是PID) 或 任务管理器-详细信息-PID中可以查看到具体应用名称。
- 启动夜神模拟器,模拟器就会自动调用其自身目录下的nox_adb.exe,并监听端口5037,这个非常重要,否则无法和appium服务连接,如果出现连接错误,比如 Could not find a connected Android device 错误,请特别注意这个进程是否存在,如果没有则重启模拟器,模拟器会自动调用nox_adb.exe启动在5037端口的监听。
- 启动appium_desktop,等待响应,5037端口不会有变化。
- 运行Appium Inspector.exe,正常启动连接后的情况应该是:nox_adb.exe(进程PID不变还是18472) 会再产生两个“本地IP+端口随机”的远程连接(如下面的51131和51194远程端口),同时SDK目录(androidsdk\platform-tools)下的adb.exe开始工作,产生两个“本地IP+对应上面两个随机端口”的进程(如下面PID为19612和19628的进程),而这两个进程远程连接的端口正是5037,模拟器和appium就可以通信了。
可能需要替换adb.exe的说明:
如果连接仍有问题,请将模拟器中的nox_adb.exe复制到sdk目录中替换掉原始的adb.exe(原始的可以改名备份留着),以保持模拟器和Inspector中的adb.exe的一致。
关于几个端口的解释:
appium连接模拟器或手机过程中关联到包括 62001、4723、5037 的3个端口,他们之间的关系是什么?
- 62001:这个是夜神模拟器的主机+端口(主机:127.0.0.1,端口62001),其他模拟器各自有各自的默认端口,但如果是使用了模拟器多开,这个默认端口是会变化的,具体的查看模拟器端口的方法,可以参考:如何查看夜神模拟器的端口号
- 4723:这个是appium_service默认主机+端口(主机:0.0.0.0,端口4723),inspector是通过这个端口和appium_service通信。
- 5037:夜神模拟器提供给appium_service通信主机+端口(主机:127.0.0.1,端口:5037),这个端口在启动appium inspector.exe后由模拟器自动产生,从下面的appium_service日志可以看到大量adb.exe -s 的操作(命令定向),就是服务器将inspector的命令通过5037端口定向到模拟器。
|