干货|做App测试,那些必知必会的Adb常用命令

> 本文节选自霍格沃兹测试学院内部教材




为了让大家更好的学习Adb常用命令,我们先从安装Android环境搭建开始讲解哦。




安装jdk  




###  **  

**


 **  

**


### 因为 Android SDK 是依赖于 java 环境的,所以需要先把 java 的环境搭建好。Java

环境可以参考搭建帖子:https://ceshiren.com/t/topic/4001




安装Android SDK  




###  




###  


### adb 包含在 Android SDK 平台工具软件包中。具体的 Android SDK

环境搭建步骤请参考帖子:https://ceshiren.com/t/topic/4001




adb简介  






adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android

模拟器或真机的工具。


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




adb组成  






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


  * adb client


  * adb server


  * adb daemon






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 连接


    * 安装 Android 手机驱动


    * 设备启用 USB 调试




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:7555adb devices




  * `adb connect` 命令可以通过 WLAN 的方式连接到模拟器,7555 为 mumu 模拟器的端口




  * `adb devices` 可以查询设备连接的状态




Windows 系统中,连接模拟器需要先执行 connect 命令去连接模拟器,127.0.0.1 是本地的 IP

地址,因为模拟器就是安装在本地的,所以要使用本地的 IP 地址,加上模拟器本身规定的一个端口号。mumu 的端口号是

7555,如果使用的是其他的模拟器的话,需要先去了解它的端口号是什么,然后再去连接。MacOS 系统中连接模拟器不需要先执行 connect 命令,直接执行

`adb devices` 命令即可。




 **连接真机**


 **  

**


真机直接用 USB 连接到电脑,不需要执行 connect 命令。


直接用 `adb devices`命令查看已经连接的设备列表即可。




    feier@ ~ % 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>




比如:




  *   *   *   *   *   *   *   *   *   *   * 




    feier@ ~ % adb shell lsacctcachechargerconfigddatadefault.propdevetc...




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




  * 




    adb [-s serial_number] shell




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


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




  *   *   *   *   *   *   *   *   *   *   * 




    feier@ ~ % adb shellroot@x86:/ # lsacctcachechargerconfigddatadefault.propdev...




要退出交互式 shell,可以按 Ctrl + D 键或输入 exit。




 **Android常用测试命令**  






下面整理出了Android常用的一些测试命令及用法。  




设备截图/录屏  






在测试过程中,如果需要截图或者是录屏,也可以直接使用 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`




  *   *   * 




    feier@ ~ % adb shell dumpsys activity | grep mFocusedActivity  mFocusedActivity: ActivityRecord{9dae968 u0 com.xueqiu.android/.common.MainActivity t139}  





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


  * 包名:`com.xueqiu.android`


  * Activity 名:`.common.MainActivity`




adb shell dumpsys  







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

文件中。


  * 当前窗口的 UI 布局简化信息:`adb shell uiautomator dump --compressed`




  *   * 




    feier@ ~ % adb shell uiautomator dump --compressedUI hierchary dumped to: /sdcard/window_dump.xml




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


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


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




adb常用命令就先讲到这里啦,下期我们分享App常见bug解析。大家还想看什么内容的文章也可以留言告诉我们哦!




 ** _ 

来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力

QQ交流群:484590337

公众号 TestingStudio

视频资料领取:https://qrcode.testing-studio.com/f?from=jianshu&url=https://ceshiren.com/t/topic/15844

点击查看更多信息

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容