adb shell 运行时报错"adb server version (26) doesn't match this client (39); killing..."的解决方案
adb即 Android Debug Bridge 是一个通用的命令行工具,可用于通过PC端对连接的Android模拟器设备或连接至电脑的真实物理设备进行命令行操作。目前,许多软件均会借助 adb 工具与移动终端进行交互。这里以 Android Studio 中带有的 adb 工具为例,描述与启动 adb shell相关的步骤,从而解释出现上述错误的原因。
Android Studio 自带的 adb 位于C:\Users\user_name\AppData\Local\Android\Sdk\platform-tools文件夹下(即实际位置取决于Sdk的安装目录)。
命令行运行adb工具
安装 Android Studio 后,命令行中输入 adb 命令(如adb -version,显示adb的版本号)时,系统会提示找不到该命令。这是由于 adb 工具的位置无法被确定,可通过以下几种方案在命令行方式下运行 adb :
(1)将 adb 工具所在目录的路径加入系统的 Path 环境变量中,则可在命令行的任意路径下直接运行 adb 命令。在这里,也就是将 C:\Users\user_name\AppData\Local\Android\Sdk\platform-tools 加入 Path 变量中;
(2)切换控制台中的路径至 adb 工具所在路径下,如可以通过命令 cd C:\Users\user_name\AppData\Local\Android\Sdk\platform-tools切换至 adb 工具所在的文件夹,即可在当前命令行中直接运行 adb 命令;
(3)在文件管理器中,进入上述 C:\Users\user_name\AppData\Local\Android\Sdk\platform-tools 目录,在该目录内,按住 Shift 键,右键 -> 在此处打开命令窗口 ,在打开的窗口中可以看到控制台提供的路径名称与(1)中切换后的效果是一致的;
无法运行 adb shell 命令
在完成上述操作后,运行 adb shell 命令,出现报错信息:adb server version (26) doesn't match this client (39); killing...

根据查到的资料的一些说法,这一问题是由于系统上存在两个不一样版本的 adb 工具造成的。
笔者在上述目录下(属于Android Studio的目录)运行了命令 adb version,结果如下图:

也就是说当前目录下,Android Studio自带的adb工具版本为 1.0.39 ,猜想这就是上述报错信息中的 client(39),相应的可能系统上还存在一个版本为26的 adb 工具。
问题描述
笔者查阅了Android Studio官网上对 adb 工具的介绍。介绍中对 adb 的描述: 启动一个adb 客户端时,此客户端首先检查是否有已经运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动后,它将与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令。所有的 adb 客户端均通过端口 5037 与 adb 服务器进行通信。
通过上述描述,可以看到既然报错信息显示的是adb server version(26),那当前系统中一定存在一个 adb 服务进程 , 它较之我们运行的那个 adb 工具先开始,且版本要低于我们使用的 adb 版本。可以通过命令行工具查找该进程。
(1)由于 adb 服务进程一定会占据 5037 端口,所以首先查看当前 5037 端口被那个进程调用。命令行方式下可以通过 netstat 命令显示当前的网络情况,可通过 netstat /? 查看命令帮助。
netstat -ano | findstr "" //在 netstat 输出的结果中筛选出有 5037 字符串的行,findstr命令类似于Linux下的grep
结果如下图所示:

(2)获得上述进程 pid 对应的进程的信息。有两种方式,通过命令行或者任务管理器。
a)打开 任务管理器 -> 详细信息 ,通过 pid 即可定位对应的进程,可通过右键 -> 属性,可查看该进程的描述信息,从而获得另一个 adb 工具相关的信息;
b)通过命令行工具,tasklist | findstr "10044"找到对应的进程;
tasklist | findstr "xxx" //将tasklist输出结果中带有目标字符串的行筛选出来
其中,通过任务管理器获得的信息更详细,可以定位到对应的 adb 工具的目录位置。比如 360 的软件中,会带有 adb 工具,而这可能会带来 adb 工具版本的不同。
解决方案
解决的方法包括但不限于将之前启动的adb服务进程删除掉(注意要确定对应的应用程序可以关闭该服务),之后再启动我们想要的 adb 工具。
在终止了之前存在的不同版本的 adb 服务进程之后,再次启动 Android Studio 对应的 adb 工具时, 该 adb 工具会发现当前没有 adb 服务端,故而会自行启动服务器进程,如下图。由于没有连接设备,故而不会直接显示出Shell。

通过命令行工具我们可以看到系统上现在存在了新的 adb 服务器进程,是由我们刚才使用 adb 工具的命令开启的。

