4

Android 开发之深入理解安卓调试桥各种错误解决办法

 2 years ago
source link: http://www.androidchina.net/6451.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Android 开发之深入理解安卓调试桥各种错误解决办法 – Android开发中文站

你的位置:Android开发中文站 > Android开发 > 开发进阶 > Android 开发之深入理解安卓调试桥各种错误解决办法

Android开发调试项目使用到安卓调试桥工具,Android Debug Bridge(ADB)位于sdk路径platform-tools文件夹,使用Android Studio或Eclipse工具忽略了adb工具的一些细节,深入理解安卓调试桥指令操作的过程,有助于解决出现的各种错误,运行adb遇到的错误包括:

1、命令行输入adb devices或其他命令

  1. adb server is out of date.  killing…
  2. ADB server didn’t ACK
  3. * failed to start daemon *
  4. error:

2、命令行输入adb start-server或其他命令

  1. adb server version (29) doesn’t match this client (36); killing…

3、命令行输入adb start-server

  1. adb server is out of date. killing… ADB server didn’t ACK  failed to start

4、命令行输入adb start-server

  1. 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:通常每个套接字地址(协议/网络地址/端口)只允许使用一

5、命令行输入adb nodaemon server

  1. cannot bind ’tcp:5037′

6、命令行输入adb nodaemon server

  1. error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)

7、命令行输入adb devices

  1. Android Studio控制台或Eclipse控制台打印:Adb connection Error:远程主机强迫关闭了一个现有的连接。

ADB调试桥常见错误处理

一、初步了解adb命令

adb.exe,运行在当前开发者电脑的一个后台进程是一个服务端,管理着client和daemon之间的通信。检查当前电脑是否配置adb.exe环境变量,打开任务管理器,检查是否有adb.exe进程在执行,如果没有配置adb.exe环境变量,手动配置系统环境变量,步骤:

1.配置sdk根路径:D:\Android\EclipseADT\adt-bundle-windows-x86_64-20140702\sdk
adb调试桥sdk_home环境变量配置

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

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

4.配置系统变量Path路径:%sdk_home%\platform-tools;%android_home%\tools;
adb调试桥环境变量配置

打开命令行窗口,输入adb version查看版本信息,输入adb help查看帮助文档,以后TeachCourse就可以通过cmd窗口完成Android Studio或Eclipse开发工具管理项目的任务。

TASKLIST帮助文档

指令描述: 例子演示:

启动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…或者其他错误

针对文章开头提到的运行安卓调试桥时,出现的各种错误原因分析和解决办法如下:

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命令行指令在后面详细介绍)

netstat和findstr指令查找5037

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命令

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详细说明,后面会介绍)

tasklist和findstr查找adb

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端口被占用,绑定失败)

taskkill结束进程指令

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命令行指令在后面详细介绍)

tasklist和findstr指令查找PID

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指令重新绑定。

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窗口输入指令几种格式的含义,比如:

TASKLIST帮助文档

1.1 省略号… 在命令行中可多次重复的参数

1.2 中括号[] 可选项,可以选择或不选择

1.3 大括号{},选项用竖线|分隔。例如:{even|odd} 用户>必须从选项集合中选择一个

1.4 大写字母,比如APPLICATION_PACKAGE 用户输入的参数值

1.5 尖括号<>,比如 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命令大全

版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持!

转载请注明出处:http://teachcourse.cn/2289.html 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK