ADB cannot bind 'tcp:5037' ADB server didn't ACK

本文详细介绍了在系统中使用多个不同源的ADB时,遇到ADBserver端口占用问题的排查与解决方法,通过使用命令行工具netstat和adbnodaemonserver,找出占用5037端口的服务,并使用kill命令终止它们,从而恢复ADB服务的正常运行。

当我们在系统中使用多个不同源的adb时,特别容易浮现标题所述的错误:

adb server is out of date.  killing...
cannot bind 'tcp:5037'
ADB server didn't ACK
* failed to start daemon *
error: 

上述错误出现的原因是说,我们的adb 所绑定的端口,被其他服务占用了,或者说有多个服务占用了5037端口,导致彼此无法正常工作.

想印证上述猜测,可通过如下命令:

w@xxx:~$ adb nodaemon server

cannot bind 'tcp:5037'

下面就是查看那些服务占用了5037端口,找到那些服务,使用kill命令杀死他们.

查看端口使用状态,可使用netstart命令:

查看已经连接的服务端口:

netstat -a
查看所有服务,使用:

netstat -ap

在使用时,可以配合grep命令,使用.例如,我们要查看5037端口对于的服务,故:

netstat -ap|grep "5037"
输入如下:

(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)
tcp        0      0 localhost:5037          *:*                     LISTEN      25255/adb       
tcp        0      0 localhost:51695         localhost:5037          ESTABLISHED 23836/adb       
tcp        0      0 localhost:5037          localhost:51695         ESTABLISHED 25255/adb       
我们可以看到,有多个adb服务,占用了5037端口,导致其无法正常工作.故:使用kill命令杀死所有的adb进程,重新使用adb start-server进行重启adb.

w@xxx:~/Tools/adt-bundle-linux-x86_64-20140702/sdk/tools$ kill 23836
w@xxx:~/Tools/adt-bundle-linux-x86_64-20140702/sdk/tools$ kill 25255

上述为ubuntu系统下的处理方式,window类同.



关注我的技术公众号,查看更多优质技术文章推送

微信扫一扫下方二维码即可关注:

关注我的技术公众号,查看更多优质技术文章推送


