内容简介: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时不必刻意去记这些命令,使用次数多了也就熟了。当然,要使用复杂的功能还是得查资料的,毕竟脑瓜子记不住那么多细节。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learn Python the Hard Way
Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99
Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!