Android 调试桥 (adb
) 是一款通用的命令行工具,可让您与设备通信。 adb
命令可促进各种设备操作,例如安装和调试应用程序。 adb
提供对 Unix shell 的访问权限,您可以使用该 shell 在设备上运行各种命令。它是一个客户端-服务器程序,包括三个组件
- 客户端,发送命令。客户端在您的开发机器上运行。您可以通过在命令行终端中发出
adb
命令来调用客户端。 - 守护进程 (adbd),在设备上运行命令。守护进程在每个设备上作为后台进程运行。
- 服务器,管理客户端和守护进程之间的通信。服务器在您的开发机器上作为后台进程运行。
adb
包含在 Android SDK 平台工具包中。使用 SDK Manager 下载此软件包,该软件包会将其安装在 android_sdk/platform-tools/
中。如果您想要独立的 Android SDK 平台工具包,请在此处下载。
有关通过 adb
连接设备以供使用的信息(包括如何使用连接助手解决常见问题),请参阅 在硬件设备上运行应用程序。
adb 的工作原理
当您启动 adb
客户端时,客户端首先检查是否已在运行 adb
服务器进程。如果尚未运行,则会启动服务器进程。服务器启动后,它会绑定到本地 TCP 端口 5037 并监听从 adb
客户端发送的命令。
注意: 所有 adb
客户端都使用端口 5037 与 adb
服务器通信。
然后,服务器会建立与所有正在运行的设备的连接。它通过扫描 5555 到 5585 之间的奇数端口来查找模拟器,这是前 16 个模拟器使用的端口范围。如果服务器在某个端口找到了 adb
守护进程 (adbd),它会建立与该端口的连接。
每个模拟器都使用一对连续的端口 - 一个偶数端口用于控制台连接,一个奇数端口用于 adb
连接。例如
模拟器 1,控制台:5554
模拟器 1,adb
:5555
模拟器 2,控制台:5556
模拟器 2,adb
:5557
等等。
如上所示,连接到 adb
端口 5555 的模拟器与控制台监听端口 5554 的模拟器相同。
服务器建立与所有设备的连接后,您可以使用 adb
命令访问这些设备。由于服务器会管理与设备的连接并处理来自多个 adb
客户端的命令,因此您可以从任何客户端或脚本控制任何设备。
在您的设备上启用 adb 调试
要将 adb 与通过 USB 连接的设备一起使用,您必须在设备系统设置中的 开发者选项 下启用 USB 调试。在 Android 4.2(API 级别 17)及更高版本中,开发者选项 屏幕默认情况下处于隐藏状态。要使其可见,启用开发者选项。
您现在可以使用 USB 连接您的设备。您可以通过在 android_sdk/platform-tools/
目录中执行 adb devices
来验证您的设备是否已连接。如果已连接,您将看到设备名称被列为“设备”。
注意: 当您连接运行 Android 4.2.2(API 级别 17)或更高版本的设备时,系统会显示一个对话框,询问您是否接受允许通过这台计算机进行调试的 RSA 密钥。此安全机制可以保护用户设备,因为它可以确保只有当您能够解锁设备并确认对话框时,才能执行 USB 调试和其他 adb 命令。
有关通过 USB 连接到设备的更多信息,请阅读 在硬件设备上运行应用程序。
通过 Wi-Fi 连接到设备
注意: 以下说明不适用于运行 Android 11(API 级别 30)的 Wear 设备。有关更多信息,请参阅 调试 Wear OS 应用程序 的指南。
Android 11(API 级别 30)及更高版本支持使用 Android 调试桥 (adb) 从您的工作站无线部署和调试您的应用程序。例如,您可以将可调试的应用程序部署到多个远程设备,而无需通过 USB 物理连接您的设备。这消除了处理常见 USB 连接问题的必要,例如驱动程序安装。
在开始使用无线调试之前,请执行以下操作
-
确保您的工作站和设备连接到同一个无线网络。
-
确保您的设备运行的是 Android 11(API 级别 30)或更高版本(适用于手机),或 Android 13(API 级别 33)或更高版本(适用于电视和 WearOS)。有关更多信息,请参阅 查看并更新您的 Android 版本。
-
如果使用 IDE,请确保已安装最新版本的 Android Studio。您可以 在这里 下载。
-
在您的工作站上,更新到最新版本的 SDK 平台工具。
要使用无线调试,您必须使用 QR 码或配对码将您的设备与工作站配对。您的工作站和设备必须连接到同一个无线网络。要连接到您的设备,请执行以下步骤
-
打开 Android Studio,并从运行配置菜单中选择“使用 Wi-Fi 配对设备”。
将弹出“通过 Wi-Fi 配对设备”窗口,如图 2 所示。
-
在您的设备上,点按“无线调试”并配对您的设备
-
要使用 QR 码配对您的设备,请选择“使用 QR 码配对设备”,并扫描从图 2 所示的“通过 Wi-Fi 配对设备”弹出窗口中获得的 QR 码。
-
要使用配对码配对您的设备,从“通过 Wi-Fi 配对设备”弹出窗口中选择“使用配对码配对设备”。在您的设备上,选择“使用配对码配对”并记下提供的六位数字代码。当您的设备出现在“通过 Wi-Fi 配对设备”窗口中时,您可以选择“配对”并输入显示在您的设备上的六位数字代码。
-
-
配对您的设备后,您可以尝试将您的应用部署到您的设备。
要配对不同的设备或忘记工作站上的当前设备,请在设备上导航到“无线调试”。点按“配对的设备”下的工作站名称,然后选择“忘记”。
-
如果您想快速打开和关闭无线调试,可以使用 快速设置开发者磁贴 针对“无线调试”,位于“开发者选项”>“快速设置开发者磁贴”。
使用命令行进行 Wi-Fi 连接
或者,要使用命令行连接到您的设备而无需 Android Studio,请执行以下步骤
-
在您的设备上启用开发者选项,如前所述。
-
在您的设备上启用“无线调试”,如前所述。
-
在您的工作站上,打开一个终端窗口并导航到
android_sdk/platform-tools
。 -
通过选择“使用配对码配对设备”查找您的 IP 地址、端口号和配对码。记下显示在设备上的 IP 地址、端口号和配对码。
-
在您的工作站的终端中,运行
adb pair ipaddr:port
。使用上面的 IP 地址和端口号。 -
出现提示时,输入配对码,如下所示。
解决无线连接问题
如果您在无线连接到您的设备时遇到问题,请尝试以下故障排除步骤来解决问题。
检查您的工作站和设备是否满足先决条件
检查工作站和设备是否满足 本节开头 列出的先决条件。
检查其他已知问题
以下是无线调试(使用 adb 或 Android Studio)的当前已知问题及其解决方法列表
-
Wi-Fi 未连接:安全 Wi-Fi 网络(如公司 Wi-Fi 网络)可能会阻止 P2P 连接,并阻止您通过 Wi-Fi 连接。尝试使用电缆或其他(非公司)Wi-Fi 网络进行连接。使用
adb connect ip:port
通过 tcp/ip 进行无线连接(在初始 USB 连接之后)是另一种选择,如果使用非公司网络是一个选择。 -
adb
通过 Wi-Fi 有时会自动关闭:如果设备切换 Wi-Fi 网络或断开网络连接,则可能会发生这种情况。要解决此问题,请重新连接到网络。 -
配对成功后设备未连接:
adb
依赖于 mDNS 来发现并自动连接到配对的设备。如果您的网络或设备配置不支持 mDNS 或已禁用 mDNS,那么您需要使用adb connect ip:port
手动连接到设备。
在初始 USB 连接后,无线连接到设备(仅适用于 Android 10 及更低版本)
注意:此工作流程也适用于 Android 11(及更高版本),但需要注意的是,它也涉及通过物理 USB 进行*初始*连接。
注意:以下说明不适用于运行 Android 10(API 级别 29)或更低版本的 Wear 设备。有关更多信息,请参阅有关 调试 Wear OS 应用 的指南。
adb
通常通过 USB 与设备通信,但您也可以通过 Wi-Fi 使用 adb
。要连接运行 Android 10(API 级别 29)或更低版本的设备,请通过 USB 执行以下初始步骤
- 将您的 Android 设备和
adb
主机计算机连接到一个公共 Wi-Fi 网络。 - 使用 USB 线缆将设备连接到主机计算机。
- 将目标设备设置为侦听端口 5555 上的 TCP/IP 连接
adb tcpip 5555
- 从目标设备断开 USB 线缆。
- 查找 Android 设备的 IP 地址。例如,在 Nexus 设备上,您可以在设置>关于平板电脑(或关于手机)>状态>IP 地址处找到 IP 地址。
- 通过其 IP 地址连接到设备
adb connect device_ip_address:5555
- 确认您的主机计算机已连接到目标设备
$ adb devices List of devices attached device_ip_address:5555 device
注意:请注意,并非所有接入点都适合。您可能需要使用防火墙配置正确的接入点来支持 adb
。
您的设备现在已连接到 adb
。
如果 adb
与您的设备的连接断开
- 确保您的主机仍然连接到与您的 Android 设备相同的 Wi-Fi 网络。
- 通过再次执行
adb connect
步骤重新连接。 - 如果这不起作用,请重置您的
adb
主机adb kill-server
然后从头开始。
查询设备
在发出 adb
命令之前,了解哪些设备实例连接到 adb
服务器非常有用。使用 devices
命令生成已连接设备的列表
adb devices -l
作为响应,adb
为每个设备打印以下状态信息
- 序列号:
adb
创建一个字符串,通过其端口号唯一标识设备。以下是一个序列号示例:emulator-5554
- 状态:设备的连接状态可以是以下之一
offline
:设备未连接到adb
或无响应。device
:设备已连接到adb
服务器。请注意,此状态并不意味着 Android 系统已完全启动并处于运行状态,因为设备在系统启动时仍然连接到adb
。启动后,这是设备的正常运行状态。no device
:没有连接设备。
- 描述:如果包含
-l
选项,则devices
命令会告诉您设备是什么。当您连接多个设备时,此信息非常有用,这样您就可以区分它们。
以下示例显示了 devices
命令及其输出。有三个设备正在运行。列表中的前两行是模拟器,第三行是连接到计算机的硬件设备。
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
未列出模拟器
adb devices
命令有一个极端情况的命令序列,会导致正在运行的模拟器在 adb devices
输出中不显示,即使模拟器在您的桌面上可见。当满足以下所有条件时,就会发生这种情况
adb
服务器未运行。- 您使用
emulator
命令并使用-port
或-ports
选项,端口值为 5554 到 5584 之间的奇数。 - 您选择的奇数端口未被占用,因此可以在指定的端口号上建立端口连接——或者,如果端口被占用,则模拟器会切换到另一个满足 2 中要求的端口。
- 您在启动模拟器后启动
adb
服务器。
避免这种情况的一种方法是让模拟器选择自己的端口,并且一次运行不超过 16 个模拟器。另一种方法是在使用 emulator
命令之前,始终启动 adb
服务器,如以下示例中所述。
示例 1:在以下命令序列中,adb devices
命令启动 adb
服务器,但设备列表不会显示。
停止 adb
服务器,并按显示的顺序输入以下命令。对于 AVD 名称,请提供您系统中有效的 AVD 名称。要获取 AVD 名称列表,请键入 emulator -list-avds
。emulator
命令位于 android_sdk/tools
目录中。
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
示例 2:在以下命令序列中,adb devices
显示设备列表,因为 adb
服务器是先启动的。
要在 adb devices
输出中看到模拟器,请停止 adb
服务器,然后在使用 emulator
命令之后,但在使用 adb devices
命令之前,再次启动 adb
服务器,如下所示
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
有关模拟器命令行选项的更多信息,请参阅 命令行启动选项。
向特定设备发送命令
如果多个设备正在运行,则在发出 adb
命令时,您必须指定目标设备。要指定目标,请执行以下步骤
- 使用
devices
命令获取目标的序列号。 - 获取序列号后,使用
-s
选项与adb
命令一起使用来指定序列号。- 如果您要执行很多
adb
命令,可以设置$ANDROID_SERIAL
环境变量来包含序列号。 - 如果您同时使用
-s
和$ANDROID_SERIAL
,-s
将覆盖$ANDROID_SERIAL
。
- 如果您要执行很多
在以下示例中,将获取已连接设备的列表,然后使用其中一台设备的序列号将 helloWorld.apk
安装到该设备上
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
注意:如果在有多个设备可用时未指定目标设备就发出命令,adb
会显示错误“adb: more than one device/emulator”。
如果您有多个设备可用,但只有一个是模拟器,请使用 -e
选项将命令发送到模拟器。如果有多个设备,但只有一个硬件设备连接,请使用 -d
选项将命令发送到硬件设备。
安装应用程序
您可以使用 adb
将 APK 安装到模拟器或已连接的设备上,方法是使用 install
命令
adb install path_to_apk
安装测试 APK 时,必须将 -t
选项与 install
命令一起使用。有关更多信息,请参阅 -t
。
要安装多个 APK,请使用 install-multiple
。如果您从 Play Console 下载了适用于特定设备的应用程序的所有 APK,并且想要将它们安装到模拟器或物理设备上,这将很有用。
有关如何创建可以在模拟器/设备实例上安装的 APK 文件的更多信息,请参阅 构建并运行您的应用程序。
注意:如果您使用的是 Android Studio,则无需直接使用 adb
将您的应用程序安装到模拟器或设备上。相反,Android Studio 会为您处理应用程序的打包和安装。
设置端口转发
使用 forward
命令设置任意端口转发,该命令将特定主机端口上的请求转发到设备上的另一个端口。以下示例设置了将主机端口 6100 转发到设备端口 7100
adb forward tcp:6100 tcp:7100
以下示例设置了将主机端口 6100 转发到 local:logd
adb forward tcp:6100 local:logd
如果您尝试确定发送到设备上某个特定端口的内容,这可能会有用。所有接收到的数据都将写入系统日志守护程序并在设备日志中显示。
将文件复制到设备或从设备复制文件
使用 pull
和 push
命令将文件复制到设备或从设备复制文件。与 install
命令不同,install
命令仅将 APK 文件复制到特定位置,pull
和 push
命令允许您将任意目录和文件复制到设备中的任何位置。
要从设备复制文件或目录及其子目录,请执行以下操作
adb pull remote local
要到设备复制文件或目录及其子目录,请执行以下操作
adb push local remote
将 local
和 remote
替换为您在开发机器(本地)和设备(远程)上的目标文件/目录的路径。例如
adb push myfile.txt /sdcard/myfile.txt
停止 adb 服务器
在某些情况下,您可能需要终止 adb
服务器进程,然后重新启动它来解决问题。例如,如果 adb
未响应命令,则可能是这种情况。
要停止 adb
服务器,请使用 adb kill-server
命令。然后,您可以通过发出任何其他 adb
命令来重新启动服务器。
发出 adb 命令
使用以下方法从开发机器上的命令行或从脚本发出 adb
命令
adb [-d | -e | -s serial_number] command
如果只有一个模拟器正在运行或只有一个设备已连接,则默认情况下 adb
命令将发送到该设备。如果有多个模拟器正在运行和/或多个设备已连接,则需要使用 -d
、-e
或 -s
选项来指定应将命令定向到的目标设备。
您可以使用以下命令查看所有支持的 adb
命令的详细列表
adb --help
发出 shell 命令
您可以使用 shell
命令通过 adb
发出设备命令或启动交互式 shell。要发出单个命令,请使用类似于此的 shell
命令
adb [-d |-e | -s serial_number] shell shell_command
要在设备上启动交互式 shell,请使用类似于此的 shell
命令
adb [-d | -e | -s serial_number] shell
要退出交互式 shell,请按 Control+D
或键入 exit
。
Android 提供了大多数常见的 Unix 命令行工具。要查看可用工具的列表,请使用以下命令
adb shell ls /system/bin
大多数命令都可通过 --help
参数获得帮助。许多 shell 命令由 toybox 提供。所有 toybox 命令的通用帮助可通过 toybox --help
获得。
使用 Android Platform Tools 23 及更高版本,adb
处理参数的方式与 ssh(1)
命令相同。此更改已修复了与 命令注入 相关的许多问题,并且使得能够安全地执行包含 shell 元字符 的命令,例如 adb install Let\'sGo.apk
。此更改意味着包含 shell 元字符的任何命令的解释也已更改。
例如,adb shell setprop key 'two words'
现在是错误的,因为引号被本地 shell 吞并,设备看到的是 adb shell setprop key two words
。要使命令正常工作,请引用两次,一次用于本地 shell,一次用于远程 shell,就像使用 ssh(1)
一样。例如,adb shell setprop key "'two words'"
可以正常工作,因为本地 shell 接受外层引号,而设备仍然看到内层引号:setprop key 'two words'
。转义也是一种选择,但引用两次通常更容易。
另请参阅 Logcat 命令行工具,该工具对于监视系统日志非常有用。
调用活动管理器
在 adb
shell 中,您可以使用活动管理器 (am
) 工具发出命令来执行各种系统操作,例如启动活动、强制停止进程、广播意图、修改设备屏幕属性等等。
在 shell 中,am
语法为
am command
您也可以直接从 adb
发出活动管理器命令,而无需进入远程 shell。例如
adb shell am start -a android.intent.action.VIEW
命令 | 描述 |
---|---|
start [options] intent
|
启动由 intent 指定的 Activity 。请参阅 意图参数规范。 选项为
|
startservice [options] intent |
启动由 intent 指定的 Service 。请参阅 意图参数规范。 选项为
|
force-stop package |
强制停止与 package 关联的所有内容。 |
kill [options] package |
杀死与 package 关联的所有进程。此命令仅杀死可以安全杀死的进程,并且不会影响用户体验。选项为
|
kill-all |
杀死所有后台进程。 |
broadcast [options] intent |
发出广播意图。 请参阅 意图参数规范。 选项为
|
instrument [options] component |
使用 Instrumentation 实例开始监控。通常,目标 component 的形式为 test_package/runner_class 。选项为
|
profile start process file |
在 process 上启动性能分析器,将结果写入 file 。 |
profile stop process |
停止 process 上的性能分析器。 |
dumpheap [options] process file |
转储 process 的堆,写入 file 。选项为
|
set-debug-app [options] package |
将应用程序 package 设置为调试对象。选项为
|
clear-debug-app |
清除之前使用 set-debug-app 设置的用于调试的包。 |
monitor [options] |
开始监控崩溃或 ANR。 选项为
|
screen-compat {on | off} package |
控制 屏幕兼容性 package 的模式。 |
display-size [reset | widthxheight] |
覆盖设备显示大小。此命令对于通过使用具有大屏幕的设备模拟小屏幕分辨率来跨不同屏幕尺寸测试您的应用程序非常有用,反之亦然。 示例 |
display-density dpi |
覆盖设备显示密度。此命令对于通过使用低密度屏幕模拟高密度屏幕环境来跨不同屏幕密度测试您的应用程序非常有用,反之亦然。 示例 |
to-uri intent |
以 URI 格式打印给定的意图规范。 请参阅 意图参数规范。 |
to-intent-uri intent |
以 intent: URI 格式打印给定的意图规范。请参阅 意图参数规范。 |
意图参数规范
对于需要 intent
参数的活动管理器命令,您可以使用以下选项指定意图
调用包管理器 (pm
)
在 adb
shell 中,您可以使用包管理器 (pm
) 工具发出命令来对设备上安装的应用程序包执行操作和查询。
在 shell 中,pm
语法为
pm command
您也可以直接从 adb
发出包管理器命令,而无需进入远程 shell。例如
adb shell pm uninstall com.example.MyApp
命令 | 描述 |
---|---|
list packages [options] filter |
打印所有包,可选地仅打印包名称包含 filter 中文本的包。选项
|
list permission-groups |
打印所有已知的权限组。 |
list permissions [options] group |
打印所有已知的权限,可选地仅打印在 group 中的权限。选项
|
list instrumentation [options] |
列出所有测试包。 选项
|
list features |
打印系统的所有功能。 |
list libraries |
打印当前设备支持的所有库。 |
list users |
打印系统上的所有用户。 |
path package |
打印给定package 的 APK 的路径。 |
install [options] path |
将由path 指定的包安装到系统中。选项
|
uninstall [options] package |
从系统中删除一个包。 选项
|
clear package |
删除与包关联的所有数据。 |
enable package_or_component |
启用给定的包或组件(以“package/class”形式编写)。 |
disable package_or_component |
禁用给定的包或组件(以“package/class”形式编写)。 |
disable-user [options] package_or_component |
选项
|
grant package_name permission |
授予应用权限。在运行 Android 6.0(API 级别 23)或更高版本的设备上,该权限可以是应用清单中声明的任何权限。在运行 Android 5.1(API 级别 22)或更低版本的设备上,该权限必须是应用定义的可选权限。 |
revoke package_name permission |
撤销应用的权限。在运行 Android 6.0(API 级别 23)或更高版本的设备上,该权限可以是应用清单中声明的任何权限。在运行 Android 5.1(API 级别 22)或更低版本的设备上,该权限必须是应用定义的可选权限。 |
set-install-location location |
更改默认安装位置。位置值
注意:这仅适用于调试。使用此方法会导致应用出现故障和其他不良行为。 |
get-install-location |
返回当前安装位置。返回值
|
set-permission-enforced permission [true | false] |
指定是否应强制执行给定权限。 |
trim-caches desired_free_space |
修剪缓存文件以达到给定的可用空间。 |
create-user user_name |
使用给定的user_name 创建一个新用户,打印该用户的新的用户标识符。 |
remove-user user_id |
删除具有给定user_id 的用户,删除与该用户关联的所有数据 |
get-max-users |
打印设备支持的最大用户数。 |
get-app-links [options] [package]
|
打印给定package的域验证状态,或者在未指定的情况下打印所有包的域验证状态。状态代码定义如下
选项为
|
reset-app-links [options] [package]
|
重置给定包的域验证状态,或者在未指定的情况下重置所有包的域验证状态。
选项为
|
verify-app-links [--re-verify] [package]
|
为给定的package广播验证请求,或者在未指定的情况下为所有包广播验证请求。仅在包之前未记录响应时才发送。
|
set-app-links [--package package] state domains
|
手动设置包的域状态。该域必须由包声明为 autoVerify,此操作才有效。此命令不会对无法应用的域报告失败。
|
set-app-links-user-selection --user user_id [--package package] enabled domains
|
手动设置包的主机用户选择的狀態。该域必须由包声明,此操作才有效。此命令不会对无法应用的域报告失败。
|
set-app-links-user-selection --user user_id [--package package] enabled domains
|
手动设置包的主机用户选择的狀態。该域必须由包声明,此操作才有效。此命令不会对无法应用的域报告失败。
|
set-app-links-allowed --user user_id [--package package] allowed
|
切换包的自动验证链接处理设置。
|
get-app-link-owners --user user_id [--package package] domains
|
打印给定用户特定域的所有者,按优先级从低到高排序。
|
调用设备策略管理器(dpm
)
为了帮助您开发和测试设备管理应用,请向设备策略管理器(dpm
)工具发出命令。使用该工具可以控制活动管理员应用或更改设备上的策略状态数据。
在 shell 中,dpm
语法为
dpm command
您也可以直接从adb
发出设备策略管理器命令,而无需进入远程 shell
adb shell dpm command
命令 | 描述 |
---|---|
set-active-admin [options] component
|
将component设置为活动管理员。 选项为
|
set-profile-owner [options] component
|
将component设置为活动管理员,并将它的包设置为现有用户的配置文件所有者。 选项为
|
set-device-owner [options] component
|
将component设置为活动管理员,并将它的包设置为设备所有者。 选项为
|
移除活动管理员 [选项] 组件
|
禁用活动管理员。应用程序必须在清单中声明 android:testOnly 。此命令还会移除设备和配置文件所有者。选项为
|
清除冻结期限记录
|
清除设备先前为系统 OTA 更新设置的冻结期限记录。这对于避免设备在开发管理冻结期限的应用程序时出现调度限制很有用。参见 管理系统更新。 支持运行 Android 9.0(API 级别 28)及更高版本的设备。 |
强制网络日志
|
强制系统使任何现有的网络日志可供 DPC 检索。如果有连接或 DNS 日志可用,DPC 将收到 onNetworkLogsAvailable() 回调。参见 网络活动日志记录。此命令有速率限制。支持运行 Android 9.0(API 级别 28)及更高版本的设备。 |
强制安全日志
|
强制系统使任何现有的安全日志可供 DPC 使用。如果有日志可用,DPC 将收到 onSecurityLogsAvailable() 回调。参见 记录企业设备活动。此命令有速率限制。支持运行 Android 9.0(API 级别 28)及更高版本的设备。 |
截屏
screencap
命令是一个 shell 实用程序,用于截取设备显示屏的屏幕截图。
在 shell 中,screencap
语法为
screencap filename
要从命令行使用 screencap
,请输入以下内容
adb shell screencap /sdcard/screen.png
以下是一个屏幕截图会话示例,使用 adb
shell 捕获屏幕截图,并使用 pull
命令从设备下载文件
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
录制视频
screenrecord
命令是一个 shell 实用程序,用于录制运行 Android 4.4(API 级别 19)及更高版本的设备的显示屏。该实用程序将屏幕活动录制到 MPEG-4 文件中。您可以使用此文件创建宣传或培训视频,或用于调试和测试。
在 shell 中,使用以下语法
screenrecord [options] filename
要从命令行使用 screenrecord
,请输入以下内容
adb shell screenrecord /sdcard/demo.mp4
按 Control+C 停止屏幕录制。否则,录制会在三分钟或由 --time-limit
设置的时间限制后自动停止。
要开始录制您的设备屏幕,请运行 screenrecord
命令录制视频。然后,运行 pull
命令将视频从设备下载到主机计算机。以下是一个录制会话示例
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
screenrecord
实用程序可以在您请求的任何支持的分辨率和比特率下录制,同时保留设备显示屏的纵横比。该实用程序默认以本机显示分辨率和方向录制,最大长度为三分钟。
screenrecord
实用程序的限制
- 视频文件不包含音频。
- 运行 Wear OS 的设备不支持视频录制。
- 某些设备可能无法以其本机显示分辨率录制。如果您在屏幕录制时遇到问题,请尝试使用较低的分辨率。
- 录制过程中不支持屏幕旋转。如果屏幕在录制过程中旋转,则录制中会剪掉部分屏幕。
选项 | 描述 |
---|---|
--help
|
显示命令语法和选项 |
--size 宽度x高度
|
设置视频大小:1280x720 。默认值为设备的本机显示分辨率(如果支持),否则为 1280x720。为获得最佳效果,请使用设备的先进视频编码 (AVC) 编码器支持的大小。 |
--bit-rate 速率 |
设置视频的视频比特率,单位为兆比特每秒。默认值为 20Mbps。您可以增加比特率以提高视频质量,但这会导致电影文件更大。以下示例将录制比特率设置为 6Mbpsscreenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit 时间 |
设置最大录制时间,单位为秒。默认值和最大值为 180(3 分钟)。 |
--rotate |
将输出旋转 90 度。此功能尚处于实验阶段。 |
--verbose |
在命令行屏幕上显示日志信息。如果您没有设置此选项,该实用程序在运行时不会显示任何信息。 |
读取应用程序的 ART 配置文件
从 Android 7.0(API 级别 24)开始,Android 运行时 (ART) 会为已安装的应用程序收集执行配置文件,这些配置文件用于优化应用程序性能。检查收集的配置文件以了解哪些方法经常执行以及哪些类在应用程序启动时使用。
注意:只有在您对文件系统具有 root 访问权限的情况下,才能检索执行配置文件文件名,例如在模拟器上。
要生成配置文件信息的文本形式,请使用以下命令
adb shell cmd package dump-profiles package
要检索生成的文件,请使用
adb pull /data/misc/profman/package.prof.txt
重置测试设备
如果您在多个测试设备上测试您的应用程序,在测试之间重置您的设备可能很有用,例如删除用户数据并重置测试环境。您可以使用 testharness
adb
shell 命令对运行 Android 10(API 级别 29)或更高版本的测试设备执行恢复出厂设置,如以下所示
adb shell cmd testharness enable
使用 testharness
恢复设备时,设备会自动备份允许通过当前工作站进行调试的 RSA 密钥,将其保存在持久位置。也就是说,重置设备后,工作站可以继续调试并向设备发出 adb
命令,而无需手动注册新密钥。
此外,为了使您的应用程序更容易更安全地进行测试,使用 testharness
恢复设备还会更改以下设备设置
- 设备会设置某些系统设置,以便不会出现初始设备设置向导。也就是说,设备将进入可以快速安装、调试和测试应用程序的状态。
- 设置
- 禁用锁定屏幕。
- 禁用紧急警报。
- 禁用帐户的自动同步。
- 禁用自动系统更新。
- 其他
- 禁用预安装的安全应用程序。
如果您的应用程序需要检测并适应 testharness
命令的默认设置,请使用 ActivityManager.isRunningInUserTestHarness()
。
sqlite
sqlite3
启动 sqlite
命令行程序,用于检查 SQLite 数据库。它包含命令,例如 .dump
用于打印表的內容,以及 .schema
用于打印现有表的 SQL CREATE
语句。您还可以从命令行执行 SQLite 命令,如以下所示
$ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions
注意:只有在您对文件系统具有 root 访问权限的情况下,才能访问 SQLite 数据库,例如在模拟器上。
有关更多信息,请参阅 sqlite3
命令行文档。
adb USB 后端
adb 服务器可以通过两个后端与 USB 堆栈交互。它可以使用操作系统的本机后端(Windows、Linux 或 macOS),也可以使用 libusb
后端。某些功能,例如 attach
、detach
和 USB 速度检测,仅在使用 libusb
后端时可用。
您可以使用 ADB_LIBUSB
环境变量选择后端。如果未设置,adb 使用其默认后端。默认行为在操作系统之间有所不同。从 ADB v34 开始,liubusb
后端在所有操作系统(Windows 除外)上默认使用,Windows 上默认使用本机后端。如果设置了 ADB_LIBUSB
,它将确定使用本机后端还是 libusb
。有关 adb 环境变量的更多信息,请参阅 adb 手册页。
adb mDNS 后端
ADB 可以使用多播 DNS 协议自动连接服务器和设备。ADB 服务器附带两个后端,Bonjour(Apple 的 mdnsResponder)和 Openscreen。
Bonjour 后端需要主机上运行一个守护程序。在 macOS 上,Apple 的内置守护程序始终运行,但在 Windows 和 Linux 上,用户必须确保 mdnsd
守护程序已启动并正在运行。如果命令 adb mdns check
返回错误,则可能是 ADB 正在使用 Bonjour 后端,但没有运行 Bonjour 守护程序。
Openscreen 后端不需要主机上运行守护程序。对 macOS 上 Openscreen 后端的支持从 ADB v35 开始。Windows 和 Linux 从 ADB v34 开始支持。
默认情况下,ADB 使用 Bonjour 后端。可以使用环境变量 ADB_MDNS_OPENSCREEN
(设置为 1
或 0
)更改此行为。有关更多详细信息,请参阅 ADB 手册页。