App测试时常用的adb命令

news2024/11/22 17:21:02

adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。

adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作,例如安装和调试应用。

adb组成

采用了客户端-服务器(C/S)模型,包括三个部分:

1080×662 287 KB

  • 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 模拟器为例)
  1. adb connect 127.0.0.1:7555

  2. 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 命令查看已经连接的设备列表即可。

  1. hogwarts@ ~ % adb devices

  2. List of devices attached

  3. 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>

比如:

  1. hogwarts@ ~ % adb shell ls

  2. acct

  3. cache

  4. charger

  5. config

  6. d

  7. data

  8. default.prop

  9. dev

  10. etc

  11. ...

另一种方式是在设备上启动交互式 shell

adb [-s serial_number] shell

进入 shell 之后,再执行对应的命令。

比如进入设备内部,可以查看设备内部的目录结构和内容

  1. hogwarts@ ~ % adb shell

  2. root@x86:/ # ls

  3. acct

  4. cache

  5. charger

  6. config

  7. d

  8. data

  9. default.prop

  10. dev

  11. ...

要退出交互式 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

  1. hogwarts@ ~ % adb shell dumpsys activity | grep mFocusedActivity

  2. mFocusedActivity: ActivityRecord{9dae968 u0

  3. com.xueqiu.android/.common.MainActivity t139}

下方的日志中就会展示出来当前的包名和 Activity 名称。

  • 包名:com.xueqiu.android
  • Activity 名:.common.MainActivity
adb uiautomator

adb 命令还支持直接获取应用的页面信息。这个页面信息包含了页面中元素的属性,可以方便做自动化测试的时候去定位元素。获取到的页面布局会输出到一个 xml 文件中。

  • 当前窗口的 UI 布局简化信息:adb shell uiautomator dump --compressed
  1. hogwarts@ ~ % adb shell uiautomator dump --compressed

  2. UI hierchary dumped to: /sdcard/window_dump.xml

不指定输出文件路径时,dump 下来的文件默认存储路径为 /sdcard/window_dump.xml

可以通过 adb pull 命令把文件传输到电脑中,然后用 uiautomatorviewer 工具打开查看布局。

  • 指定输出文件路径:adb shell uiautomator dump file <设备路径>

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银发产业资讯丨蚂蚁集团、金城药业、百联集团、京东健康布局业务

银发经济『新趋势大数据』 AgeNews 每日银发产业大事件速览 2024-10-8 星期二 AgeClub整理 金融监管总局&#xff1a;鼓励险企提供更多养老保障服务 蚂蚁集团等签署合作协议&#xff0c;聚焦智慧医疗领域 金城医药等合作聚焦年长女性健康科技领域 京东健康助力四川发放…

Internet Download Manager6.42免费版下载神器新体验

&#x1f680; 开篇就燃&#xff01;你的下载速度被“TA”承包了 #### &#x1f31f; 初识IDM 6.42&#xff0c;下载界的“超跑”驾到 各位追求效率的小伙伴们&#xff0c;今天小红要来揭秘一款让我彻底告别“龟速”下载的神器——Internet Download Manager (简称IDM) 6.42版&…

日语学习零基础生活日语口语柯桥外语学校|股票用日语怎么说?

在日语中&#xff0c;“股票”可以说&#xff1a; • 株&#xff08;かぶ&#xff09; 这是最常用的表达方式&#xff0c;直接表示“股票”。 例如&#xff1a; 株を買う - 买股票 株を売る - 卖股票 • 株式&#xff08;かぶしき&#xff09; 这个词也是“股票”的意…

学习文档(二)

异常 这是Java 异常类层次结构图概览&#xff1a; Exception 和 Error 有什么区别? 一、概念与本质 Exception&#xff08;异常&#xff09;&#xff1a;异常是在程序运行过程中出现的可预料的、可恢复的不正常情况。例如&#xff0c;试图打开一个不存在的文件时&#xff0…

【数据结构-栈】【位运算优化】力扣3170. 删除星号以后字典序最小的字符串

给你一个字符串 s 。它可能包含任意数量的 ‘’ 字符。你的任务是删除所有的 ’ 字符。 当字符串还存在至少一个 ‘*’ 字符时&#xff0c;你可以执行以下操作&#xff1a; 删除最左边的 ‘’ 字符&#xff0c;同时删除该星号字符左边一个字典序 最小 的字符。如果有多个字典…

【C++篇】虚境探微:多态的流动诗篇,解锁动态的艺术密码

文章目录 C 多态详解&#xff08;进阶篇&#xff09;前言第一章&#xff1a;多态的原理1.1 虚函数表的概念1.1.1 虚函数表的生成过程 1.2 虚表的存储位置 第二章&#xff1a;动态绑定与静态绑定2.1 静态绑定2.1.1 静态绑定的实现机制&#xff1a;2.1.2 示例代码&#xff1a; 2.…

从0到1:小区业主决策投票小程序开发笔记

可研 小区业主决策投票小程序&#xff1a; 便于业主参与社区事务的决策&#xff0c;通过网络投票的形式&#xff0c;大大节省了业委会和业主时间&#xff0c;也提高了投票率。其主要功能&#xff1a;通过身份证、业主证或其他方式确认用户身份&#xff1b;小区管理人员或业委会…

