Contents
  1. 1. 设备开启adb
  2. 2. 语法
  3. 3. 命令与参数
    1. 3.1. 目标设备相关
    2. 3.2. 通用
    3. 3.3. 调试
    4. 3.4. 数据
    5. 3.5. 端口与网络
    6. 3.6. 脚本
    7. 3.7. 后台服务
    8. 3.8. Shell
    9. 3.9. 查询设备
    10. 3.10. 连接到指定设备
    11. 3.11. 安装App
    12. 3.12. 宿主机与目标设备间copy文件
    13. 3.13. 执行命令

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,例如

1
2
3
4
Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557

  因为有Server的存在,你可以从任意CLI中连入任何与开发机相连的android设备。

设备开启adb

  须在开发者选项中开启adb调度,在此之前,可能需要连续点击关于手机的android版本号来显示开发者选项

  如果是4.2.2以上的设备,可以设置RSA key来开启验证,adb版本也相应需要1.0.31以上。

语法

你可以在开发机的CLI中或者脚本中使用以下格式的命令:

1
adb [-d|-e|-s <serialNumber>] <command>

  如果只有一台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, dumpstatelogcat信息

jdwp    list目标设备上的所有JDWP进程

可以使用forward jdwp:<pid>来进行端口转发,如:

1
2
3
>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(无设备连接)

  例如:

1
adb devices
1
2
3
4
List of devices attached
emulator-5554 device
emulator-5556 device
emulator-5558 device

连接到指定设备

  如果多个设备连接到开发机,可以使用 -s ,如:

1
adb -s emulator-5556 install helloWorld.apk

  如果虽然有多个设备相连,但是只有一个是通usb/模拟器相连,那么可以使用-d-e参数 。

安装App

  adb可以将开发机上的apk安装到目标设备中:

1
adb install <path_to_apk>

  如果使用集成开发环境,那么IDE将自动调用ADB安装程序。

  可以将对开发机任意端口的请求转发到目标设备的某指定端口,如:

1
adb forward tcp:6100 tcp:7100

  访问host 6100将等同于访问android设备的7100端口。

  也可以使用UNIX domain来表示端口:

1
adb forward tcp:6100 local:logd

宿主机与目标设备间copy文件

  使用pullpush命令可以在开发机与目标机之间copy文件。

  从设备到开发机:

1
adb pull <remote> <local>

  从开发机到设备:

1
adb push <local> <remote>

  以上local指开发机文件path,remote指android设备path,如:

1
adb push foo.txt /sdcard/foo.txt

执行命令

  adb提供一个目标设备的Shell,可以执行位于android设备/system/bin/...等位置的命令。
  最常用的两个命令是 activity manager (am) 和 package manager (pm)。

  如果不想进入shell,可以:

1
adb [-d|-e|-s <serialNumber>] shell <shell_command>

  直接打开android设备的shell:

1
adb [-d|-e|-s <serialNumber>] shell
Contents
  1. 1. 设备开启adb
  2. 2. 语法
  3. 3. 命令与参数
    1. 3.1. 目标设备相关
    2. 3.2. 通用
    3. 3.3. 调试
    4. 3.4. 数据
    5. 3.5. 端口与网络
    6. 3.6. 脚本
    7. 3.7. 后台服务
    8. 3.8. Shell
    9. 3.9. 查询设备
    10. 3.10. 连接到指定设备
    11. 3.11. 安装App
    12. 3.12. 宿主机与目标设备间copy文件
    13. 3.13. 执行命令