内容简介:Android 调试桥(Android Debug Bridge,简称ADB)是 Android 的一个通用命令行工具。它可以帮助PC与模拟器实例或连接的 Android 设备进行通信。它为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell 的访问。ADB是客户端-服务端模式的程序,包含三个组件:ADB工具在
Android 调试桥(Android Debug Bridge,简称ADB)是 Android 的一个通用命令行工具。它可以帮助PC与模拟器实例或连接的 Android 设备进行通信。它为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell 的访问。
工作方式
ADB是客户端-服务端模式的程序,包含三个组件:
- 客户端:该组件发送命令,在开发计算机上运行。可以通过发出 ADB 命令从命令行终端调用客户端。
- 后台程序:该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。
- 服务器:该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。
ADB工具在 sdk/platform-tools
目录下,一般都会加到环境变量中。
启动一个 ADB 客户端时,此客户端首先检查是否有已运行的 ADB 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 ADB 客户端发送的命令—所有 ADB 客户端均使用端口 5037 与 ADB 服务器通信。
然后,服务器设置与所有运行的模拟器/设备实例的连接。它通过扫描 5555 到 5585 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。服务器一旦发现 ADB 后台程序,它将设置与该端口的连接。请注意,每个模拟器/设备实例将获取一对按顺序排列的端口,用于控制台连接的偶数号端口和用于 ADB 连接的奇数号端口。
如上所示,在端口 5555 与 ADB 连接的模拟器实例与侦听端口 5554 的控制台的实例相同。
当服务器已设置与所有模拟器实例的连接后,就可以使用 ADB 命令访问这些实例。由于服务器管理与模拟器/设备实例的连接,并处理来自多个 ADB 客户端的命令,因此,可以从任意客户端(或从某个脚本)控制任意模拟器/设备实例。
常用命令
可以通过 adb help
来查看ADB的命令帮助,当然也可以Google了。这里只介绍日常开发和测试中使用频率较高的命令。
连接相关
// 输出所有连接的模拟器/设备实例的列表。 // offline — 实例未连接到 adb 或不响应。 // device — 实例现在已连接到 adb 服务器。 // no device — 未连接模拟器/设备。 adb devices // 检查 adb 服务器进程是否在运行,如果未运行则启动它。 adb start-server // 终止 adb 服务器进程。 adb kill-server // 在目标模拟器/设备实例中启动远程 shell。多设备时要加 “-s 设备名” adb shell 复制代码
安装卸载
// 安装apk // 多设备时加 “-s” // 覆盖安装加 “-r” adb install xxx.apk // 卸载指定APP // 如果想保留缓存文件加 “-k” adb uninstall 包名 复制代码
文件相关
// remote: 模拟器/设备实例(远程)上目标文件/目录的路径 // local:开发计算机(本地)目标文件/目录的路径 // 从模拟器或设备复制文件或目录(及其子目录) adb pull remote local // 将文件文件或目录(及其子目录)复制到模拟器或设备 adb push local remote 复制代码
am相关
在 adb shell 中,可以使用 Activity Manager (am) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性及其他操作。
// shell环境中,command为 shell 命令 am command // 不进入shell时 adb shell am command // 启动Activity // -a 表示 action,-c 表示 category ,-d 表示 data_uri,-e 表示添加额外 Key-Value 信息 // 除了默认启动的 Activity 以外,打开其他的 Activity 时,需要在 AndroidManifest 文件中添加 android:exported="true" 属性 adb shell am start package/package-activity // 启动Service adb shell am startservice [options] intent // 发送广播 adb shell am broadcast [options] intent // 使用 Instrumentation 实例启动监控。通常,目标 component 是表单 test_package/runner_class adb shell am instrument [options] component // 强行停止与 package(应用的包名称)关联的所有应用 adb shell am force-stop package // 终止与 package(应用的包名称)关联的所有进程。仅终止可安全终止且不会影响用户体验的进程。 adb shell am kill [options] package 复制代码
举例:
// 启动包名为com.zjx.sample.proguard的APP中的MainActivity // Service和这个类似 adb shell am start com.zjx.sample.proguard/.MainActivity // 模拟发送一个屏幕打开的广播 adb shell am broadcast -a adnroid.intent.action.ACTION_SCREEN_ON // 强制关闭应用 adb shell am force-stop com.zjx.sample.proguard 复制代码
pm相关
在 adb shell 中,您可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包进行操作和查询。
// 看是否在shell环境下,在则无需 adb shell (adb shell) pm command // 输出所有软件包,或者,仅输出包名称包含 filter 中的文本的软件包 adb shell pm list packages [options] filter // 输出给定 package 的 APK 的路径 adb shell pm path package // 删除与软件包关联的所有数据 adb shell pm clear package 复制代码
举例:
// 列出包名包含com.zjx的应用包名列表 adb shell pm list packages com.zjx // 输出com.zjx.sample.proguard应用的路径 adb shell pm path com.zjx.sample.proguard 复制代码
截屏和录屏
虽然现在有很多截屏和录屏的软件,但是使用命令也是很方便的,而且效果不错。
// 截屏 adb shell screencap filename // 录屏 // 要求:Android 4.4(API 级别 19)及更高版本 // 此实用程序将屏幕 Activity 录制到 MPEG-4 文件 // 按 Control + C 停止屏幕录制,否则,到三分钟或 --time-limit 设置的时间限制时,录制将自动停止。 // 可以任何支持的分辨率和所需的比特率进行录制,同时保留设备显示屏的纵横比 // 不支持在录制时旋转屏幕。如果在录制期间屏幕旋转了,则部分屏幕的录制将被切断 adb shell screenrecord [options] filename 复制代码
dumpsys相关
dumpsys功能很丰富,可以将系统数据转储到屏幕。可以通过 adb shell service list
或者 adb shell dumpsys -l
查看dumpsys支持的服务,常用的有:activity、package、window、input、alarm、meminfo等。
//查询AMS服务相关信息 adb shell dumpsys activity //查询WMS服务相关信息 adb shell dumpsys window //查询CPU情况 adb shell dumpsys cpuinfo //查询内存情况 adb shell dumpsys meminfo ... 复制代码
举例:
// 打印com.zjx.sample.proguard应用的Activity信息 adb shell dumpsys activity com.zjx.sample.proguard 复制代码
logcat相关
Logcat 是一个命令行工具,用于转储系统消息日志,其中包括设备引发错误时的堆叠追踪以及从您的应用使用 Log 类编写的消息。
[adb] logcat [<option>] ... [<filter-spec>] ... 复制代码
每个 Android 日志消息都有与其关联的标记和优先级,我们可以对日志进行过滤。
优先级由以下某个字符值表示(按从最低到最高优先级的顺序排列):
- V — 详细(最低优先级)
- D — 调试
- I — 信息
- W — 警告
- E — 错误
- F — 致命
- S — 静默(最高优先级,不会打印任何内容)
过滤器表达式遵循 tag:priority ...
这个格式,其中 tag 表示感兴趣的标记,priority 表示将该标记报告的最低优先级。
adb logcat MainActivity:D *:S 复制代码
该表达式将阻止除了带有标记“MainActivity”、优先级等于或高于“调试”的日志消息。最后一个元素 *:S 将所有标记的优先级设为“静默”,从而确保系统仅显示带有“MainActivity”标记的日志消息。
第三方工具
ADB插件
在Android Studio中可以添加一个 ADB Idea
插件,可以方便的在IDE中调用ADB命令。
logcat
Android Studio中已经提供了logcat显示区,这里再推荐一个logcat命令行工具: PID Cat 。
通过 WLAN 连接到设备
除了使用USB使用ADB,还可以通过WLAN使用,详情见:ADB文档(这个不算第三方工具)。
总结
ADB的命令非常丰富,远不止上述的那些。通过 adb shell ls /system/bin
可以查到可用的命令列表。我们日常使用ADB时不必刻意去记这些命令,使用次数多了也就熟了。当然,要使用复杂的功能还是得查资料的,毕竟脑瓜子记不住那么多细节。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。