如果adb devices出现5037端口未被占用依旧显示获取失败,出现以下报错时的解决办法...

在Win7 64位系统中使用ADB命令连接模拟器时,若遇到5037端口未被占用但依旧报错的情况,可通过复制adb.exe及AdbWinApi.dll至SysWOW64目录解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

win7 64位系统使用adb命令连接模拟器,在5037端口未被占用情况下,报以下错误:

   * daemon not running. starting it now on port 5037 *
   CreateProcess failure, error 2
   * failed to start daemon *
   error: cannot connect to daemon

解决方法:

1.将本机C:\WINDOWS\System32下的adb.exe文件复制到C:\Windows\SysWOW64下
2.将本机C:\WINDOWS\System32下的AdbWinApi.dll文件复制到C:\Windows\SysWOW64下

 

解决过程:

1、初一看应该是5037端口被占用了,一个比较常见的错误,执行命令查看5037端口被谁占用了:netstat -ano | findstr "5037"或执行tasklist | findstr "9244",但是神奇的事情发生了,结果是没有任何程序占用该端口

2、于是执行adb kill-server ,OK,再执行adb start-server,又提示相同的错误了,adb无法在5037端口启动

3、执行一下adb nodaemon server命令看看什么情况,这是一个比较有用的命令,一般情况下它会告诉我们哪里出问题了,adb nodaemon server,不幸的是仍然没有提示任何错误

4、检查环境变量配置,没有错误

5、基本排除adb本身的错误,开始定位CreateProcess failure, error 2 这个错误,查到了错误代码:

windows error code 2 means: 2 The system cannot find the file specified. ERROR_FILE_NOT_FOUND
and from the source code this is after a call to CreateProcess() and the file name is given by GetModuleFileName()

已经查证过不是环境配置的问题,所以定位为系统无法启动该文件

6、进入C:\WINDOWS\System32目录,检查adb相关文件,都是正确的

7、复制\System32目录下的adb.exe文件到C:\WINDOWS\SysWOW64 ,再次执行adb devices命令,提示缺失AdbWinApi.dll文件,再将\System32目录下的AdbWinApi.dll文件copy到C:\WINDOWS\SysWOW64,执行adb devices命令成功

转载于:https://www.cnblogs.com/laosun0204/p/9317801.html

