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