Android 官方命令深入分析之Android Debug Bridge(adb)
作者:宋志辉
Android Debug Brideg(adb)是一个多用途的命令行工具。可以与Android虚拟机进行通信或连接真机。它同样提供了访问设备shell的高级命令行操作的权限。它是一个包含以下三部分的客户端-服务端程序:
- 一个客户端,运行在你的开发设备上。你可以通过adb命令来从shell中调用一个客户端。或者通过ADT插件和DDMS创建adb客户端。
- 一个服务端,作为一个后台进程运行在你的开发设备中。服务端负责客户端和虚拟机或设备中adb守护进程的通信。
- 一个守护进程,运行在虚拟机和设备中的一个后台进程。
你可以在/platform-tools/中找到adb工具。
当你启动一个adb客户端时,客户端首先检查这里是否已经有一个服务端进程在运行。如果没有,则启动服务端进程。当服务端进程运行后,与本地的TCP的5037端口,并且监听发自客户端的命令-所有的adb 客户端都通过5037端口与adb 服务端进行通信。
接下来服务端建立起与所有运行的虚拟机和设备的连接。它通过扫描5555到5585端口的奇数端口来确定运行的虚拟机或设备的实例。当服务端发现一个adb守护进程,就通过这个端口建立连接。需要注意的是,每个虚拟机或设备都需要两个端口:一个偶数端口用来进行控制台连接,一个奇数端口用来adb 连接。
比如:
宋志辉的虚拟机,控制台端口:5554
宋志辉的虚拟机,adb端口:5555
如上所示,虚拟机实例连接到5555端口,控制台监听5554端口。
一旦服务器建立起所有虚拟机的连接,你可以使用adb命令来访问这些设备。因为服务端管理与设备或虚拟机的连接并且处理来自adb客户端的命令。你可以使用任何的客户端来控制任意的虚拟机或设备。
允许adb 调试
为了使adb可以通过USB连接设备,必须在系统设置中找到 开发者选项 开启USB调试。
在Android 4.2及以上版本中,开发者选项默认是隐藏的。要显示出来,点击“设置”“关于”“构建版本”7次。返回之前的屏幕可以找到“开发者选项”。
在有些设备中,开发者选项 可能显示出来或者名称不同。
注意:当你连接一个高于Android4.2.2版本的设备到计算机时,手机会弹窗提示是否同意一个RSA密钥来运行这台计算机进行调试。这个安全机制用来保护用户的设备,因为除非你解锁设备,否则其他的adb命令无法运行。这需要adb版本大于等于1.0.31(SDK大于等于16.0.1)。
语法
你可以在你的电脑上通过命令行来运行adb命令。用法如下:
adb [-d|-e|-s <设备号>] <命令>
如果这里只有一个虚拟机或设备运行,adb默认发送到这台设备或虚拟机。如果有多个虚拟机或设备存在,你需要使用-d, -e, 或 -s选项指明运行命令的设备。
命令
下面的表格列出了所有的支持的adb命令并解释了含义和用途。
| 分类 | 命令 | 描述 |
|---|---|---|
| 目标设备 | -d | 传递一个adb命令到仅有的usb设备上 |
| -e | 传递一个adb命令到仅有的虚拟机上 | |
| -s | 传递一个adb命令到指定的设备上 | |
| 通用 | devices | 列出当前运行的虚拟机或设备列表 |
| help | 列出adb命令的帮助列表 | |
| version | 输出adb的版本 | |
| 调试 | logcat [option] [filter-specs] | 打印log数据到屏幕上 |
| bugreport | 输出dumpsys, dumpstate和logcat数据到屏幕上 | |
| jdwp | 列出指定的设备的可用的JDWP进程 | |
| 数据 | install | 安装Android应用到虚拟机或设备中 |
| pull | 从虚拟机或设备中复制文件到电脑上 | |
| push | 从电脑上复制文件到虚拟机或设备中 | |
| 端口和网络 | forward | sockets连接用到的命令 |
| ppp | 通过USB运行PPP | |
| 脚本 | get-serialno | 获取adb实例的序列号字符串 |
| get-state | 获取虚拟机或设备的adb状态 | |
| wait-for-device | 阻断执行直到设备在线 | |
| 服务端 | start-server | 检测adb服务端是否运行,如果不,则运行 |
| stop-server | 终止adb服务端进程 | |
| shell | shell | 在指定设备或虚拟机中启动远程的shell |
查询虚拟机或设备实例
在使用adb命令之前,了解当前运行了多少虚拟机或设备是很有必要的。可以通过指定的命令生成一个当前运行的列表:
adb devices
作为回应adb输出所有设备的状态信息:
- 序列号。由adb创建的用于唯一标示虚拟机或设备的字符串。
- 状态。实例运行的状态(offline,device,no device)。
输出的格式如下:
[序列号] [状态]
下面是devices命令的一个例子:
adb devices
List of devices attached
emulator-5554 device
emulator-5556 device
emulator-5558 device
指定特定的虚拟机或设备
如果是多个设备或虚拟机在运行,你需要指定运行adb命令的实例。可以使用命令中的-s来实现:
adb -s <序列号> <命令>
可以通过devices命令获取序列号。
adb -s emulator-5556 install helloWorld.apk
需要注意的是,当多个设备运行时,你没有通过-s指定设备,运行adb命令会报错。
如果有一个或多个设备,但只有一个虚拟机,可以使用-e命令在虚拟机运行;如果有一个或多个虚拟机,但只有设备,可以使用-d在设备运行。
安装一个应用
你可以使用adb命令从开发计算机中复制一个应用到虚拟机或设备中。可以使用install命令:
adb install <apk路径>
当然,安装apk到设备中不一定要使用命令行。
复制文件
你可以使用pull和push来复制虚拟机或设备中的文件。
停止adb服务端
在有些时候,我们需要停止adb服务端,重新启动来解决问题。
停止adb服务端,可以使用kill-server命令,之后就可以重启adb服务端运行任何命令了。
无线连接
通常adb命令通过usb连接设备来使用,当然也可以通过wifi来实现。
- 开发计算机和设备(通常是手机)连接了同一个网络(同一个wifi或在同一个局域网中)。(并不是所有的热点都支持,防火墙需要支持adb)。
- 使用usb线连接计算机。
- 确保计算机的adb命令运行在usb模式中。
$ adb usb
restarting in USB mode 通过usb连接设备。
$ adb devices
List of devices attached
######## device重启adb到tcipip模式。
$ adb tcpip 5555
restarting in TCP mode port: 5555找到android设备的ip地址。
- 通过ip地址连接到设备。
$ adb connect #.#.#.#
connected to #.#.#.#:5555 - 移除设备的usb线,确认你还可以对设备进行访问。
$ adb devices
List of devices attached
#.#.#.#:5555 device
如果adb连接丢失后:
- 确保你的计算机和手机接入同一个wifi。
- 通过adb connect重新连接。
- 如果没用的话,重启服务端进程。
adb kill-server
然后重新开始以上步骤。
Android 官方命令深入分析之Android Debug Bridge(adb)的更多相关文章
- Android 官方命令深入分析之android
作者:宋志辉 android命令是一个非常重要的开发工具,它可以: 创建.删除和查看Android Virtual Devices(AVDs). 创建和更新android项目. 更新你的android ...
- Android 官方命令深入分析
原文:www.libgdx.cn Android SDK包括了多种工具来帮助你创建基于Android平台的移动应用.这些工具一般分成两类:SDK 工具和 platform 工具. SDK 工具是独立的 ...
- Android官方命令深入分析之bmgr
作者:宋志辉 bmgr是一个可以跟Backup Manager进行交互的shell工具,要使用这个工具,Android设备API最小为8.它提供了备份和恢复操作的命令,所以你无需频繁的清除数据.这些命 ...
- Android官方命令深入分析之AVD Manager
作者:宋志辉 AVD Manager提供了一个图形用户接口,通过它你能够创建和管理AVDs. 你能够通过下面方式执行AVD Manager: Eclipse:选择 Window > Androi ...
- Android官方命令深入分析之Hierarchy Viewer
Hierarchy Viewer允许你调试和优化用户界面.它提供了一个层可视的方式来显示. 启动Hierarchy Viewer,如下: 在Android Studio中,选择Tools > A ...
- Android官方命令深入分析之虚拟机
Android SDK包含了一个运行在计算机上的移动设备虚拟机.这个虚拟机可以允许你在没有物理设备的情况下开发和测试Android应用. 键盘命令 虚拟设备按键 对应键盘按键 Home HOME 菜单 ...
- Android官方命令深入分析之Device Monitor
Android Device Monitor是一个提供了图形化界面的可以对Android应用进行调试和分析的独立的工具.Monitor工具不需要IDE环境,比如Android Studio.包括以下工 ...
- Android官方命令深入分析之hprof-conv
hprof-conv工具可以将Android SDK工具生成的HPROF文件生成一个标准的格式,这样你就可以使用工具进行查看: hprof-conv [-z] <infile> <o ...
- Android官方命令深入分析之etc1tool
etc1tool是一个命令行工具,可以将PNG图像压缩为etc1标准,并且可以进行解压缩. 用法: etc1tool infile [--help | --encode | --encodeNoHea ...
随机推荐
- 操作系统内存管理之 内部碎片vs外部碎片
外部碎片:因为行程持续地被载入与置换,使得可用的记忆体空间被分割成许多不连续的区块.虽然记忆体所剩空间总和足够让新行程执行,却因为空间不连续,导致程式无法载入执行.内部碎片:发生在以固定长度分割区来进 ...
- Spring + mybatis 集成
具体项目可参照:https://github.com/LuoXiaoyi/springmvc 一.环境准备:Spring4.3.5 + Mybatis3.4.6 + Mybatis-Spring 1. ...
- Java第4次实验提纲(面向对象2-继承、多态、抽象类与接口与Swing)
PTA 题集面向对象2-进阶-多态接口内部类 第1次实验 1.1 题集5-1(Comparable) 难点:如果传入对象为null,或者传入对象的某个属性为null,怎么处理? 1.2 题集5-2(C ...
- Android自定义View(RollWeekView-炫酷的星期日期选择控件)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/53420889 本文出自:[openXu的博客] 目录: 1分析 2定义控件布局 3定义Cus ...
- 手把手教你做一个Shell命令窗口
这是一个类似于win下面的cmd打开后的窗口,可以跨平台使用,可以在win和linux下面同时使用,主要功能如下: 首先我们需要把这些功能的目录写出来,通过写一个死循环,让其每次回车之后都可以保持同样 ...
- springMVC源码分析--异常处理机制HandlerExceptionResolver执行原理(二)
上一篇博客springMVC源码分析--异常处理机制HandlerExceptionResolver简单示例(一)中我们简单地实现了一个异常处理实例,接下来我们要介绍一下HandlerExceptio ...
- Ubuntu和ROS一起愉快玩耍
Ubuntu和ROS重要的两个中文网址: Ubuntu:http://cn.ubuntu.com/ROS:http://wiki.ros.org/cn Robots and drones on Ubu ...
- 理解性能的奥秘——应用程序中慢,SSMS中快(3)——不总是参数嗅探的错
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(2)--SQL Server如何编译存储过程 在我们开始深入研究如何处理 ...
- Dynamics CRM 通过Odata创建及更新记录各类型字段的赋值方式
CRM中通过Odata方式去创建或者更新记录时,各种类型的字段的赋值方式各不相同,这里转载一篇博文很详细的列出了各类型字段赋值方式,以供后期如有遗忘再次查询使用. http://luoyong0201 ...
- Swift中switch强大的模式匹配
不少人觉得Swift中switch语句和C或C++,乃至ObjC中的差不多,此言大谬! 让本猫带领大家看一下Swift中switch语句模式匹配的威力. 所谓模式匹配就是利用一定模式(比如couple ...