Android 调试桥

Android调试桥(adb)是一个强大的工具,用于与Android设备或模拟器进行通信,包括安装和调试应用,以及访问设备的Unix shell。adb由客户端、后台程序和服务器组成,通过特定端口进行通信。要启用adb调试,需要在设备的开发者选项中开启USB调试。此外,adb还支持通过WLAN连接设备,只需将设备和电脑连接到同一网络,设置设备监听TCP/IP连接即可。adb提供了丰富的命令,如查询设备、安装应用、端口转发、文件传输等,是Android开发不可或缺的工具。
摘要由CSDN通过智能技术生成

Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。该工具作为一个客户端-服务器程序,包括三个组件:

  • 客户端,该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
  • 后台程序,该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。
  • 服务器,该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。

您可以在 android_sdk/platform-tools/ 中找到 adb 工具。

adb 的工作方式


启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信。

然后,服务器设置与所有运行的模拟器/设备实例的连接。它通过扫描 5555 到 5585 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。服务器一旦发现 adb 后台程序,它将设置与该端口的连接。请注意,每个模拟器/设备实例将获取一对按顺序排列的端口 — 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
以此类推...

如上所示,在端口 5555 与 adb 连接的模拟器实例与侦听端口 5554 的控制台的实例相同。

当服务器已设置与所有模拟器实例的连接后,您可以使用 adb 命令访问这些实例。由于服务器管理与模拟器/设备实例的连接,并处理来自多个 adb 客户端的命令,因此,您可以从任意客户端(或从某个脚本)控制任意模拟器/设备实例。

在您的设备上启用 adb 调试


要在通过 USB 连接的设备上使用 adb,您必须在设备系统设置中启用 USB debugging(位于 Developer options 下)。

在运行 Android 4.2 及更高版本的设备上,Developer options 屏幕默认情况下处于隐藏状态。如需将其显示出来,请转到 Settings > About phone 并点按Build number 七次。返回上一屏幕,在底部可以找到 Developer options

在某些设备上,Developer options 屏幕所在的位置或命名方式可能有所不同。

现在,您可以将设备与 USB 连接。可以从 android_sdk/platform-tools/ 目录执行 adb devices 来验证设备是否连接。如果已连接,您将看到设备名称以“设备”形式列示。

:当您连接运行 Android 4.2.2 或更高版本的设备时,系统将显示一个对话框,询问您是否接受允许在这台计算机上调试的 RSA 密钥。这种安全机制可以保护用户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执行 USB 调试和其他 ADB 命令。

如需了解有关通过 USB 连接到设备的详细信息,请参阅在硬件设备上运行应用

通过 WLAN 连接到设备


一般情况下,通过 USB 使用 adb。不过,也可以按照下面的说明通过 WLAN 使用它。

  1. 将 Android 设备和 adb 主计算机连接到这两者都可以访问的常用 WLAN 网络。请注意,并非所有访问点均适用;您可能需要使用已正确配置防火墙的访问点以支持 adb 的访问点。

    注:如果您尝试连接到 Android Wear 设备,则通过关闭与其连接的手机的蓝牙强制将它连接到 WLAN。

  2. 使用 USB 电缆将设备连接到主计算机。
  3. 设置目标设备以侦听端口 5555 上的 TCP/IP 连接。
    $ adb tcpip 5555
    
  4. 从目标设备断开 USB 电缆连接。
  5. 查找 Android 设备的 IP 地址。例如,在 Nexus 设备上,您可以通过访问 Settings > About tablet(或 About phone) > Status > IP address 查找 IP 地址。或者,在 Android Wear 设备上,您可以通过访问 Settings > Wi-Fi Settings > Advanced > IP address 查找 IP 地址。
  6. 连接至设备,通过 IP 地址识别此设备。
    $ adb connect device_ip_address
    
  7. 请确认您的主计算机已连接至目标设备:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

现在,您可以开始操作了!

如果 adb 连接丢失:

  1. 请确保您的主机仍与您的 Android 设备连接到同一个 WLAN 网络。
  2. 通过再次执行 adb connect 步骤重新连接。
  3. 如果无法连接,则重置 adb 主机:
    adb kill-server
    

    然后,从头开始操作。

