摘要:

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环境变量,手动配置系统环境变量,步骤:

  1. 配置sdk根路径:D:\Android\EclipseADT\adt-bundle-windows-x86_64-20140702\sdk

  2. 配置plateform-tools路径:%sdk_home%\platform-tools;

  3. 配置tools路径:%sdk_home%\tools;

  4. 配置系统变量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] 用户>必须指定的参数;如果未指定参数,存在默认值,使用默认值代替,不存在默认值执行指令报错

findstrnetstattasklist指令一样,输入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 开发之深入理解安卓调试桥各种错误解决办法的更多相关文章

  1. 5个Android开发中比较常见的内存泄漏问题及解决办法

    android中一个对象已经不需要了,但是其他对象还持有他的引用,导致他不能回收,导致这个对象暂存在内存中,这样内存泄漏就出现了.   内存泄漏出现多了,会是应用占用过多的没存,当占用的内存超过了系统 ...

  2. 【转】Android开发中adb启动失败adb连接异常的解决办法 offline

    原文网址:http://www.cnblogs.com/yejiurui/p/4173521.html 一.情况描述: 我们在使用eclipse开发有时候会出现adb连接异常中,有时候控制台会打印出来 ...

  3. Android开发中adb启动失败adb连接异常的解决办法

      一.情况描述:   我们在使用eclipse开发有时候会出现adb连接异常中,有时候控制台会打印出来 adb connect异常 比如会出现下面这样 : [2014-12-18 16:18:26 ...

  4. Android ROM开发(二)——ROM架构以及Updater-Script脚本分析,常见的Status错误解决办法

    Android ROM开发(二)--ROM架构以及Updater-Script脚本分析,常见的Status错误解决办法 怪自己二了,写好的不小心弄没了,现在只好重新写一些了,上篇简单的配置了一下环境, ...

  5. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  6. windows环境下Eclipse开发MapReduce程序遇到的四个问题及解决办法

    按此文章<Hadoop集群(第7期)_Eclipse开发环境设置>进行MapReduce开发环境搭建的过程中遇到一些问题,饶了一些弯路,解决办法记录在此: 文档目的: 记录windows环 ...

  7. VS2015 调试中断点突然失效的解决办法、VS调试时关闭调试让浏览器继续保留页面

    VS2010 调试中断点突然失效的解决办法 问题描述:在调试前加了断点,但debug时红色的断点变成透明的圆圈加一个感叹号,执行到该处时也不会停止. 这个问题遇到过几次了,前几次都没怎么注意,有时候是 ...

  8. Flash Player调试器版本的解决办法Flash Builder 找不到所需的Adobe

    Flash Player调试器版本的解决办法Flash Builder 找不到所需的Adobe   Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adob ...

  9. Xamarin开发安装Visual Studio 2015 update2报错的解决办法

    Xamarin开发安装Visual Studio 2015 update2报错的解决办法错误信息:update 2 requires a member of the visual studio 201 ...

随机推荐

  1. [React] Use react-rewards to add microinteractions to React app to reward users for some actions

    It's important that our users enjoy using our application or website. One way we can make it happen ...

  2. 文件压缩和解压 FileStream GZipStream

    using (FileStream reader=new FileStream (@"c:\1.txt",FileMode.Open,FileAccess.Read)) { usi ...

  3. Linux学习笔记 (三)Vi文本编辑器

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  4. Android学习(六) 文本框边框

    BorderTextViews.java package xiaosi.BorderTextView; import android.content.Context; import android.g ...

  5. 每天一个JavaScript实例-展示设置和获取CSS样式设置

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. VMware下的ubuntu12.04不识别usb设备问题的解决方法

    情况一:U盘通过USB连接到Ubuntu后,点击VM—removable devices,无usb信息? 解决方法: 在“服务”中启动“VMware USB Arbitration Service”服 ...

  7. HTML5 的四个亮点

    1.XDM  cross-document-messaging  跨文档消息传递. 2.原生拖放功能. 3.新媒体元素 audio.video. 4.历史状态管理.

  8. IE浏览器下,输入框最后不显示X

    IE浏览器下,输入框最后不显示X.设置: .login-input::-ms-clear { display: none; } .login-input::-ms-reveal { display: ...

  9. 学习IIS & MVC的运行原理

    我一直疑惑于以下问题,从客户端发出一个请求,请求到达服务器端是怎样跟iis衔接起来的,而iis又是怎样读取我发布的代码的,并返回服务器上的文件.这其中是怎样的一个处理过程. 1:当你从浏览器中输入一个 ...

  10. Linux上部署Java应用+Python3环境搭建

    给了Linux的测试环境,目前需要install JDK, Tomcat,此处记录下小白的操作过程. 1. 查询Linux发行版本,包括内核信息 (1) Linux查询内核信息 $ uname -a ...