跳转至内容

Android 调试桥

来自 ArchWiki

Android Debug Bridge (Android 调试桥) - adb(1) - 是一个命令行工具,可用于安装、卸载和调试应用程序,传输文件以及访问设备 shell。

安装

adbandroid-tools 包和 Platform-Tools SDK 包的一部分。

用法

连接设备

提示
  • systemd v258 起,它现在已包含用于 Android 设备的 udev 基本规则,以便开箱即用地使用 adbfastboot。如果您的设备未显示,请尝试安装具有附加规则的 android-udev 包。
  • 对于某些设备,您可能需要在设备上启用 MTP,然后 adb 才能工作。
  • 其他一些设备需要启用 PTP 模式才能工作。
  • 许多设备的 udev 规则包含在 libmtp 中,因此如果您已安装此包,则以下步骤可能不是必需的。
  • 确保您的 USB 数据线能够同时支持充电和数据传输。手机设备附带的 USB 数据线可能不包含 USB 数据引脚。
注意 运行 Android 10 或更早版本的设备不支持无线调试。

首先,您必须在设备上启用开发者模式。为此,您需要

  1. 转到 *设置 > 关于手机*,点击 *版本号* 七次,直到出现您已成为开发者的弹出窗口。在较新版本的 Android 操作系统中,版本号可能位于名为 *软件信息* 的菜单下。
  2. 转到 *开发者选项* 并确保其已开启。

要通过 adb 使用 USB 连接真实设备,您必须

  • 通过 USB 插入您的 Android 设备。
  • 转到 *设置 > 开发者选项 > USB 调试* 并启用它。设备将要求允许连接具有其指纹的计算机。
  • 选中 *永久允许* 选项会将 ~/.android/adbkey.pub 复制到目标手机的 /data/misc/adb/adb_keys 位置。

要通过 adb 使用 Wi-Fi 连接真实设备,您必须

  • 确保您的设备与您的计算机在同一 Wi-Fi 网络上。
  • 转到 *设置 > 开发者选项 > 无线调试* 并启用它。
  • 点击 *使用配对码配对设备*。
  • 运行 adb pair <IP>:<Port> <Pair code>
  • 运行 adb connect <IP>:<Port>。端口将与配对时提供的端口不同。
  • 您应该在 *已配对的设备* 下看到您的计算机。

如果 adb 识别了您的设备 - adb devices 显示其为 device 而不是 unauthorized - 则表示您已完成。否则,请参阅下面的说明。

确定设备 ID

每个 Android 设备都有一个 USB 供应商/产品 ID。以 HTC Evo 为例

vendor id: 0bb4
product id: 0c8d

插入您的设备并执行

$ lsusb
…
Bus 002 Device 006: ID 0bb4:0c8d High Tech Computer Corp.
…

添加 udev 规则

如果您的设备未包含在 android-udev 中,请使用以下模板创建一个自定义 udev 规则,将 VENDOR_IDPRODUCT_ID 替换为您设备 的 ID

/etc/udev/rules.d/51-android.rules
ACTION!="remove", SUBSYSTEM=="usb", ATTR{idVendor}=="VENDOR_ID", MODE="0660", GROUP="adbusers", ENV{ID_DEBUG_APPLIANCE}="android"
ACTION!="remove", SUBSYSTEM=="usb", ATTR{idVendor}=="VENDOR_ID", ATTR{idProduct}=="PRODUCT_ID", SYMLINK+="android_adb"
ACTION!="remove", SUBSYSTEM=="usb", ATTR{idVendor}=="VENDOR_ID", ATTR{idProduct}=="PRODUCT_ID", SYMLINK+="android_fastboot"

然后 重新加载 udev 规则

检测设备

设置好 udev 规则后,拔下设备并重新插入。

运行

$ adb devices
List of devices attached
HT07VHL00676    device

如果拔下设备后再插入,adb 仍未检测到设备,请以 root 用户身份终止并重启 adb 服务器,然后再次检查设备。

# adb kill-server
# adb start-server
$ adb devices
  • 如果 adb devices 旁边仍然显示 unauthorized,请确保设备本身已授权调试权限。
    • 当您物理连接设备时,应会显示 *允许 USB 调试?* 对话框。选择 *始终允许…*,然后点击 *确定*。
    • 如果从未显示该对话框,请尝试 *设置* > *开发者选项* > *撤销 USB 调试授权*,然后点击 *确定*,并重复本节中的步骤。
  • 如果您仍然没有看到 *允许 USB 调试?* 对话框,并且设备显示为未授权,则在设备上进入 *开发者选项*,先取消选中 *USB 调试*,然后再次选中它。