<think>我们正在解决adb版本不匹配的问题,具体错误是“adb server version (39) doesn't match this client (41); killing...”。根据引用资料,这通常是由于系统中存在多个不同版本的adb(Android Debug Bridge)程序,导致adb服务器(server)和客户端(client)版本不一致。 解决方案的核心是统一adb的版本。根据引用[2]和[4],我们可以通过替换adb程序文件来统一版本。具体步骤如下: 1. **定位冲突的adb程序**:通常,Android SDK的platform-tools目录下有一个adb.exe(我们称之为SDK的adb)。同,一些安卓模拟器(如夜神模拟器)或手机助手软件也会自带adb程序。当这两个adb版本不一致,就可能出现冲突。 2. **确定需要保留的版本**:一般情况下,我们以Android SDK的adb版本为准,因为它是官方最新的。但有模拟器可能要求特定版本的adb,所以也可以选择模拟器的版本。这里我们选择版本较高的(client是41,server是39,所以client版本更高),但为了统一,我们通常将SDK的adb复制到模拟器目录,或者反过来,根据实际需要。 3. **替换adb文件**: - 步骤1:找到Android SDK的adb.exe所在目录(例如:`C:\Users\你的用户名\AppData\Local\Android\Sdk\platform-tools`)。 - 步骤2:找到模拟器或手机助手软件的adb.exe所在目录(例如,夜神模拟器通常在安装目录的`bin`子目录下,如`D:\Program Files\Nox\bin`)。 - 步骤3:将其中一个目录下的adb.exe(以及可能存在的AdbWinApi.dll、AdbWinUsbApi.dll等)复制到另一个目录,覆盖目标文件。 注意:根据引用[2],如果模拟器启动使用了自己的adb,那么我们就应该用SDK的adb覆盖模拟器的adb,或者将模拟器的adb替换为与SDK相同版本。但有模拟器对adb有特定要求,所以也可以反过来,用模拟器的adb覆盖SDK的adb(但这样可能会影响其他开发工具,如Android Studio)。因此,建议先备份原文件。 4. **结束adb进程**:在替换文件前,需要确保adb进程已经结束。可以通过任务管理器结束所有名为adb.exe的进程,或者在命令行中执行: ``` adb kill-server ``` 5. **替换文件**:复制文件,覆盖目标位置的adb文件(以及相关的dll文件)。 6. **重启相关服务**:重启模拟器或重新连接手机,并尝试使用adb命令(如`adb devices`)检查是否解决问题。 7. **如果端口占用导致无法启动**:引用[1]和[3]中提到错误“cannot bind to 127.0.0.1:...”,这通常是因为端口占用。我们可以: - 更换端口:例如,使用`adb -P <port>`指定不同端口。 - 或者,结束占用端口的进程(可能是之前正确关闭的adb)。 另外,引用[5]提供了一种设置字符集的方法,但那是针对MySQL的,与adb问题无关,可以忽略。 根据以上步骤,我们可以解决adb版本不匹配的问题。 注意:在操作过程中,可能需要关闭所有使用adb的程序(如Android Studio、模拟器等),并确保替换文件后重新启动这些程序。 下面,我们将具体步骤整理如下:</think>### 解决 ADB 版本不匹配问题(Server 39 vs Client 41) 当出现 `adb server version (39) doesn't match this client (41); killing...` 错误,说明系统中存在 **多个版本冲突的 ADB 程序**。以下是完整解决方案: #### 🔧 解决步骤 1. **结束所有 ADB 进程** 在命令提示符中执行: ```bash adb kill-server taskkill /f /im adb.exe ``` 2. **定位冲突的 ADB 文件** - 找到 Android SDK 的 ADB: `[SDK安装路径]\platform-tools\adb.exe`(通常是 `C:\Users\<用户名>\AppData\Local\Android\Sdk\platform-tools`) - 找到其他程序的 ADB(常见来源): - 安卓模拟器(如夜神:`Nox\bin`) - 手机助手软件(如豌豆荚) - 第三方工具(如 Scrcpy) 3. **统一 ADB 版本(任选其一)** **✅ 推荐方案:用 SDK 的 ADB 覆盖其他程序** ```bash # 示例:将 SDK 的 adb 复制到夜神模拟器 copy "C:\Android\Sdk\platform-tools\adb.exe" "D:\Nox\bin\adb.exe" copy "C:\Android\Sdk\platform-tools\AdbWinApi.dll" "D:\Nox\bin\" # 同复制 DLL 文件 ``` **或反向覆盖**(若需保留模拟器版本): ```bash copy "D:\Nox\bin\adb.exe" "C:\Android\Sdk\platform-tools\adb.exe" ``` 4. **检查环境变量** 确保系统 `PATH` 变量 **仅包含 SDK 的 platform-tools 路径**: ```bash # 查看当前 PATH echo %PATH% ``` ❗ 移除其他包含 `adb.exe` 的路径(如模拟器路径) 5. **重启服务验证** ```bash adb start-server adb devices # 应显示设备列表无报错 ``` #### ⚠️ 注意事项 1. 操作前备份原文件(重命名为 `adb_old.exe`) 2. 如果出现端口占用错误(`cannot bind to 127.0.0.1:5037`): ```bash netstat -ano | findstr :5037 # 查找占用进程 taskkill /pid [进程ID] /f # 强制结束进程 ``` 3. 某些模拟器需重启电脑才能生效[^2] #### 💡 预防措施 - 定期更新 Android SDK:`sdkmanager --update` - 避免安装多个安卓模拟器 - 第三方工具尽量使用 SDK 的 ADB(通过环境变量调用) > **原理说明**:ADB 包含客户端(`adb.exe`)和守护进程(`adb server`)。当两者版本不一致,server 会主动终止并提示版本不匹配。统一文件可消除此冲突[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值