完成上述操作后,即可以将物理设备的USB调试模式打开,并连接至PC,再次使用 adb shell 命令,即可进入 adb 工具提供的Shell。
其他
基于错误信息的描述,可能的解决方法还包括将两个不同版本的 adb 工具更新成一致版本,这样可以避免每次使用时均要检查是否已有不同版本的 adb 服务器进程存在。出现有两个版本的 adb 工具的常见场景是系统可能同时安装了两个提供该工具的应用,如 Android Studio 和 Genymotion ,可以参见 stackoverflow 的回答。
根据 adb 工具运行的原理,若TCP端口 5037 被其他进程占用了,则也会出现报错,典型的报错信息是 "cannot bind to 127.0.0.1:5037 :t通常每个套接字地址(协议/网络地址/端口)只允许使用一次",此时可能需要考虑将占用该端口的进程终止掉(在没有副作用的情况下)。
adb shell 运行时报错"adb server version (26) doesn't match this client (39); killing..."的解决方案的更多相关文章
- 使用Xdroid进行端口映射,出现adb server version (36) doesn't match this client (39); killing...的解决方案
第一反应就是adb冲突了,因为Xdroid这个产品看起来就不像是给开发人员用的模拟器,因为不能选择各种版本进行适配,所以肯定自带了一个adb. whereis命令发现果然有两个adb,一个直接是安装在 ...
- appium===报错adb server version (31) doesn’t match this client (39); killing…的解决办法
当使用在cmd窗口调用adb shell命令的时候 提示如下: adb server version (31) doesn't match this client (39); killing...er ...
- appium+python自动化45-夜神模拟器连不上(adb server version (36) doesn't match this client (39); killing...)
前言 最新下了个最新版的夜神模拟器,然后adb devices发现连不上模拟器了,报adb server version (36) doesn't match this client (39); ki ...
- adb server version (32) doesn't match this client (39); killing...解决办法
输入今天遇到,安装AndroidSDK之后,已经配置好环境变量,输入adb可运行,但是输入adb devices之后就出现adb server version (32) doesn't match t ...
- 运行adb命令报错adb server version (31) doesn't match this client (39); killing...
执行adb devices 报错 原因分析: 这个是socket 的端口被占用了,我这里是因为360手机助手占用了这个端口,所以其他的就不能够用了. 解决办法: 卸载了360的手机助手就可以了 首先 ...
- Unable to start adb server: adb server version (32) doesn't match this client (39); killing...
关于Android studio 连接不上adb问题,有人说重启机器,有人说重启工具,也有人说adb kill-server.然后我都尝试过依然没有解决.通过各种查询.最终成功的解决!!! adb n ...
- adb server version (31) doesn’t match this client (36); killing…
版权声明:蜜蜂采花酿蜂蜜,奶牛吃草产牛奶. https://blog.csdn.net/codehxy/article/details/52175186 案例1 报错信息如下 C:\Users\lin ...
- adb server version (31) doesn't match this client (39) 解决方案
adb server version (31) doesn't match this client (39) 问题的解决方案, 在cmd中输入adb nodaemon server -a后解决了, 记 ...
- adb server version (32) doesn't match this client (36); killing...
http://blog.csdn.net/seaker_/article/details/55107598 FAQ: adb server version (36) doesn't match thi ...
随机推荐
- C#共享内存整理
1.System.IO.MemoryMappedFiles 内存映射文件类 内存映射文件将文件的内容映射到应用程序的逻辑地址空间. 内存映射文件使程序员得以处理极大的文件(这是因为可以并发管理内存), ...
- JavaScript学习笔记系列2:Dom操作(一)
一.什么是Dom? DOM------>Document Object Model 直接翻译就是文档对象模型. DOM------>定义了表示和修改文档所需的对象.这些对象的行为和属性以及 ...
- Java多线程学习之synchronized总结
0.概述 synchronized是Java提供的内置的锁机制,来实现代对码块的同步访问,称为内置锁(Intrinsic Lock) .内置锁包括两部分:一个是作为锁的对象的引用,另一个是由这个锁保护 ...
- java 生成Excel开门篇
本随笔的Excel所用的poi jar包(3.17版本)链接: https://pan.baidu.com/s/1gaa3dJueja8IraUDYCSLIQ 提取密码: 9xr7 简单实现:两个类: ...
- linux 用vi命令的使用以及vi编辑后的后续保存退出等相关命令的使用
一.首先用vi命令打卡要编辑的文件: 注意:vi命令的使用如下 打开或新建文件,并将光标至于第一行首:[root@centos6 /]# vi /etc/my.cnf 打开文件,并将光标移至最后一行行 ...
- 简单的PHP的任务队列
文章太长,不作过多介绍,反正,文章的头部就说明了大概的意思...原文如下:写了一个简单的队列任务处理.多进程任务,异步任务可能会用到这个(主要是命令行应用)比如,任务的某个一个环节速度十分不稳定,可能 ...
- 移除button点击时的黑边
input[type=submit], input[type=reset], input[type=button]{ outline:none; filter: chroma(color=#00000 ...
- cf121C. Lucky Permutation(康托展开)
题意 题目链接 Sol 由于阶乘的数量增长非常迅速,而\(k\)又非常小,那么显然最后的序列只有最后几位会发生改变. 前面的位置都是\(i = a[i]\).那么前面的可以直接数位dp/爆搜,后面的部 ...
- 常用数据库validationQuery语句
validationQuery是用来验证数据库连接的查询语句,这个查询语句必须是至少返回一条数据的SELECT语句.每种数据库都有各自的验证语句,下表中收集了几种常见数据库的validationQue ...
- css/jq--弹窗写法介绍,jq插件介绍
//html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...