Android 开发之深入理解安卓调试桥各种错误解决办法
摘要:
Android开发调试项目使用到安卓调试桥工具,Android Debug Bridge(ADB)位于sdk路径platform-tools文件夹,使用Android Studio或Eclipse工具忽略了adb工具的一些细节,深入理解安卓调试桥指令操作的过程,有助于解决出现的各种错误,运行adb遇到的错误包括:
- 命令行输入adb devices或其他命令
adb server is out of date.  killing...
ADB server didn't ACK
failed to start daemon error:
- 命令行输入adb start-server或其他命令 
 - adb server version (29) doesn't match this client (36); killing...
- 命令行输入adb start-server 
 - adb server is out of date. killing... ADB server didn't ACK failed to start
- 命令行输入adb start-server 
adb server version (31) doesn't match this client (36); killing...error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037
通常每个套接字地址(协议/网络地址/端口)只允许使用一
- 命令行输入adb nodaemon server 
 - cannot bind 'tcp:5037'
- 命令行输入adb nodaemon server 
error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:
通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)
- 命令行输入adb devices
 Android Studio控制台或Eclipse控制台打印:Adb connection Error:远程主机强迫关闭了一个现有的连接。
  
一、初步了解adb命令
adb.exe,运行在当前开发者电脑的一个后台进程是一个服务端,管理着client和daemon之间的通信。检查当前电脑是否配置adb.exe环境变量,打开任务管理器,检查是否有adb.exe进程在执行,如果没有配置adb.exe环境变量,手动配置系统环境变量,步骤:
- 配置sdk根路径:D:\Android\EclipseADT\adt-bundle-windows-x86_64-20140702\sdk 
  
- 配置plateform-tools路径:%sdk_home%\platform-tools; 
- 配置tools路径:%sdk_home%\tools; 
- 配置系统变量Path路径:%sdk_home%\platform-tools;%android_home%\tools; 
  
打开命令行窗口,输入adb version查看版本信息,输入adb help查看帮助文档,以后TeachCourse就可以通过cmd窗口完成Android Studio或Eclipse开发工具管理项目的任务。
| Description | Commond | 
|---|---|
| 启动adb后台进程 | adb start-server | 
| 查看当前连接设备 | adb devices | 
| 卸载指定包名的APP | adb uninstall com.sinolv.recycle | 
| 安装本地apk文件到设备 | adb install e:\temp\apk\92回收.apk | 
| 打印log信息,logcat后指定哪个包名的log信息 | adb logcat com.sinolv.recycle | 
| 复制本地文件到设备指定路径,第一个本地文件路径,第二个设备存放路径 | adb push e:\temp\apk\92回收.apk /sdcard/92回收.apk | 
| 复制设备文件到本地指定路径,第一个设备文件路径,第二个本地存放路径 | adb pull /sdcard/92回收.apk e:\temp\apk\92回收.apk | 
二、运行adb命令提示错误分析和解决
使用Android Studio或Eclipse工具时,开发工具相当于client,sdk路径platform-tools文件夹下的adb.exe相当于server,默认器或测试手机相当于daemon,当前TeachCourse在cmd输入devices时,提示adb server is out of date. killing...或者其他错误
针对文章开头提到的运行安卓调试桥时,出现的各种错误原因分析和解决办法如下:
2.1 adb server is out of date. killing... ADB server didn't ACK * failed to start daemon * error:
原因分析:这种情况,很可能当前电脑已经运行了一个adb.exe进程或进程依赖的唯一端口5037被占用。
解决办法:打开任务管理器,查看adb.exe是否已运行,或者cmd窗口输入netstat -ano|findstr 5037命令查看包含5037字符的TCP网络连接。因为本地电脑可能有多个adb.exe可以执行文件,选中运行的进程鼠标右键“打开文件位置”,打开进程本地路径。比如:安装Genymotion模拟器存在一个默认的sdk路径,Android Studio或Eclipse开发工具使用另一个sdk路径,两者不共用同一个adb.exe调试桥工具。(关于netstat命令行指令在后面详细介绍)

2.2 adb server version (29) doesn't match this client (36); killing...
原因分析:任务管理运行的是Android Studio或Eclipse配置sdk路径下的adb.exe进程,在cmd窗口使用的另一个adb.exe进程执行命令操作。
解决办法:cmd窗口进入Android Studio或Eclipse工具依赖的sdk路径的plateform-tools文件夹,在执行adb命令
2.3 adb server is out of date. killing... ADB server didn't ACK failed to start
原因分析:adb无法对接收到的指令正确应答,可能的原因adb后台进程监听不到Client发送的指令,adb.exe进程启动失败。
解决办法:cmd窗口输入tasklist|findstr adb,检查当前运行adb.exe进程情况,发现存在多个adb.exe,cmd窗口输入taskkill /f /im adb.exe结束对应的进程,最后重新启动调试桥进程。(关于cmd窗口指令tasklist详细说明,后面会介绍)