<think>我们正在解决ADB显示“cannot bind 'tcp:5037'”的错误。根据引用内容,这个错误通常是由于ADB端口(默认5037)被其他进程占用,或者有多个ADB服务实例试图绑定同一个端口导致的。下面将提供详细的解决步骤。 ### 解决步骤: #### 1. **结束占用5037端口的进程** - **Windows系统**: 1. 打开命令提示符(管理员权限)。 2. 查找占用5037端口的进程: ```cmd netstat -ano | findstr ":5037" ``` 3. 记录输出结果中的PID(例如,`TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 12345`,则PID为`12345`)。 4. 结束该进程: ```cmd taskkill /F /PID 12345 ``` 5. 重启ADB服务: ```cmd adb start-server ``` - **Linux/macOS系统**: 1. 打开终端。 2. 查找占用5037端口的进程: ```bash lsof -i :5037 ``` 3. 记录输出结果中的PID(例如,`adb 12345 user ...`,则PID为`12345`)。 4. 结束该进程: ```bash kill -9 12345 ``` 5. 重启ADB服务: ```bash adb start-server ``` #### 2. **检查并关闭重复的ADB进程** - 如果多个ADB实例在运行(例如Android Studio和Genymotion同时启动ADB),手动结束所有ADB进程: ```bash # Windows taskkill /F /IM adb.exe # Linux/macOS pkill -9 adb ``` - 然后重新启动ADB服务。 #### 3. **更新ADB版本** - 旧版ADB可能存在兼容性问题: - **Windows/macOS**:从[Android开发者网站](https://developer.android.com/studio/releases/platform-tools)下载最新版。 - **Linux**: ```bash sudo apt update && sudo apt install android-tools-adb ``` #### 4. **检查环境变量冲突** - 确保`PATH`中只有**一个ADB路径**(例如,同时安装Android Studio和Genymotion时,可能指向不同版本的ADB)。 - 调整环境变量优先级,或将冲突的ADB可执行文件重命名(如将`Genymotion/tools`下的`adb`改为`adb_genymotion`)。 #### 5. **配置第三方工具(如Genymotion)** - 如果使用Genymotion,需指定其使用系统ADB: 1. 打开Genymotion设置。 2. 进入 **ADB** 选项卡。 3. 选择 **Use custom Android SDK tools**。 4. 浏览并指向系统Android SDK路径(例如`C:\Android\sdk`或`/usr/lib/android-sdk`)[^4]。 #### 6. **防火墙/安全软件拦截** - 临时禁用防火墙或安全软件,测试是否解除拦截。 - 添加ADB(`adb.exe`)到白名单。 #### 7. **修改ADB默认端口(备用方案)** - 若5037端口持续被占用,可尝试更换端口: ```bash adb -P 5038 start-server # 使用5038端口 ``` - 后续命令需指定端口: ```bash adb -P 5038 devices ``` > **根本原因**:ADB服务启动时需独占5037端口,若该端口已被占用(如旧ADB进程未退出、第三方工具冲突等),则触发`cannot bind 'tcp:5037'`错误[^1][^2]。 ### 验证解决 - 执行以下命令无报错即修复成功: ```bash adb kill-server adb start-server ``` §§相关问题§§ 1. 如何查看Windows/Linux系统中占用某个端口的进程? 2. 如何更新Android SDK Platform-Tools? 3. Genymotion如何配置才能避免ADB端口冲突? [^1]: 错误机制源于ADB端口绑定冲突,详见ADB源码实现。 [^2]: 端口占用分析参考自Windows/Linux网络调试实践。 [^3]: 端口检测命令来自Windows系统网络工具文档。 [^4]: Genymotion配置方法参考其官方设置指南。</think>### 解决ADB显示`cannot bind 'tcp:5037'`错误的方法 此错误表示ADB服务无法绑定默认端口5037,通常是因为**端口被其他进程占用**或**ADB多实例冲突**。以下是完整解决步骤: --- #### 1. **结束占用5037端口的进程** - **Windows系统**: 1. 打开管理员权限的CMD/PowerShell: ```cmd netstat -ano | findstr ":5037" ``` 2. 找到占用端口的PID(如`12345`),结束进程: ```cmd taskkill /F /PID 12345 ``` 3. 重启ADB: ```cmd adb kill-server && adb start-server ``` - **Linux/macOS系统**: 1. 查找占用进程: ```bash lsof -i :5037 ``` 2. 结束进程(如PID为`12345`): ```bash kill -9 12345 ``` #### 2. **解决ADB多实例冲突** - 强制终止所有ADB进程: ```bash # Windows taskkill /F /IM adb.exe # Linux/macOS pkill -9 adb ``` - 重启ADB服务: ```bash adb start-server ``` #### 3. **更新ADB工具** - 旧版本ADB可能导致兼容性问题: ```bash # Linux sudo apt update && sudo apt install android-tools-adb # macOS brew install --cask android-platform-tools ``` - Windows用户从[官网下载新版ADB](https://developer.android.com/studio/releases/platform-tools) #### 4. **检查第三方工具配置** - 若使用**Genymotion**等模拟器: 1. 打开设置 → ADB 2. 选择 **Use custom Android SDK tools** 3. 指向正确的SDK路径(如`C:\Android\sdk`或`/usr/lib/android-sdk`)[^4] ![Genymotion配置示例](https://example.com/genymotion-adb-setting.png) #### 5. **修改ADB默认端口(备用方案)** ```bash # 启动时指定新端口(如5038) adb -P 5038 start-server # 后续命令需带端口参数 adb -P 5038 devices ``` #### 6. **检查防火墙/安全软件** - 临时禁用防火墙测试 - 将`adb.exe`加入白名单(路径通常为`Android\Sdk\platform-tools\adb.exe`) --- ### 根本原因分析 - **端口冲突**:5037端口被其他进程(如旧ADB实例、开发工具)占用[^1][^2] - **权限问题**:ADB无权限绑定端口(常见于Linux系统,需`sudo`) - **路径冲突**:多个ADB版本同时运行(如Android Studio和独立ADB) > **验证修复**:执行`adb devices`不再报错即修复成功。若问题持续,尝试重启电脑清除残留进程[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值