Android 调试桥 (adb) 从入门到精通


Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。它是一种客户端-服务器程序,包括以下三个组件:

  • 客户端:用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令来从命令行终端调用客户端。
  • 守护进程 (adbd):在设备上运行命令。守护进程在每个设备上作为后台进程运行。
  • 服务器:管理客户端和守护进程之间的通信。服务器在开发机器上作为后台进程运行。

adb 包含在 Android SDK 平台工具软件包中。您可以使用 SDK 管理器 下载此软件包,该管理器会将其安装在 android_sdk/platform-tools/ 下。或者,如果您需要独立的 Android SDK 平台工具软件包,可以点击此处进行下载。

要了解如何连接设备以进行 adb 通信,包括如何使用 Connection Assistant 对常见问题进行排查,请参阅在硬件设备上运行应用。

使用命令行参数。

-t。

要详细了解如何创建可安装在模拟器/设备实例上的 APK 文件,请参阅构建和运行您的应用。

请注意,如果您使用的是 Android Studio,则无需直接使用 adb 在模拟器/设备上安装您的应用。Android Studio 会为您执行应用的打包和安装操作。

toybox 提供。通过 toybox --help 可获得适用于所有 toybox 命令的常规帮助。

另请参阅 Logcat 命令行工具,该工具对监控系统日志很有用。

调用 Activity 管理器 (am)

在 adb shell 中,您可以使用 Activity 管理器 (am) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性,等等。在 shell 中,语法如下:

am command
  • 1

您也可以直接从 adb 发出 Activity 管理器命令,无需进入远程 shell。例如:

adb shell am start -a android.intent.action.VIEW
  • 1

表 2. 可用的 Activity 管理器命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

intent 参数的规范

对于采用 intent 参数的 Activity 管理器命令,您可以使用以下选项指定 intent:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

调用软件包管理器 (pm)

在 adb shell 中,您可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包执行操作和查询。在 shell 中,语法如下:

pm command
  • 1

您也可以直接从 adb 发出软件包管理器命令,无需进入远程 shell。例如:

adb shell pm uninstall com.example.MyApp
  • 1

表 3. 可用的软件包管理器命令(省略)。

调用设备政策管理器 (dpm)

为便于您开发和测试设备管理(或其他企业)应用,您可以向设备政策管理器 (dpm) 工具发出命令。使用该工具可控制活动管理应用,或更改设备上的政策状态数据。在 shell 中,语法如下:

dpm command
  • 1

您也可以直接从 adb 发出设备政策管理器命令,无需进入远程 shell:

adb shell dpm command
  • 1

表 4. 可用的设备政策管理器命令(省略)

截取屏幕截图

screencap 命令是一个用于对设备显示屏截取屏幕截图的 shell 实用程序。在 shell 中,语法如下:

screencap filename
  • 1

要从命令行使用 screencap,请输入以下命令:

adb shell screencap /sdcard/screen.png
  • 1

以下屏幕截图会话示例向您展示了如何使用 adb shell 抓取屏幕截图,以及使用 pull 命令从设备下载此文件:

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png
  • 1
  • 2
  • 3
  • 4

录制视频

screenrecord 命令是一个用于录制设备(搭载 Android 4.4(API 级别 19)及更高版本)显示屏的 shell 实用程序。该实用程序将屏幕 Activity 录制为 MPEG-4 文件。您可以使用此文件创建宣传视频或培训视频,或将其用于调试或测试。

在 shell 中,使用以下语法:

screenrecord [options] filename
  • 1

要从命令行使用 screenrecord,请输入以下命令:

adb shell screenrecord /sdcard/demo.mp4
  • 1

按 Ctrl + C 键(在 Mac 上,按 Command + 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
  • 1
  • 2
  • 3
  • 4
  • 5

screenrecord 实用程序能以您要求的任何支持的分辨率和比特率进行录制,同时保持设备显示屏的宽高比。默认情况下,该实用程序以本机显示屏分辨率和屏幕方向进行录制,时长不超过三分钟。

screenrecord 实用程序的局限性:

  • 音频不与视频文件一起录制。
  • 无法在搭载 Wear OS 的设备上录制视频。
  • 某些设备可能无法以它们的本机显示屏分辨率进行录制。如果在录制屏幕时出现问题,请尝试使用较低的屏幕分辨率。
  • 不支持在录制时旋转屏幕。如果在录制期间屏幕发生了旋转,则部分屏幕内容在录制时将被切断。
    表 5. screenrecord 选项

在这里插入图片描述

读取应用的 ART 配置文件

从 Android 7.0(API 级别 24)开始,Android Runtime (ART) 会收集已安装应用的执行配置文件,这些配置文件用于优化应用性能。您可能需要检查收集的配置文件,以了解在应用启动期间,系统频繁执行了哪些方法和使用了哪些类。

要生成文本格式的配置文件信息,请使用以下命令:

adb shell cmd package dump-profiles package
  • 1

要检索生成的文件,请使用:

adb pull /data/misc/profman/package.txt
  • 1

重置测试设备

如果您在多个测试设备上测试应用,则在两次测试之间重置设备可能很有用,例如,可以移除用户数据并重置测试环境。您可以使用 testharness adb shell 命令对搭载 Android 10(API 级别 29)或更高版本的测试设备执行恢复出厂设置,如下所示。

adb shell cmd testharness enable
  • 1

使用 testharness 恢复设备时,设备会自动将允许通过当前工作站调试设备的 RSA 密钥备份在一个持久性位置。也就是说,在重置设备后,工作站可以继续调试设备并向设备发出 adb 命令,而无需手动注册新密钥。

此外,为了帮助您更轻松且更安全地继续测试您的应用,使用 testharness 恢复设备还会更改以下设备设置:

  • 设备会设置某些系统设置,以便不会出现初始设备设置向导。也就是说,设备会进入一种状态,供您快速安装、调试和测试您的应用。
  • 设置如下:
    停用锁定屏幕
    停用紧急提醒
    停用帐户自动同步
    停用自动系统更新
  • 其他:
    停用预安装的安全应用
    如果您的应用需要检测并适应 testharness 命令的默认设置,您可以使用 ActivityManager.isRunningInUserTestHarness()

sqlite

sqlite3 可启动用于检查 sqlite 数据库的 sqlite 命令行程序。它包含用于输出表格内容的 .dump 以及用于输出现有表格的 SQL CREATE 语句的 .schema 等命令。您也可以从命令行执行 SQLite 命令,如下所示。

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions