Genymotion 模拟器连接不上(adb server version (40) doesn't match this client (39))

本文介绍了一种常见问题的解决方案:当使用Genymotion模拟器时,如果遇到因adb版本不匹配而导致的连接失败,可以通过替换模拟器内的adb.exe文件来解决。这一方法适用于那些希望在本地开发环境中顺利运行Genymotion模拟器的开发者。

前言

最新下了个最新版的Genymotion,然后adb devices发现连不上模拟器了,报adb server version (40) doesn't match this client (39); killing...
从报错信息看是adb版本不匹配导致的,接下来讲如何解决这个问题

遇到问题

1.从官网下载genymotion,启动模拟器之后 用adb devices提示如下,意思说本机的adb版本号是39 模拟器中adb版本号是40

 

进入模拟器的adb目录查看adb版本号

解决办法

 将本机的adb.exe复制到模拟器的adb.exe中

再次adb.devices如下

 

转载于:https://www.cnblogs.com/xiao-qing/p/9397883.html

<think>我们正在解决adb版本匹配的问题,具体错误是“adb server version (39) doesn&#39;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,server39,所以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&#39;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、付费专栏及课程。

余额充值