adb 的原理以及它总重启等问题详解
1、adb(Android Debug Bridge) 意为android调试桥。
是android系统中的一种命令行工具,通过它可以和android设备或模拟器通信。
ADB是一个C/S架构的应用程序,由三部分组成:
1)adb client, 运行在PC上(为DDMS,即IDE工作)
2)adb daemon(守护进程), 运行于Emulator(为与Emulator中的VM交互工作);
3)adb server(服务进程), 运行在PC(任务管理器上有),管理着adb client和adb daemon的通信。server与client通信的端口是是5037,adb server会与emulator交互的,使用的端口有两个,一个是5554专门用于与Emulator实例的连接,那么数据可以从Emulator转发给IDE控制台了,另一个则是5555,专门与adb daemon连接为后面调试使用。
PS:Emulator/Device占用两个(一组)端口,一个为偶数的5554,一个奇数的5555。
如果还开启其他的Emulator,则使用的另一组端口是5556,5557,一直到5585.
adb server开启时就是通过查找5555-5585之间端口来建立与模拟器的连接的,建立连接后就可以用adb的相关命令了。
ADB的原理详图解
这下总明白了吧。
2.DDMS
在Eclipse开发工具中开发时,右上角可打开DDMS面板。Android 开发环境中的针对设备上Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等服务。DDMS启动后会自动调用ADB服务,从而启动ADB服务,而不用开发者手动去启动ADB工具。 因为当用数据线连接设备到电脑上时,adb就会启动(前提是android设备上得先打开“USB调试”模式)。像各种手机助手类的软件主要也是通过调用adb或者ddms来获取和操作手机上的APP。个人感觉因为涉及的东西比较多,有数据线的问题,硬件接口的问题,还有adb,ddms能否顺利启动的问题,所以会出现有时候adb启动会了,或者总是重启。
3.问题
因为当用数据线连接设备到电脑上时,adb就会启动(前提是android设备上得先打开“USB调试”模式)。像各种手机助手类的软件主要也是通过调用adb或者ddms来获取和操作手机上的APP。个人感觉因为涉及的东西比较多,有数据线的问题,硬件接口的问题,还有adb,ddms能否顺利启动的问题,所以会出现有时候adb启动会了,或者总是重启。
4.解决办法
有个老外总结的比较全面:
Try below steps:
- Close the Eclipse if running
- Go to the Android SDK tools directory in Command Prompt
- type
adb kill-server
- then type
adb start-server
- No error message is thrown while starting ADB server, then adb is started successfully.
- Now you can start Eclipse again.
- 个人再补一条,重启电脑。
it worked for me this way, Eclipse should be closed before issuing these commands.
前提是你的adb已经配置好了。 如果这时候依然didn't ACK,那么启动任务管理器,看看是否有adb.exe.有的话关掉,再重复以上动作就可以了。
这个问题是开发中的老大难问题,通过以上方法,大不了多折腾几遍应该能解决类似于“ADB server didn't ACK * failed to start daemon”的问题。
参考资料:
1.http://game.chinaitlab.com/devdoc/856386.html
2.http://blog.sina.com.cn/s/blog_51335a000101j59n.html
3.http://www.cnblogs.com/miya2012/archive/2012/06/05/2536028.html
4.http://baike.baidu.com/view/2688850.htm
5.http://baike.baidu.com/view/46000.htm#3
Author By Andy Zhai
-0:39 16/04/2013
转载于:https://www.cnblogs.com/carmanloneliness/archive/2013/04/16/3023299.html
adb 的原理以及它总重启等问题详解相关推荐
- InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)...
上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢? 测试代码 publi ...
- 共模扼流圈的工作原理与作用以及特点和应用详解
共模扼流圈的工作原理与作用以及特点和应用详解 - 电子常识 - 电子发烧友网 http://www.elecfans.com/dianzichangshi/20170609523118.html 共模 ...
- 图像仿射变换原理3:仿射变换类型及变换矩阵详解
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 ...
- Android自动化测试环境部署及adb sdkmanager avdmanager Monitor DDMS工具使用及命令详解
环境部署及工具使用 系列文章 前言 环境部署 硬件环境 软件环境 ADB工具 adb组成 adb命令 android命令 sdkmanager 命令 avdmanager命令 管理模拟器 monito ...
- OkHttp原理第五篇-Cache缓存类详解
✨作者简介:00后,22年刚刚毕业,一枚在鹅厂搬砖的程序员. ✨前置任务:本篇是CacheInterceptor的补充文章,重点讲解OkHttp的缓存类,读者最好也了解下,虽然不太影响后续文章的阅读, ...
- Redis系列教程(九):Redis的内存回收原理,及内存过期淘汰策略详解
Redis内存回收机制 Redis的内存回收主要围绕以下两个方面: 1.Redis过期策略:删除过期时间的key值 2.Redis淘汰策略:内存使用到达maxmemory上限时触发内存淘汰数据 Red ...
- jvm压缩指针原理以及32g内存压缩指针失效详解
目录: java虚拟机汇总 class文件结构分析 1).class文件常量池中的常量项结构 2). 常用的属性表的集合 类加载过程 1).类加载器的原理以及实现 虚拟机结构分析 1).jdk1.7和 ...
- mysql中锁原理及for update悲观锁的详解
mysql 中有多种多样的锁,今天我们具体分享一下: 一.mysql中乐观锁和悲观锁原理及种类: 乐观锁并不是数据库自带的,如果需要使用乐观锁,那么需要自己去实现,一般情况下,我们会 ...
- oracle 总转横函数,详解Oracle行列转换函数-pivot函数和unpivot函数-多智时代
今天主要介绍一下Oracle行转列及列转行常见函数,下面一起来看看吧! 行列转换 pivot函数:行转列函数 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)): ...
最新文章
- 特斯拉再裁员3000多人,马斯克称别无选择
- php 按钮状态,RPi GPIO状态更新为php按钮和脚本
- Perl中的字符串操作函数
- 离合器二自由度扭转振动线性系统仿真分析
- 特别的彩蛋给特别的你,新版官网上线啦!
- NOJ 20 吝啬的国度
- xyz后缀的网站_.XYZ五岁了
- Flume-NG源码阅读之AvroSink
- “约见”面试官系列之常见面试题第十篇值meta标签(建议收藏)
- 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字
- FreeBSD系统忘记root密码
- 程序员分析了 50 万条拼多多商品数据,告诉你到底是消费升级还是降级!
- PCD Lesson2:PCD文件的write
- 常见操作系统体系结构
- windows启用Guest用户
- python 循环赋值_计算机二级Python语言程序设计 第2章Python语言基本语法元素
- openldap sssd服务认证登录
- BSCI验厂审核知识点
- 选择结构程序设计 思维导图
- 动态路由协议 ❀ ISIS-中央系统到中央系统