共计 4152 个字符,预计需要花费 11 分钟才能阅读完成。
adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于治理 Android 模拟器或真机的工具。
adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设施进行通信。adb 命令可执行各种设施操作,例如装置和调试利用。
adb 组成
采纳了客户端 - 服务器(C/S)模型,包含三个局部:
编辑
adb Client:运行在电脑上,能够在命令行中运行 adb 命令来调用该客户端。Client 实质上就是 Shell,用来发送命令给 Server。发送命令时,首先检测 PC 上有没有启动 Server,如果没有 Server,则会主动启动一个,而后将命令发送到 Server。adb Server:运行在电脑上的后盾过程,用于治理客户端与运行在模拟器或真机的守护过程通信。adb Daemon:守护过程作为一个后盾过程在 Android 设施或模拟器零碎中运行。它的作用是连贯 adb 服务端,并且为运行在主机上的 adb 客户端提供一些服务。
adb 工作原理
编辑
当 adb 客户端启动时,客户端会先查看 adb 服务端是否启动。如果没有,会先启动服务端过程。adb 服务端在启动后,会与 5037 端口绑定,并监听 adb 客户端收回的命令。
而后服务端会与所有正在运行的 Android 设施建设连贯。它通过扫描 5555 到 5585 之间的奇数号端口查找 Android 设施。服务端一旦发现 Android 设施上的 adb 守护过程在运行,便会与相应的端口建设连贯。每个 Android 设施都应用一对端口,偶数端口用于控制台连贯,奇数端口用于 adb 连贯。
服务端与所有 Android 设施建设连贯后,就能够应用 adb 命令来拜访这些设施了。服务端会治理曾经建设的连贯,并解决来自 adb 客户端的命令。
启动 adb 调试
Android 真机能够通过 USB 连贯到 adb,连贯时须要在设施的零碎设置中启用 USB 调试(位于开发者选项下),启动 USB 调试后,设施上的 adb 守护过程就会被启动,adb 服务端才能够和设施建设连贯。除了用 USB 的形式连贯之外,也能够通过 WLAN 的形式连贯,这种形式不做赘述。
模拟器:不须要手动设置 USB 调试开关,默认是关上的
真机通过 USB 连贯
装置 Android 手机驱动
设施启用 USB 调试
adb 常用命令
adb 命令格局
adb [-d|-e|-s <serialNumber>] <command>
-d:指定以后惟一通过 USB 连贯的 Android 设施为命令指标
-e:指定以后惟一运行的模拟器为命令指标
-s:指定相应 serialNumber 号的设施 / 模拟器为命令指标
方括号中的内容是可选的,尖括号内容的是必填的。方括号中参数能够指定设施,对于设施的指定有三个参数能够应用。-d、-e 和 -s,其中应用最多的是 -s 参数,在连贯多台设施的时候,个别都是应用 -s 加上设施的序列号这种形式去指定具体设施。
adb 能够同时连贯多台设施,然而一次只能对一台设施执行命令。所有连贯多台设施的时候,是必须要制订设施,命令才能够执行胜利的。
查问设施
把 Android 设施连贯到 adb 服务端后,须要确认设施的连贯状态。这时能够应用查问命令进行查问。
连贯模拟器(以 MUMU 模拟器为例)
adb connect 127.0.0.1:7555
adb devices
adb connect 命令能够通过 WLAN 的形式连贯到模拟器,7555 为 mumu 模拟器的端口
adb devices 能够查问设施连贯的状态
Windows 零碎中,连贯模拟器须要先执行 connect 命令去连贯模拟器,127.0.0.1 是本地的 IP 地址,因为模拟器就是装置在本地的,所以要应用本地的 IP 地址,加上模拟器自身规定的一个端口号。mumu 的端口号是 7555,如果应用的是其余的模拟器的话,须要先去理解它的端口号是什么,而后再去连贯。MacOS 零碎中连贯模拟器不须要先执行 connect 命令,间接执行 adb kill-server && adb devices 命令即可。
连贯真机
真机间接用 USB 连贯到电脑,不须要执行 connect 命令。
间接用 adb devices 命令查看曾经连贯的设施列表即可。
hogwarts@ ~ % adb devices
List of devices attached
emulator-5554 device
间接命令后,如果设施曾经胜利连贯,那么设施列表中就会展现已连贯设施的信息。
emualotr-5554:设施序列号
device:设施连贯状态为胜利
装置卸载利用
测试过程中,如果须要装置或者卸载利用,能够间接用 adb 命令来操作。
一般装置:adb install <apk 门路 >
笼罩装置:adb install -r <apk 门路 >
齐全卸载:adb uninstall < 包名 >
保留配置文件:adb uninstall -k < 包名 >
设施与电脑传输文件
adb 命令反对电脑和 Android 设施之间的文件互传。比方要提取 Android 设施中的日志文件到本地,就能够通过 adb 命令的形式来实现。
从电脑上传文件至设施:adb push < 电脑门路 > < 设施门路 >
从设施复制文件至电脑:adb pull < 设施门路 > < 电脑门路 >
日志
打印链接设施的 log 信息
屏幕输入日志:adb logcat
通过标签过滤:adb logcat -s 标签
显示工夫:adb logcat -v time
输入所有信息:adb logcat -v long
输入日志到文件:adb logcat -v time > log.txt
革除缓存日志信息:adb logcat -c
adb shell 命令
应用 adb shell 命令相当于近程登录了 Android 零碎,能够进入 Android 设施的零碎外部。进入零碎外部既能够执行一些简略的 Linux 命令也反对很多特有的命令。
应用 adb shell 命令有两种形式。
一种是间接在 adb shell 前面跟上命令。
adb [-s serial_number] shell <command>
比方:
hogwarts@ ~ % adb shell ls
acct
cache
charger
config
d
data
default.prop
dev
etc
…
另一种形式是在设施上启动交互式 shell
adb [-s serial_number] shell
进入 shell 之后,再执行对应的命令。
比方进入设施外部,能够查看设施外部的目录构造和内容
hogwarts@ ~ % adb shell
root@x86:/ # ls
acct
cache
charger
config
d
data
default.prop
dev
…
要退出交互式 shell,能够按 Ctrl + D 键或输出 exit。
Andriod 罕用测试命令
设施截图 / 录屏
在测试过程中,如果须要截图或者是录屏,也能够间接应用 adb 命令来实现。
截图:adb shell screencap < 设施门路 >
录屏:adb shell screenrecord < 设施门路 >
调用 Activity 管理器
在 adb shell 中,能够应用 Activity 管理器 (am) 工具收回命令以执行各种零碎操作,如启动 Activity、强行进行过程、批改设施屏幕属性,等等。
在测试过程中,如果须要启动 app 或者强制敞开 app,能够通过 adb 命令来实现。
启动利用:adb shell am start -n < 包名 >/<Activity 名 >
强制进行利用:adb shell am force-stop < 包名 >
调用软件包管理器
在 adb shell 中,能够应用软件包管理器 (pm) 工具收回命令,以对设施上装置的应用软件包执行操作和查问。
如果须要查问设施里都装置了什么利用,就能够应用 adb shell pm list 来查看,还能够加上不同的参数去查看不同类型的利用。而且也能够通过 adb 命令来革除利用相干的数据。
显示设施中装置的所有利用:adb shell pm list packages
只显示零碎利用:adb shell pm list packages -s
只显示第三方利用:adb shell pm list packages -3
删除与软件包关联的所有数据:adb shell pm clear < 包名 >
adb shell dumpsys
dumpsys 是一种在 Android 设施上运行的工具,可提供无关零碎服务的信息。能够应用 adb 从命令行调用 dumpsys,获取在连贯的设施上运行的所有零碎服务的诊断输入。
比方在测试中,如果须要通过 adb 命令启动 app,则须要晓得 app 的包名和入口的 Activity 名。这个时候,就能够通过上面这条命令获取到这两个信息。
这个场景,须要先把要获取信息的利用启动,让它在前台运行,而后执行命令
adb shell dumpsys activity | grep mFocusedActivity
hogwarts@ ~ % adb shell dumpsys activity | grep mFocusedActivity mFocusedActivity: ActivityRecord{9dae968 u0 com.xueqiu.android/.common.MainActivity t139}
下方的日志中就会展现进去以后的包名和 Activity 名称。
包名:com.xueqiu.android
Activity 名:.common.MainActivity
adb uiautomator
adb 命令还反对间接获取利用的页面信息。这个页面信息蕴含了页面中元素的属性,能够不便做自动化测试的时候去定位元素。获取到的页面布局会输入到一个 xml 文件中。
以后窗口的 UI 布局简化信息:adb shell uiautomator dump --compressed
hogwarts@ ~ % adb shell uiautomator dump –compressed
UI hierchary dumped to: /sdcard/window_dump.xml
不指定输入文件门路时,dump 下来的文件默认存储门路为 /sdcard/window_dump.xml
能够通过 adb pull 命令把文件传输到电脑中,而后用 uiautomatorviewer 工具关上查看布局。
指定输入文件门路:adb shell uiautomator dump file < 设施门路 >