最近玩Android,发现电脑在公司电脑上可以正常连接,回到家里就不行了。用USB线连接手机和电脑,打开cmd,输入adb devices -l, 结果显示可以识别手机,但是状态为offline。
因为是offline,所以你也无法通过adb logclient得到手机的运行日志。考虑到adb的运行原理,adb包括三个组成部分:
1. 运行于电脑上的adb客户端,eclipse上面的ADT插件和DDMS也可以产生adb客户端。
2. 运行于电脑上作为后台进程运行的服务端,负责管理客户端与设备上的adb守护程序之间的通讯。
3. 以后台进程的形式运行于设备上的守护进程。
工作步骤如下:
使用adb命令启动客户端,客户端会去确认是否有一个adb服务进程在运行。如果没有,则启动。服务器运行,adb服务器就绑定本地的TCP端口5037并监听adb客户端发来的命令,接着服务器将所有运行的设备建立连接,通过扫描所有的5555到5585范围内的奇数端口来定位所有的设备。一旦服务器找到adb守护进程就建立连接。设备实例会取得两个连续的端口,奇数端口用来响应adb连接,偶数端口用来连接控制台。
回到问题本身,在其他电脑上能直接连接,说明手机没有问题,可能是服务端进程启动有问题。使用命令adb help可以得到adb的帮助文档。
adb get-serialno 可以得到设备的serial number adb get-state 可以得到设备的状态offline|bootloader|device(现在显示的事offline) adb status-window 可以连续打印设备状态(事实证明这个确实有用)
接着,打开另外一个终端
adb kill-server kill server进程 adb start-server 确保server进程启动 显示: * daemon not running. starting it now on port 5037 * * daemon started successfully * 另外一个窗口显示: C:\Users\asus\Desktop>adb status-window [2J[2HAndroid Debug Bridge State: unknown [2J[2HAndroid Debug Bridge State: device 貌似已经OK了
这个时候再来检查设备
adb devices -l
已经有内容输出了:
C:\Users\asus>adb devices -l List of devices attached 34bd66f2 device
貌似蛮有意思的。。。