2.4 adb server version (31) doesn't match this client (36); killing...error: could not install smartsocket listener: cannot bind to 127.0.0.1:5037
原因分析:有两个版本的adb.exe应用程序,任务管理器运行C盘的adb.exe,同时切换到E盘的adb.exe路径,执行adb start操作,提示版本不一致
解决办法:cmd窗口输入taskkill /f /im adb.exe强行结束C盘运行的adb进程,然后切换到E盘adb.exe路径,重新启动。(adb.exe进程需要绑定本地电脑的唯一端口5037,5037端口被占用,绑定失败)

2.5 cannot bind 'tcp:5037'
原因分析:唯一的端口5037被占用,绑定失败
解决办法:cmd窗口输入netstat -ano|findstr 5037,刷选当前TCP网络连接包含5037的进程,获取对pid,然后通过pid查询应用程序名称,cmd窗口输入tasklist|findstr pid,发现360MobileLoader.exe占用唯一端口,测试发现taskkill /f /im 360MobileLoader.exe无法强行结束上述进程,解决办法插拔一下手机数据线,自动结束360MobileLoader.exe进程。如果手机安装了QQ,同时数据线连接电脑前在PC端登录QQ软件,电脑版的QQ软件的tadb.exe进程同样会占用5037端口,tadb.exe看得出来属于adb.exe的一个复制品。(关于netstat和findstr命令行指令在后面详细介绍)

2.6 error: could not install smartsocket listener: cannot bind to 127.0.0.1 5037 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)
原因分析:adb.exe进程已经正常运行,重新执行上述指令,提示绑定失败,套接字地址只允许使用一次
解决办法:解除被使用的套接字地址即结束运行的adb.exe进程,然后cmd窗口进入想要启动的adb.exe目录,,最后输入adb nodaemon server指令重新绑定。
2.7 Android Studio控制台或Eclipse控制台打印:Adb connection Error:远程主机强迫关闭了一个现有的连接
原因分析:运行的adb.exe进程被意外结束,已经建立连接的模拟器或测试手机强行关闭
解决办法:在前面运行adb指令的1/2/3/4点中,错误打印killing这个词,可能因为运行C盘的adb.exe进程需要结束已运行的E盘的adb.exe进程,本地电脑即使有多个adb.exe,都会在运行另一个进程前结束另一个,造成Android Studio或Eclipse现有的连接被异常关闭。
总结:运行另一个adb进程会先结束已运行的进程,出现killing错误提示,一个adb进程依赖唯一的5037端口号,已运行的adb占用127.0.0.1:5037,提示套接字只允许使用一次错误。测试手机通过数据线连接当前电脑,一些第三方的手机软件自动运行,优先占用5037端口号,造成adb.exe无法正常使用。以往的做法,重新插拔数据线或者重启电脑恢复正常,读完TeachCourse的这篇文章,只需要几个指令即可正常启动adb进程。
三、详细说明几个常用的cmd指令
第一个TASKLIST:,指令:TASKLIST /? 显示帮助文档,文档描述该工具显示在本地或远程机器上当前运行的进程列表,通俗地说列出任务管理器运行的进程,斜杠后添加不同的字符,表示特定的含义,如下图:
TASKLIST帮助文档
| 参数列表: | 作用: | 
|---|---|
| /S    system | 指定连接到的远程系统。 | 
| /U     [domain\]user | 指定应该在哪个用户上下文执行这个命令。 | 
| /P     [password] | 为提供的用户上下文指定密码。如果省略,则提示输入。 | 
| /M     [module] | 列出当前使用所给 exe/dll 名称的所有任务。如果没有指定模块名称,显示所有加载的模块。 | 
| /SVC | 显示每个进程中主持的服务。 | 
| /V | 显示详述任务信息。 | 
| /FI    filter | 显示一系列符合筛选器指定的标准的任务。 | 
| /FO    format | 指定输出格式。有效值: "TABLE"、"LIST"、"CSV"。 | 
| /NH | 指定列标题不应该在输出中显示。只对 "TABLE" 和 "CSV" 格式有效。 | 
根据帮助文档提供的example了解指令的用法,TeachCourse只总结cmd窗口输入指令几种格式的含义,比如:
常见命令行格式
- 省略号 - ...在命令行中可多次重复的参数
- 中括号 - []可选项,可以选择或不选择
- 大括号 - {},选项用竖线|分隔。例如:- {even|odd}用户>必须从选项集合中选择一个
- 大写字母,比如 - APPLICATION_PACKAGE用户输入的参数值
- 尖括号 - <>,比如- adb uninstall [-k]用户>必须指定的参数;如果未指定参数,存在默认值,使用默认值代替,不存在默认值执行指令报错
findstr、netstat和tasklist指令一样,输入findstr /?或netstat /?查看对应帮助文档,结合常见命令行格式不难读懂。netstat显示协议统计和当前 TCP/IP 网络连接,-ano是指令-a、-n和-o结合;findstr在文件中寻找字符串。
四、相关阅读
了解adb各种指令的操作,TeachCourse发现还可以无线调试项目,发送指令录制模拟器或测试手机屏幕,发送指令截图,想要更深入理解adb指令,推荐阅读:
《Android Debug Bridge》
《Android Debug Bridge之Shell命令》
《adb shell pm命令大全》
《adb shell am命令大全》
《adb shell ls命令大全》
Android 开发之深入理解安卓调试桥各种错误解决办法的更多相关文章
- 5个Android开发中比较常见的内存泄漏问题及解决办法
		android中一个对象已经不需要了,但是其他对象还持有他的引用,导致他不能回收,导致这个对象暂存在内存中,这样内存泄漏就出现了. 内存泄漏出现多了,会是应用占用过多的没存,当占用的内存超过了系统 ... 
- 【转】Android开发中adb启动失败adb连接异常的解决办法 offline
		原文网址:http://www.cnblogs.com/yejiurui/p/4173521.html 一.情况描述: 我们在使用eclipse开发有时候会出现adb连接异常中,有时候控制台会打印出来 ... 
- Android开发中adb启动失败adb连接异常的解决办法
		一.情况描述: 我们在使用eclipse开发有时候会出现adb连接异常中,有时候控制台会打印出来 adb connect异常 比如会出现下面这样 : [2014-12-18 16:18:26 ... 
- Android ROM开发(二)——ROM架构以及Updater-Script脚本分析,常见的Status错误解决办法
		Android ROM开发(二)--ROM架构以及Updater-Script脚本分析,常见的Status错误解决办法 怪自己二了,写好的不小心弄没了,现在只好重新写一些了,上篇简单的配置了一下环境, ... 
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
		Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ... 
- windows环境下Eclipse开发MapReduce程序遇到的四个问题及解决办法
		按此文章<Hadoop集群(第7期)_Eclipse开发环境设置>进行MapReduce开发环境搭建的过程中遇到一些问题,饶了一些弯路,解决办法记录在此: 文档目的: 记录windows环 ... 
- VS2015 调试中断点突然失效的解决办法、VS调试时关闭调试让浏览器继续保留页面
		VS2010 调试中断点突然失效的解决办法 问题描述:在调试前加了断点,但debug时红色的断点变成透明的圆圈加一个感叹号,执行到该处时也不会停止. 这个问题遇到过几次了,前几次都没怎么注意,有时候是 ... 
- Flash Player调试器版本的解决办法Flash Builder 找不到所需的Adobe
		Flash Player调试器版本的解决办法Flash Builder 找不到所需的Adobe Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adob ... 
- Xamarin开发安装Visual Studio 2015 update2报错的解决办法
		Xamarin开发安装Visual Studio 2015 update2报错的解决办法错误信息:update 2 requires a member of the visual studio 201 ... 
随机推荐
- HTML5 Canvas 画钟表
			画钟表是2D画图的老生常谈,我也不能免俗弄了一个.代码如下: <!DOCTYPE html> <html lang="utf-8"> <meta ht ... 
- Some perl tips
			下面是日常工作中一些代码片段的总结,部分注释是后加的,采用了//这种形式,请勿套用. 1.取得用户输入print("Please input the date range:");$ ... 
- 倍福TwinCAT(贝福Beckhoff)基础教程2.0 TwinCAT常用快捷键
			F5:运行程序 CTRL+F5:停止运行当前程序 F12:登出 F11:登录 CTRL+F7:强制写入数值 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.you ... 
- Solidworks 好的测试题模拟题
			题目:按照下图构建草图,注意设置必要的几何约束. 问题: 1.参照下图所示参数时请问其中绿色区域的面积为多少平方毫米? 题目:参照下图绘制草图轮廓,注意图中各线条之间均为相切过渡. 问题: ... 
- C++11之右值引用(一):从左值右值到右值引用
			C++98中规定了左值和右值的概念,但是一般程序员不需要理解的过于深入,因为对于C++98,左值和右值的划分一般用处不大,但是到了C++11,它的重要性开始显现出来. C++98标准明确规定: 左值是 ... 
- PHP使用微软认知服务Face API
			下面主要介绍基于PHP语言,基于guzzle类库,调用微软最新推出的认知服务:人脸识别. 实验环境: IDE:Eclipse for PHP Developers Version: Neon.1 Re ... 
- BNU 34990 Justice String (hash+二分求LCP)
			思路:枚举第一个字符串的位置,然后枚举最长公共前缀的长度,时间即会下降-- #pragma comment(linker, "/STACK:1024000000,1024000000&quo ... 
- 安装java运行环境
			1.查看java安装版本 执行命令java -version查看已安装java运行环境信息. 2.下载JDK 到sun官网下载需要的jdk版本,地址为:http://www.oracle.com/te ... 
- Windows2008RC2 IIS配置php执行环境
			1:下载一个php manager,安装.打开IIS管理器后,点击计算机,就能够看到右边PHPManager 静静地躺在那儿了.双击PHPManager 后我们就能够開始对PHP进行配置了. 2 ... 
- Python基础之模块2
			如何导入多个模块? import re #单行导入多个模块 '''多行导入多个模块''' import re import sys import os 如何给模块起别名? import my_modu ... 
