adb学习笔记(一)之基本使用
adb是一个能与android模拟器/设备交互的非常有用的工具,它由以下三部分组成。
- Client 用户界面,运行于开发机上,ADT,DDSM也会创建adb client
- Server 后台进程,同时与用户与android设备连接
- daemon 运行于设备/模拟器上的后台进程
此命令位于<sdk>/platform-tools
下。
当你使用adb client时,它首先尝试与server进程连接,如果没有则启动server,server使用5037端口来监听来自所有client的连接。随便server扫描所有5555-5585之间的奇数端口来发现与开发机连接的设备/模拟器。每个android设备/模拟器要求开发一对连续的端口,其中偶数用于console,奇数用于adb,例如
|
|
因为有Server的存在,你可以从任意CLI中连入任何与开发机相连的android设备。
设备开启adb
须在开发者选项
中开启adb调度
,在此之前,可能需要连续点击关于手机
的android版本号来显示开发者选项
。
如果是4.2.2以上的设备,可以设置RSA key来开启验证,adb版本也相应需要1.0.31以上。
语法
你可以在开发机的CLI中或者脚本中使用以下格式的命令:
|
|
如果只有一台android设备与开发机连接,命令将直接发送,如果有多台,就需要指定-d, -e, or -s
选项来选择设备。
命令与参数
分类介绍
目标设备相关
-d 指定目标为usb连接设备,当有多台usb设备时报错
-e 指定目标为模拟器,运行多台模拟器时报错
-s <serialNumber> 通过adb序列号指定目标设备,如 emulator-5556
serialNumber可以通过adb devices [-l]查看
通用
devices [-l] list所有与开发机相连设备
help 打印帮助信息
version 打印版本信息
调试
logcat [option] [filter-specs] 打印logcat
bugreport 打印dumpsys, dumpstate 和 logcat信息
jdwp list目标设备上的所有JDWP进程
可以使用
forward jdwp:<pid>
来进行端口转发,如:
123 >adb forward tcp:8000 jdwp:472>jdb -attach localhost:8000>
数据
install path-to-apk 在设备上安装apk
pull <remote> <local> 从目标设备上copy文件
push <local> <remote> copy开发机中的文件到目标设备
端口与网络
forward <local> <remote> 将设备的端口转发到开发机端口
ppp <tty> [parm]... 通过usb运行PPP
<tty>
— PPP流tty,例如 dev:/dev/omap_csmi_ttyl[parm]...
— 0-n个 PPP/PPPD 选项,如defaultroute
,local
,notty
注:你不应自动开始PPP连接
脚本
get-serialno list设备的serialNumber
get-state 显示设备的adb状态
wait-for-device 在设备状态为"device"之间,阻塞设备
可将此命令加于其它命令之前,待adb连接成功后才执行后续命令:
adb wait-for-device shell getprop
需要注意的是此命令并不会等待系统完成启动,例如在设备启动时执行以下命令adb wait-for-device install <app>.apk
将报错,因为adb连接成功时android的包管理尚未启动。
后台服务
start-server 如果server未启动则启动之
Kill-server 终止server
Shell
shell 开启设备的一个shell
shell [shellCommand] 在设备中执行一个shell命令
查询设备
adb devices
将会显示设备信息,分为两部分:
<type>-<consolePort> 例如emulator-5554
此值可用于adb -s
参数值
状态: 可能值有offline(未连接或无响应),device(已连接,但如前已指出的,不一定完全启动),no device(无设备连接)
例如:
|
|
|
|
连接到指定设备
如果多个设备连接到开发机,可以使用 -s
|
|
如果虽然有多个设备相连,但是只有一个是通usb/模拟器相连,那么可以使用-d
或-e
参数 。
安装App
adb可以将开发机上的apk安装到目标设备中:
|
|
如果使用集成开发环境,那么IDE将自动调用ADB安装程序。
可以将对开发机任意端口的请求转发到目标设备的某指定端口,如:
访问host 6100将等同于访问android设备的7100端口。
也可以使用UNIX domain来表示端口:
|
|
宿主机与目标设备间copy文件
使用pull
和push
命令可以在开发机与目标机之间copy文件。
从设备到开发机:
|
|
从开发机到设备:
以上local
指开发机文件path,remote
指android设备path,如:
|
|
执行命令
adb提供一个目标设备的Shell,可以执行位于android设备/system/bin/...
等位置的命令。
最常用的两个命令是 activity manager (am
) 和 package manager (pm
)。
如果不想进入shell,可以:
|
|
直接打开android设备的shell:
|
|