传输文件

现在您可以使用 adb 在设备和计算机之间传输文件。要将文件传输到设备,请使用

$ adb push what_to_copy where_to_place

要将文件从设备传输到计算机,请使用

$ adb pull what_to_pull where_to_place

另请参阅 #基于 adb 构建的工具

备份和恢复

注意 adb backupadb restore 已弃用,并可能在未来的版本中被移除。

您还可以使用 adb 备份和恢复您的设备。此外,无需 root 用户即可执行此过程。以下命令将您的设备备份到一个可以成功恢复的单个文件中。

创建备份的命令是

$ adb backup -apk -shared -all -f backupFileName.ab

命令参数列表是

adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared] [-all] [-system|nosystem] [<packages...>]

然后在设备显示屏上确认该过程,并提供密码(如果之前已设置备份密码)。

恢复先前备份的命令是

$ adb restore backupFileName.ab
注意 请记住,恢复操作将用备份内容替换您的设备内容。

基于 adb 构建的工具

  • adb-sync-git — 一个使用 Android 调试桥协议在 PC 和 Android 设备之间同步文件的工具。
https://github.com/google/adb-sync || adb-sync-gitAUR
  • adbfs-rootless-git — 挂载通过 USB 连接的 Android 设备。
https://github.com/spion/adbfs-rootless || adbfs-rootless-gitAUR
  • adbmanager-bin — 该程序旨在可视化且轻松地管理 adb 服务器和 Android 智能手机的连接。它允许您监控 adb 服务的状态,管理它,并控制已连接设备的列表。它允许您管理您的智能手机:按部分名称搜索已安装的软件包,安装、删除 APK,截屏,重启(正常、引导加载程序、恢复模式)和关闭设备。对于高级用户,有一个 Android Shell 终端和 SD 卡文件管理器。
https://github.com/AKotov-dev/adbmanager || adbmanager-binAUR
  • androidscreencast-bin — 通过 adb 在 PC 上查看和控制您的 Android 设备。
https://github.com/xSAVIKx/AndroidScreencast || androidscreencast-binAUR
  • logcat-color3 — 一个丰富多彩且高度可配置的标准 adb logcat 命令的替代品。
https://github.com/yan12125/logcat-color3 || logcat-color3AUR
  • qtscrcpy — Android 实时显示控制软件。
https://github.com/barry-ran/QtScrcpy || qtscrcpyAUR
  • scrcpy — 显示和控制您的 Android 设备。
https://github.com/Genymobile/scrcpy || scrcpy

故障排除

设备列表为空

您的设备未显示出来的可能原因

  • 未在设备上启用 USB 调试。请参阅 #连接设备
  • 使用了仅限充电的 USB 数据线,而非 USB 数据传输线。

无权限错误

如果设备显示为 no permissions (无权限),那么它可能具有与 android-udev 收集的 ID 不同的供应商/产品 ID。

这可能发生,例如,当设备使用自定义 ROM 时,或者当它从 MTP 切换到 USB 网络共享模式、sideload 和/或 fastboot 模式时。使用 lsusb#添加 udev 规则 来验证实际设备的 ID。

守护进程因权限不足而退出

如果您在运行 adb 时看到以下错误

E adb     : usb_libusb.cpp:571 failed to open device: Access denied (insufficient permissions)

检查您是否在 adbusers 组中。

mdns

adb 不支持 mdns,您在运行 adb mdns servicesadb mdns check 时会看到以下错误

unknown host service 'mdns:check' 
unknown host service 'mdns:services'

要使用 mdns,请切换到 android-sdk-platform-toolsAUR SDK 包

如果您遇到 error: unknown host service (未知主机服务) - 添加环境变量 ADB_MDNS_OPENSCREEN=1

本文或本章节的准确性存在争议。

原因: 此脚本仅使用 adb connect。您能否解释一下,为什么它与 #mdns 小节相关?(在 Talk:Android Debug Bridge 中讨论)

如果您想通过脚本自动连接,请考虑 此 gist