YOLO5的修改

在传统的yolov5网络中并不存在注意力机制&#xff0c;但是源代码中存在相关简略的代码&#xff1a; def __init__(self, c, num_heads):"""Initializes a transformer layer, sans LayerNorm for performance, with multihead attention and linear layers.See …

prometheus client_java实现进程的CPU、内存、IO、流量的可观测

文章目录 1、获取进程信息的方法1.1、通过读取/proc目录获取进程相关信息1.2、通过Linux命令获取进程信息1.2.1、top&#xff08;CPU/内存&#xff09;命令1.2.2、iotop&#xff08;磁盘IO&#xff09;命令1.2.3、nethogs&#xff08;流量&#xff09;命令 2、使用prometheus c…

tableau除了图表好看,在业务中真有用吗?

tableau之前的市值接近150亿美金&#xff0c;被saleforce以157亿美金收购&#xff0c;这个市值和现在的蔚来汽车差不多。 如果tableau仅仅是个show的可视化工具&#xff0c;必然不会有这么高的市值&#xff0c;资本市场的眼睛是雪亮的。 很多人觉得tableau做图表好看&#xff…

分布式常见面试题总结

文章目录 1 什么是 UUID 算法&#xff1f;2 什么是雪花算法&#xff1f;&#x1f525;3 说说什么是幂等性&#xff1f;&#x1f525;4 怎么保证接口幂等性&#xff1f;&#x1f525;5 paxos算法6 Raft 算法7 CAP理论和 BASE 理论7.1 CAP 理论&#x1f525;7.2 为什么无法同时保…

Echarts合集更更更之树图

实现效果 写在最后&#x1f352; 源码&#xff0c;关注&#x1f365;苏苏的bug&#xff0c;&#x1f361;苏苏的github&#xff0c;&#x1f36a;苏苏的码云

DGL库之HGTConv的使用

DGL库之HGTConv的使用 论文地址和异构图构建教程HGTConv语法格式HGTConv的使用 论文地址和异构图构建教程 论文地址&#xff1a;https://arxiv.org/pdf/2003.01332 异构图构建教程&#xff1a;异构图构建 异构图转同构图&#xff1a;异构图转同构图 HGTConv语法格式 dgl.nn.…

极客兔兔Gee-Cache Day7

protobuf配置&#xff1a; 从 Protobuf Releases 下载最先版本的发布包安装。解压后将解压路径下的 bin 目录 加入到环境变量即可。 如果能正常显示版本&#xff0c;则表示安装成功。 $ protoc --version libprotoc 3.11.2在Golang中使用protobuf&#xff0c;还需要protoc-g…

【单链表的模拟实现Java】

【单链表的模拟实现Java】 1. 了解单链表的功能2. 模拟实现单链表的功能2.1 单链表的创建2.2 链表的头插2.3 链表的尾插2.3 链表的长度2.4 链表的打印2.5 在指定位置插入2.6 查找2.7 删除第一个出现的节点2.8 删除出现的所有节点2.9 清空链表 3. 正确使用模拟单链表 1. 了解单链…

重头开始嵌入式第四十八天(Linux内核驱动 linux启动流程)

目录 什么是操作系统&#xff1f; 一、管理硬件资源 二、提供用户接口 三、管理软件资源 什么是操作系统内核&#xff1f; 一、主要功能 1. 进程管理&#xff1a; 2. 内存管理&#xff1a; 3. 设备管理&#xff1a; 4. 文件系统管理&#xff1a; 二、特点 什么是驱动…

WebGoat JAVA反序列化漏洞源码分析

目录 InsecureDeserializationTask.java 代码分析 反序列化漏洞知识补充 VulnerableTaskHolder类分析 poc 编写 WebGoat 靶场地址&#xff1a;GitHub - WebGoat/WebGoat: WebGoat is a deliberately insecure application 这里就不介绍怎么搭建了&#xff0c;可以参考其他…

yq 工具

文章目录 yq命令快速 Recipes查找数组中的项目查找并更新数组中的项目深度修剪一棵树对数组中的项目进行多次或复杂的更新按字段对数组进行排序 OperatorsOmitOmit keys from mapOmit indices from array DeleteDelete entry in mapDelete nested entry in mapDelete entry in …

【重学 MySQL】六十三、唯一约束的使用

【重学 MySQL】六十三、唯一约束的使用 创建表时定义唯一约束示例 在已存在的表上添加唯一约束示例 删除唯一约束示例 复合唯一约束案例背景创建表并添加复合唯一约束插入数据测试总结 特点注意事项 在 MySQL 中&#xff0c;唯一约束&#xff08;UNIQUE Constraint&#xff09;…

butterfly主题留言板 报错记录 未解决

新建留言板&#xff0c;在博客根目录执行下面的命令 hexo new page messageboard 在博客/source/messageboard的文件夹下找到index.md文件并修改 --- title: 留言板 date: 2018-01-05 00:00:00 type: messageboard ---找到butterfly主题下的_config.yml文件 把留言板的注释…