查询设备


在发出 adb 命令之前,知道哪些模拟器/设备实例已连接到 adb 服务器会很有帮助。您可以使用 devices 命令生成已连接的模拟器/设备的列表:

adb devices

在响应时,adb 针对每个实例输出此状态信息:

  • 序列号 — 一个由 adb 创建的字符串,用于通过其控制台端口号唯一标识模拟器/设备实例。序列号的格式为 type-console-port。下面是一个序列号示例:emulator-5554
  • 状态 — 实例的连接状态可为下列状态之一:
    • offline — 实例未连接到 adb 或不响应。
    • device — 实例现在已连接到 adb 服务器。请注意,此状态并不表示 Android 系统已完全启动且可以运行,因为在此实例连接到 adb 时系统仍在启动。不过,在启动后,这将是模拟器/设备实例的正常运行状态。
    • no device — 未连接模拟器/设备。

输出的格式类似如下:

List of devices attached
serial_number state

以下示例向您展示了 devices 命令及其输出:

adb devices
List of devices attached
emulator-5554  device
emulator-5556  device
emulator-5558  device

将命令发送至特定设备


如果多个模拟器/设备实例正在运行,在发出 adb 命令时您必须指定一个目标实例。为此,请在命令中使用 -s 选项。以下是 -s 选项的用法:

adb -s serial_number command 

如上所示,您使用由 adb 分配的序列号为命令指定目标实例。您可使用 devices 命令获取正在运行的模拟器/设备实例的序列号。例如:

adb -s emulator-5556 install helloWorld.apk

注意,如果在多个设备可用时您未指定目标模拟器/设备实例就发出命令,那么 adb 将生成一个错误。

如果您有多个设备可用(硬件或模拟设备),但只有一个设备是模拟器,则使用 -e 选项将命令发送至该模拟器。同样,如果有多个设备,但只连接了一个硬件设备,则使用 -d 选项将命令发送至该硬件设备。

安装应用


您可以使用 adb 从开发计算机复制应用,并将其安装到模拟器/设备实例上。为此,请使用 install 命令。使用此命令,您必须指定您要安装的 APK 文件的路径:

adb install path_to_apk

如需有关如何创建可在模拟器/设备实例上安装的 APK 文件的详细信息,请参阅构建和运行您的应用

请注意,如果使用 Android Studio,则无需直接使用 adb(或 aapt)在模拟器/设备上安装您的应用。而是由 Android Studio 为您处理应用的打包和安装。

设置端口转发


您可以使用 forward 命令设置任意端口转发 — 将对特定主机端口的请求转发到模拟器/设备实例上的其他端口。下面向您介绍如何设置主机端口 6100 到模拟器/设备端口 7100 的转发:

adb forward tcp:6100 tcp:7100

您也可以使用 adb 设置传输到指定的抽象 UNIX 网域套接字的转发,如下所示:

adb forward tcp:6100 local:logd 

将文件复制到设备/从设备复制文件


您可以使用 adb 命令 pull 和 push 将文件复制到模拟器/设备实例或从其中复制文件。与 install 命令不同(其仅将 APK 文件复制到特定位置),pull和 push 命令允许您将任意目录和文件复制到模拟器/设备实例中的任意位置。

模拟器或设备复制文件或目录(及其子目录),请使用

adb pull remote local

要将文件文件或目录(及其子目录)复制模拟器或设备,请使用

adb push local remote

在上述命令中,local 和 remote 指的是开发计算机(本地)和模拟器/设备实例(远程)上目标文件/目录的路径。例如:

adb push foo.txt /sdcard/foo.txt

停止 adb 服务器


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

要停止 adb 服务器,请使用 adb kill-server 命令。然后,您可以通过发出任意其他 adb 命令重启服务器。

adb 命令参考


您可以在开发计算机上从命令行发出 adb 命令,或通过脚本发出。用法如下:

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

如果只有一个模拟器在运行或只连接了一个设备,则默认情况下将 adb 命令发送至该设备。如果有多个模拟器在运行和/或连接了多个设备,您需要使用-d-e 或 -s 选项指定应向其发送命令的目标设备。

下表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值