介绍

Android 调试桥 (adb) 是一种功能多样的命令行工具,可与设备进行通信。

adb 命令可用于执行各种设备操作 (例如安装和调试应用) ,并提供对 Unix shell (可用来在设备上运行各种命令) 的访问权限。它是一种 C/S 程序,包括以下三个组件:

  • 客户端:用于发送命令。客户端在开发计算机上运行。你可以通过发出 adb 命令从命令行终端调用客户端。
  • 守护程序 (adbd):用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
  • 服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。

在 Android studio 里安装了 SDK 后,可以在平台工具 (platform-tools) 对应的目录里找到 adb 工具。

工具的位置为 android_sdk/platform-tools/adb 里,在我的 mac 本地默认的位置为/Users/lumin/Library/Android/sdk/platform-tools

当然你可以手动配置系统环境变量,然后直接执行 adb 命令,这样一劳永逸。

列出已连接设备

➜  platform-tools ./adb devices -l
List of devices attached
8FD0218A25001582       device usb:338821120X product:CLT-AL00l model:CLT_AL00l device:HWCLT transport_id:6
192.168.43.57:5555     device product:GLL-AL00CN model:GLL_AL00 device:HWGLL transport_id:5

上面连接了两个设备,第一个设备是 USB 数据线直连,第二个设备是在同一局域网下,通过设定 ip 地址连接的。

第一项为设备的标识 (序列号) ,后续命令指定设备都将通过该标识来操作。

通常在多设备情况下你需要指定序列号:

adb -s 8FD0218A25001582 command

adb 会针对每个设备输出以下状态信息:

  • 序列号:由 adb 创建的字符串,用于通过端口号唯一标识设备。

  • 状态:设备的连接状态可以是以下几项之一:

    • offline:设备未连接到 adb 或没有响应。
    • device:设备现已连接到 adb 服务器。请注意,此状态并不表示 Android 系统已完全启动并可正常运行,因为在设备连接到 adb 时系统仍在启动。不过,在启动后,这将是设备的正常运行状态。
    • no device:未连接任何设备。
  • 说明:如果命令包含 -l 选项,devices 命令会告知你设备是什么。当你连接了多个设备时,此信息很有用,可帮你将它们区分开来。

连接远程设备

➜  platform-tools ./adb connect 192.168.43.57:5555
already connected to 192.168.43.57:5555

文件互传

你可以使用 pullpush 命令将文件复制到设备或从设备复制文件,使用 pullpush 命令可将任意目录和文件复制到设备中的任何位置。

从设备中复制某个文件或目录 (及其子目录) :

adb pull remote local

将某个文件或目录 (及其子目录) 复制到设备:

adb push local remote

复制一个文件到/sdcard/haps 目录

➜  platform-tools ./adb -s 8FD0218A25001582 push /Users/lumin/build/outputs/hap/release/entry-release-rich-signed.hap /sdcard/haps 
/Users/lumin/build/output...ap: 1 file pushed, 0 skipped. 97.9 MB/s (176627 bytes in 0.002s)

停止 adb 服务器

在某些情况下,你可能需要终止 adb 服务器进程,然后重启以解决问题 (例如,如果 adb 不响应命令) 。

adb kill-server

向设备发送 shell 命令

在发送命令前,需要指定哪台设备。如果只有一台连接设备,则不需要指定,系统默认发送命令到该设备。

adb [-d | -e | -s serial_number] command

单命令操作

列出设备根目录

➜  platform-tools ./adb -s 8FD0218A25001582 shell ls -l / 
total 28
drwxr-xr-x   2 root   root      0 2018-08-08 00:01 3rdmodem
drwxr-xr-x   2 root   root      0 2018-08-08 00:01 3rdmodemnvm
drwxr-xr-x   2 root   root      0 2018-08-08 00:01 3rdmodemnvmbkp
dr-xr-xr-x 110 root   root      0 2021-05-17 10:19 acct
lrw-r--r--   1 root   root     11 2018-08-08 00:01 bin -> /system/bin
lrw-r--r--   1 root   root     50 2018-08-08 00:01 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxrwx---   7 system cache  4096 2019-08-29 02:56 cache
lrw-r--r--   1 root   root     13 2018-08-08 00:01 charger -> /sbin/charger
drwxr-xr-x   4 root   root      0 1970-01-01 08:00 config
drwxr-xr-x   7 root   root     79 2018-08-08 00:01 cust
lrw-r--r--   1 root   root     17 2018-08-08 00:01 d -> /sys/kernel/debug

交互式 shell 命令

adb [-d | -e | -s serial_number] shell

退出交互式命令:

exit

查看设备支持的工具

Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表,请使用以下命令:

adb shell ls /system/bin

安装应用

adb install path_to_apk

参考资料:

> https://developer.android.google.cn/studio/command-line/adb