Android调试桥
Android 调试桥
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 调试
Developer options 下)。
要在通过 USB 连接的设备上使⽤ adb,您必须在设备系统设置中启⽤ USB debugging
USB debugging(位于 Developer options
Settings >
在运⾏ Android 4.2 及更⾼版本的设备上,Developer options 屏幕默认情况下处于隐藏状态。如需将其显⽰出来,请转到 Settings >
Developer options。
Build number 七次。返回上⼀屏幕,在底部可以到 Developer options
About phone 并点按 Build number
About phone
在某些设备上,Developer options 屏幕所在的位置或命名⽅式可能有所不同。
现在,您可以将设备与 USB 连接。可以从 android_sdk/platform-tools/ ⽬录执⾏ adb devices 来验证设备是否连接。如果已连接,您将看到设备名称以“设备”形式列⽰。
注:当您连接运⾏ Android 4.2.2 或更⾼版本的设备时,系统将显⽰⼀个对话框,询问您是否接受允许在这台计算机上调试的 RSA 密钥。这种安全机制可以保护⽤户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执⾏ USB 调试和其他 ADB 命令。
如需了解有关通过 USB 连接到设备的详细信息,请参阅在硬件设备上运⾏应⽤。
通过 WLAN 连接到设备
⼀般情况下,通过 USB 使⽤ adb。不过,也可以按照下⾯的说明通过 WLAN 使⽤它。
将 Android 设备和 adb 主计算机连接到这两者都可以访问的常⽤ WLAN ⽹络。请注意,并⾮所有访问点均适⽤;您可能需要使⽤已正确配置防⽕墙的访问点以⽀持 adb 的访问点。
注:如果您尝试连接到 Android Wear 设备,则通过关闭与其连接的⼿机的蓝⽛强制将它连接到 WLAN。
注:
使⽤ USB 电缆将设备连接到主计算机。
设置⽬标设备以侦听端⼝ 5555 上的 TCP/IP 连接。
$ adb tcpip 5555
从⽬标设备断开 USB 电缆连接。
查 Android 设备的 IP 地址。例如,在 Nexus 设备上,您可以通过访问 Settings
About phone)
About tablet(或 About phone
Settings > About tablet
Wi-Fi
Settings > Wi-Fi
> Status
IP address 查 IP 地址。或者,在 Android Wear 设备上,您可以通过访问 Settings
Status > IP address
IP address 查 IP 地址。
Advanced > IP address
Settings > Advanced
连接⾄设备,通过 IP 地址识别此设备。
$ adb connectdevice_ip_address
请确认您的主计算机已连接⾄⽬标设备:
$ adb devicesList of devices attacheddevice_ip_address:5555 device
现在,您可以开始操作了!
如果 adb 连接丢失:
请确保您的主机仍与您的 Android 设备连接到同⼀个 WLAN ⽹络。
通过再次执⾏ adb connect 步骤重新连接。
如果⽆法连接,则重置 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 attachedserial_numberstate
以下⽰例向您展⽰了 devices 命令及其输出:
adb devicesList of devices attachedemulator-5554 deviceemulator-5556 deviceemulator-5558 device
将命令发送⾄特定设备
如果多个模拟器/设备实例正在运⾏,在发出 adb 命令时您必须指定⼀个⽬标实例。为此,请在命令中使⽤ -s 选项。以下是 -s 选项的⽤法:
adb -sserial_numbercommand
如上所⽰,您使⽤由 adb 分配的序列号为命令指定⽬标实例。您可使⽤ devices 命令获取正在运⾏的模拟器/设备实例的序列号。例如:
adb -s emulator-5556 install helloWorld.apk
注意,如果在多个设备可⽤时您未指定⽬标模拟器/设备实例就发出命令,那么 adb 将⽣成⼀个错误。
如果您有多个设备可⽤(硬件或模拟设备),但只有⼀个设备是模拟器,则使⽤ -e 选项将命令发送⾄该模拟器。同样,如果有多个设备,但只连接了⼀个硬件设备,则使⽤ -d 选项将命令发送⾄该硬件设备。
安装应⽤
您可以使⽤ adb 从开发计算机复制应⽤,并将其安装到模拟器/设备实例上。为此,请使⽤ install 命令。使⽤此命令,您必须指定您要安装的APK ⽂件的路径:
adb installpath_to_apk
android模拟点击如需有关如何创建可在模拟器/设备实例上安装的 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 pullremotelocal
要将⽂件⽂件或⽬录(及其⼦⽬录)复制到模拟器或设备,请使⽤
adb pushlocalremote
在上述命令中,local 和 remote 指的是开发计算机(本地)和模拟器/设备实例(远程)上⽬标⽂件/⽬
录的路径。例如:
adb /
停⽌ adb 服务器
在某些情况下,您可能需要终⽌ adb 服务器进程,然后重启它以解决问题(例如,如果 adb 不响应命令)。
要停⽌ adb 服务器,请使⽤ adb kill-server 命令。然后,您可以通过发出任意其他 adb 命令重启服务器。
adb 命令参考
您可以在开发计算机上从命令⾏发出 adb 命令,或通过脚本发出。⽤法如下:
adb [-d|-e|-sserial_number]command
如果只有⼀个模拟器在运⾏或只连接了⼀个设备,则默认情况下将 adb 命令发送⾄该设备。如果有多个模拟器在运⾏和/或连接了多个设备,您需要使⽤ -d、-e 或 -s 选项指定应向其发送命令的⽬标设备。
下表列出了所有⽀持的 adb 命令并解释其含义和⽤法。
表 1. 可⽤的 adb 命令
表 1.
类别命令说明注释
⽬标设备-d将 adb 命令发送⾄唯⼀连接的 USB 设备。如果连接了多个 USB 设备,将返回错误。
-e将 adb 命令发送⾄唯⼀运⾏的模拟器实例。如果有多个模拟器实例在运⾏,将返回错误。
-s serial_number将 adb 命令发送⾄以其 adb 分配的序列号命名的特定模拟器/设备实例(如“emulator-5556”)。请参阅将命令发送⾄特定模拟器/设备实例。
常规devices输出所有连接的模拟器/设备实例的列表。如需了解详细信息,请参阅查询模拟器/设备实例。
help输出⽀持的 adb 命令的列表。
version输出 adb 版本号。
调试logcat [option] [filter-specs]将⽇志数据输出到屏幕。
bugreport将 dumpsys、dumpstate 和 logcat 数据输出到屏幕,以⽤于报告错误。
jdwp输出给定设备上可⽤的 JDWP 进程的列表。您可以使⽤ forward jdwp:pid 端⼝转发规范以连接到特定的 JDWP 进程。例如:
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
数据install path_to_apk将 Android 应⽤(使⽤ APK ⽂件的完整路径表⽰)推送到模拟器/设备。
pull remote local从模拟器/设备实例将指定⽂件复制到开发计算机。
push local remote从开发计算机将指定⽂件复制到模拟器/设备实例。
端⼝和⽹络连接forward local remote将来⾃指定本地端⼝的套接字连接转发到模拟器/设备实例上的指定远程端⼝。端⼝规范可使⽤以下架构:
tcp:port_number
local:unix_domain_socket_name
dev:character_device_name
jdwp:pid
ppp tty[parm]...通过 USB 运⾏ PPP。
tty — ⽤于 PPP 流的 tty。例如,dev:/dev/omap_csmi_ttyl。
[parm]... — 零个或多个 PPP/PPPD 选项,如 defaultroute、local、notty等。
请注意,不得⾃动启动 PPP 连接。
脚本get-serialno输出 adb 实例序列号字符串。如需了解详细信息,请参阅查询模拟器/设备实例。
get-state输出模拟器/设备实例的 adb 状态。
wait-for-device阻⽌执⾏,直⾄设备处于在线状态,即直⾄此实例状态为 device。您可以将此命令附加到其他 adb 命令,在此情况下,adb 在发出其他命令前将处于等待状态,直⾄模拟器/设备实例已连接。下⾯是⼀个⽰例:
adb wait-for-device shell getprop
请注意,此命令不会使 adb 等待整个系统已完全启动。因此,您不应将其追加到需要系统完全启动的其他命令。例如,install 需要使⽤
Android 软件包管理器,其仅在系统完全启动后才可⽤。如下命令
adb wait-for-device install app.apk
在模拟器或设备实例连接到 adb 服务器时⽴即发出 install 命令,但 Android 系统还未完全启动,因此,它将引发错误。
服务器start-server检查 adb 服务器进程是否在运⾏,如果未运⾏则启动它。
kill-server终⽌ adb 服务器进程。
Shellshell在⽬标模拟器/设备实例中启动远程 shell。如需了解详细信息,请参阅发出 shell 命令。
shell shell_command在⽬标模拟器/设备实例中发出 shell 命令,然后退出远程 shell。
发出 shell 命令
您可以使⽤ shell 命令通过 adb 发出设备命令,可以进⼊或不进⼊模拟器/设备实例上的 adb 远程 shell。要在不进⼊远程 shell 的情况下发出⼀个命令,请使⽤如下 shell 命令:
adb [-d|-e|-sserial_number] shellshell_command
或者,使⽤如下命令进⼊模拟器/设备实例上的远程 shell:
adb [-d|-e|-sserial_number] shell
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论