百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

技术分享 | App测试时常用的adb命令你都掌握了哪些呢?

nanshan 2024-11-20 19:24 22 浏览 0 评论

本文节选自霍格沃兹测试开发学社内部教材


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 的方式连接,这种方式不做赘述。

  1. 模拟器:不需要手动设置 USB 调试开关,默认是打开的
  2. 真机通过 USB 连接
  3. 安装 Android 手机驱动
  4. 设备启用 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 <设备路径>

获取更多相关资料:

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=toutiao×tamp=1653615193&author=MM

相关推荐

如何为MySQL服务器和客户机启用SSL?

用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...

Mysql5.7 出现大量 unauthenticated user

线上环境mysql5.7突然出现大量unauthenticateduser,进mysql,showprocesslist;解决办法有:在/etc/hosts中添加客户端ip,如192.16...

MySQL 在 Windows 系统下的安装(mysql安装教程windows)

更多技术文章MySQL在Windows系统下的安装1.下载mysql和Framework链接链接:百度网盘请输入提取码提取码:6w3p双击mysql-installer-communit...

MySql5.7.21.zip绿色版安装(mysql数据库绿色版安装)

1、去网上下载满足系统要求的版本(mysql-5.7.21-winx64.zip)2、直接解压3、mysql的初始化(1)以管理员身份运行cmd,在mysql中的bin目录下shift+右键-在...

MySQL(8.0)中文全文检索 (亲测有效)

在一堆文字中找到含有关键字的应用。当然也可以用以下语句实现:SELECT*FROM<表名>WHERE<字段名>like‘%ABC%’但是它的效率太低,是全盘扫描。...

新手教程,Linux系统下MySQL的安装

看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...

麒麟服务器操作系统安装 MySQL 8 实战指南

原文连接:「链接」Hello,大家好啊,今天给大家带来一篇麒麟服务器操作系统上安装MySQL8的文章,欢迎大家分享点赞,点个在看和关注吧!MySQL作为主流开源数据库之一,被广泛应用于各种业务...

用Python玩转MySQL的全攻略,从环境搭建到项目实战全解析

这是一篇关于“MySQL数据库入门实战-Python版”的教程,结合了案例实战分析,帮助初学者快速掌握如何使用Python操作MySQL数据库。一、环境准备1.安装Python访问Pytho...

安装MySQL(中标麒麟 安装mysql)

安装MySQL注意:一定要用root用户操作如下步骤;先卸载MySQL再安装1.安装包准备(1)查看MySQL是否安装rpm-qa|grepmysql(2)如果安装了MySQL,就先卸载rpm-...

Mysql最全笔记,快速入门,干货满满,爆肝

目录一、MySQL的重要性二、MySQL介绍三、软件的服务架构四、MySQL的安装五、SQL语句六、数据库相关(DDL)七、表相关八、DML相关(表中数据)九、DQL(重点)十、数据完...

MAC电脑安装MySQL操作步骤(mac安装mysqldb)

1、在官网下载MySQL:https://dev.mysql.com/downloads/mysql/根据自己的macOS版本,选择适配的MySQL版本根据自己需求选择相应的安装包,我这里选择macO...

mysql主从(mysql主从切换)

1、本章面试题什么是mysql主从,主从有什么好处什么是读写分离,有什么好处,使用mycat如何实现2、知识点2.1、课程回顾dubboORM->MVC->RPC->SOApro...

【linux学习】以MySQL为例,带你了解数据库

做运维的小伙伴在日常工作中难免需要接触到数据库,不管是MySQL,mariadb,达梦还是瀚高等其实命令都差不多,下面我就以MySQL为例带大家一起来了解下数据库。有兴趣的小伙伴不妨评论区一起交流下...

玩玩WordPress - 环境简介(0)(玩玩网络科技有限公司)

简介提到开源博客系统,一般都会直接想到WordPress!WordPress是使用PHP开发的,数据库使用的是MySQL,一般会在Linux上运行,Nginx作为前端。这时候就需要有一套LNMP(Li...

服务器常用端口都有哪些?(服务器端使用的端口号范围)

下面为大家介绍一下,服务器常用的一些默认端口,以及他们的作用:  21:FTP服务所开放的端口,用于上传、下载文件。  22:SSH端口,用于通过命令行模式远程连接Linux服务器或vps。  23:...

取消回复欢迎 发表评论: