Android 调试桥
Android Debug Bridge (Android 调试桥) - adb(1) - 是一个命令行工具,可用于安装、卸载和调试应用程序,传输文件以及访问设备 shell。
安装
adb 是 android-tools 包和 Platform-Tools SDK 包的一部分。
用法
连接设备
首先,您必须在设备上启用开发者模式。为此,您需要
- 转到 *设置 > 关于手机*,点击 *版本号* 七次,直到出现您已成为开发者的弹出窗口。在较新版本的 Android 操作系统中,版本号可能位于名为 *软件信息* 的菜单下。
- 转到 *开发者选项* 并确保其已开启。
要通过 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_ID 和 PRODUCT_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 backup 和 adb 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 设备之间同步文件的工具。
- adbfs-rootless-git — 挂载通过 USB 连接的 Android 设备。
- adbmanager-bin — 该程序旨在可视化且轻松地管理 adb 服务器和 Android 智能手机的连接。它允许您监控 adb 服务的状态,管理它,并控制已连接设备的列表。它允许您管理您的智能手机:按部分名称搜索已安装的软件包,安装、删除 APK,截屏,重启(正常、引导加载程序、恢复模式)和关闭设备。对于高级用户,有一个 Android Shell 终端和 SD 卡文件管理器。
- androidscreencast-bin — 通过 adb 在 PC 上查看和控制您的 Android 设备。
- logcat-color3 — 一个丰富多彩且高度可配置的标准
adb logcat命令的替代品。
- qtscrcpy — Android 实时显示控制软件。
- scrcpy — 显示和控制您的 Android 设备。
故障排除
设备列表为空
您的设备未显示出来的可能原因
- 未在设备上启用 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 services 或 adb 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。
如果您想通过脚本自动连接,请考虑 此 gist。