Android Debug Bridge

来自 Arch Linux 中文维基

Android 调试桥(ADB)是一种命令行工具,可用于安装、卸载和调试应用程序,传输文件和访问设备的 shell。

安装[编辑 | 编辑源代码]

ADB 是平台-工具 SDK 软件包android-tools 软件包的一部分。

使用[编辑 | 编辑源代码]

连接设备[编辑 | 编辑源代码]

提示:
  • 对于一些设备,你能需要在设备上启用 MTP,然后 ADB 才能工作。其他一些设备需要启用 PTP 模式才能工作。
  • 许多设备的 udev 规则都包含在 libmtp 中,所以如果已安装,下面的步骤可能不需要。
  • 确保你的 USB 线能够同时进行充电和数据传输。许多与移动设备捆绑的 USB 线不包括 USB 数据针。

要在 Arch 下通过 ADB 连接实体设备或手机,你必须:

  1. 如果希望将设备连接到适当的 /dev/ 项,可能需要安装 android-udev
  2. 通过 USB 插入你的 Android 设备。
  3. 在你的手机或设备上启用 USB 调试功能:
    • Jelly Bean(4.2)及更新的版本:进入设置>关于手机点击版本号七次,直到得到一个弹出窗口说你已经成为一个开发者。在较新的 Android 操作系统版本,版本号可能在一个名为软件信息 的菜单中。然后进入设置>开发者>USB 调试并启用它。设备会要求允许有指纹的电脑连接。勾选永久允许选项会把 ~/.android/adbkey.pub 复制到设备的 /data/misc/adb/adb_keys
    • 较早的版本:这通常是在设置>应用程序>开发>USB 调试中进行。检查该选项后重新启动手机,以确保 USB 调试被启用。

如果 ADB 识别你的设备adb devices 显示为 "device" 而不是 "unauthorized",或者它在 IDE 中可见并可访问),那么你已完成。否则请看下面的说明。

识别设备标识符[编辑 | 编辑源代码]

每个 Android 设备都有 USB 制造商/产品标识符。例如,HTC Evo:

vendor id: 0bb4
product id: 0c8d

插入你的设备并执行:

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

添加 udev 规则[编辑 | 编辑源代码]

如果你的设备没有包含在 android-udev(或 android-udev-gitAUR),使用以下模板创建一个自定义的 udev 规则,将 [VENDOR ID][PRODUCT ID] 替换为你的设备标识符

/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="[VENDOR ID]", MODE="0660", GROUP="adbusers", TAG+="uaccess"
SUBSYSTEM=="usb", ATTR{idVendor}=="[VENDOR ID]", ATTR{idProduct}=="[PRODUCT ID]", SYMLINK+="android_adb"
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 仍然在你连接的设备显示未授权,请确保该设备本身有调试权限。当你实际连接该设备时,应该出现一个允许 USB 调试?的对话框。选择总是允许...,然后点击 确定。如果从未出现过该对话框,请尝试在设置>开发人员选项>撤销 USB 调试授权,然后点击确定,并重复本节的步骤。如果你仍然没有看到允许 USB 调试?对话框,而且设备被列为未授权,那么进入设备的开发者选项,首先取消 USB 调试,然后再次勾选。

传输文件[编辑 | 编辑源代码]

现在可以使用 adb 在设备和电脑之间传输文件。要向设备传输文件,请用:

$ adb push what-to-copy where-to-place

要从设备传输文件,请用:

$ adb pull what-to-pull where-to-place

也可参见#用 ADB 构建的工具

备份和恢复[编辑 | 编辑源代码]

你也可以用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 构建的工具[编辑 | 编辑源代码]

  • adbfs-rootless-gitAUR – 挂载一台通过 USB 连接的 Android 设备。
  • adb-sync-gitAUR – 一种使用 ADB 协议在 PC 和 Android 设备之间同步文件的工具。
  • androidscreencast-binAUR – 从 PC 通过 ADB 查看和控制你的 Android 设备。
  • logcat-colorAUR – 一种丰富多彩、高度可配置,可替代标准 adb logcat 命令。
  • scrcpy – 显示和控制你的 Android 设备。
  • sndcpy-binAUR – 基于 scrcpy 可音频转发的工具。
  • qtscrcpyAUR – Android 实时显示控制软件。

故障排除[编辑 | 编辑源代码]

空设备列表[编辑 | 编辑源代码]

设备不显示的一个可能原因是你的设备没有启用 USB 调试功能。参见启用 USB 调试

无权限错误[编辑 | 编辑源代码]

如果设备显示 "无权限 "标签,它可能与 android-udev 收集的制造商/产品标识符不同。

例如,当设备使用定制 ROM,或者从 MTP 模式切换到 USB 连接模式、 sideload 和/或 fastboot 模式时,就会发生这种情况。 用 lsusb 验证实际设备标识符,并#添加 udev 规则