Android 调试桥:adb的入门与最佳实践(无线连接调试)

2,050 阅读7分钟

原文地址

一 adb简介

Android 调试桥 (adb) 是一种与设备通信,执行各种设备操作(例如安装和调试应用)的命令行工具。adb提供了对 Unix shell(可用来在设备上运行各种命令)的访问权限。

adb是一种客户端-服务器程序,包括以下三个组件:

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

adb 包含在 Android SDK 平台工具软件包中,使用 SDK管理器下载此软件包,该管理器会将其安装在 android_sdk/platform-tools/ 下。

二 adb 工作原理

当某个 adb 客户端启动时,客户端会先检查是否有 adb 服务器进程正在运行。如果没有,启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 。所有 adb 客户端均通过端口 5037 与 adb 服务器通信。

然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。

服务器与所有设备均建立连接后,您便可以使用 adb 命令访问这些设备。

三 配置adb环境

adb默认在系统的安卓sdk下的platform-tools目录下,即android_sdk/platform-tools/ 目录。如果想直接在Android Studio的Terminal控制台使用,需要先配置好环境。

打开终端,输入以下命令:

cd ~
touch .bash_profile
open -e .bash_profile

在弹出的配置页中,配上自己安卓platform-tools的路径,我的实例如下:

export PATH=${PATH}:/Users/ystm1/Library/Android/sdk/tools:/Users/ystm1/Library/Android/sdk/platform-tools

保存退出,此刻要记得更新配置生效:

source .bash_profile

注意:

如果是zsh用户,上述配置可能对于你而言只是一次性的,你重启一次电脑后可能会发现,我的adb命令又报错“zsh: command not found: adb”了。不要慌,因为你还没有配置配置 .zshrc(非zsh用户忽略)

1)终端中输入:open .zshrc

2)如果已经有了,输入:open .zshrc -e

3)在打开的文件中最后一行添加: source ~./bash_profile

4)输入:source ~/.zshrc 使其立即生效

四 常用的adb命令

4.1 help命令

查看所有支持的 adb 命令的详细列表:

adb --help

4.2 devices 命令

devices 命令生成已连接设备的列表。

adb devices -l

结果:

(base) ystm1@ystm1 ~ % adb devices -lList of devices attached192.168.1.110:5556     device product:dipper model:MI_8 device:dipper transport_id:290192.168.1.124:5558     device product:PD1616 model:vivo_X9 device:PD1616 transport_id:296

以下状态信息:

  • 序列号:由 adb 创建的字符串,用于通过端口号唯一标识设备。
  • 状态:设备的连接状态可以是以下几项之一:
    • offline:设备未连接到 adb 或没有响应。
    • device:设备现已连接到 adb 服务器。请注意,此状态并不表示 Android 系统已完全启动并可正常运行,因为在设备连接到 adb 时系统仍在启动。不过,在启动后,这将是设备的正常运行状态。
    • no device:未连接任何设备。
  • 说明:如果您包含 -l 选项,devices 命令会告知您设备是什么。当您连接了多个设备时,此信息很有用,可帮助您将它们区分开来。

4.3 install 命令

install 命令在模拟器或连接的设备上安装 APK

adb install path_to_apk

4.4 shell 命令

shell 命令通过 adb 发出设备命令,也可以启动交互式 shell。如需发出单个命令,请使用 shell 命令,如下所示:

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

要在设备上启动交互式 shell,请使用 shell 命令,如下所示:

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

要退出交互式 shell,请按 Ctrl + D 键或输入 exit

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

adb shell ls /system/bin

4.5 Activity 管理器 (am)

adb shell am start -a android.intent.action.VIEW

Activity 管理器 (am),调用软件包管理器 (pm)和调用设备政策管理器 (dpm)使用不多,需要时可查阅官方文档

五 最佳实践 · 无线调试,解放烦人的数据线

5.1 无线连接步骤

将手机与开发的电脑处于同一局域网,在电脑的Android Studio中打开命令行 ,注意需要先用USB数据线让手机连接上Android Studio,此刻你的页面应该是这样:

此刻打开Android Studio中Teiminal命令行,连接运行 adb devices 命令:

如图,List of devices attached表示连接到Android Studio的设备列表,6UK9X20411X01598 代表我们用数据线连接到Android Studio的设备序列号。

找到了这个设备,接下来我们需要将这个设备通过局域网无线连接到Android Studio,继续输命令:

 adb -s 6UK9X20411X01598  tcpip 5555

5555是端口号,注意与常用端口区分。该命令将用数据线连接到Android Studio的设备与5555端口绑定。

接下来我们只需要再将Android Studio绑到局域网中的该端口即可(注意下面106的局域网地址是需要连接的设备的局域网地址,5555端口号是上面tcpip设定的端口号,需要保持一致):

adb connect 192.168.1.106:5555 

至此大功告成!输入adb devices -l 命令,看看结果吧,此刻可以把烦人的数据线摘掉了哦!

下面是我的截图

我一直用的这种调试方式,可以无线安装app调试,相比数据线而言一开始有担心会不会装包速度变慢,但是使用下来100m以内的安装包(我也没写100M开外大小的hh)没有感觉到特别明显的速度延迟,使用感觉还是很好的。

5.2 可能的问题

如果 adb 连接断开:

  1. 确保主机仍与 Android 设备连接到同一个 WLAN 网络。

  2. 通过再次执行 adb connect 步骤重新连接。

  3. 如果上述操作未解决问题,重置 adb 主机:

    adb kill-server adb start-server
    

    然后,从头开始操作。

注意:华为设备可能一开始会连接不成功,注意在开发者选项里,打开:“仅充电”模式下允许ADB调试!

六 (2021.2.24 补充更新)Android 11 的 无线连接

Android 11之前,我们在用常规方法连接adb时,总是不可避免地要先用数据线连接到手机。

可有时候就是没有数据线或者驱动等问题,连接不上手机,又或者数据线连上了手机,但是接触不良经常断开,此刻显得非常得麻烦。

Android11的无线调试很好地解决 这个问题,它支持全程无数据线直接连接。

Android 11 支持通过 Android 调试桥 (adb) 从工作站以无线方式部署和调试应用,而无需通过 USB 实际连接您的设备,从而避免常见的 USB 连接问题(例如驱动程序安装方面的问题)。

如需使用无线调试,您需要使用配对码将您的设备与工作站配对。您的工作站和设备必须连接到同一无线网络。

操作步骤:

1:启用开发者模式,并打开无线调试

2:选择使用配对码配对设备。记下设备上显示的配对码、IP 地址和端口号

3:打开Android Studio的终端,输入

adb pair ipaddr:port

随后终端会提示让你输入配对码,输入之前手机上展示的配对码即可!

(base) ystm1@ystm1 ~ % adb pair 192.168.1.113:39753
Enter pairing code: 605434
Successfully paired to 192.168.1.113:39753 [guid=adb-6d233f38-fn4ZTM]
(base) ystm1@ystm1 ~ %