当前位置: 首页 > news >正文

每天一个安卓测试开发小知识之 (六)---常用的adb 命令第四期

每天一个安卓测试开发小知识之 (六)---常用的adb 命令第四期

本期继续介绍adb命令

  • root adb
  • 查看app进程id
  • adb服务端重启
  • 获取当前界面的xml
  • adb命令输入text

1. root adb

root的作用是什么 如何进入root 如何退出 什么下才可以root

1.1 adb root 命令的作用

重启 adbd 守护进程(adbd daemon,运行在手机中的进程),使其以 root 权限运行,相当于root状态比非root状态的权限要高,可执行的adb 命令要多

  • 普通模式:当你在设备上执行 adb shell 时,你进入的是一个受限的 shell 环境,拥有的是普通用户(通常是 shell)的权限,无法访问系统关键文件和执行特权命令。
  • root 模式:执行 adb root 后,adbd 进程本身获得了 root 权限。之后你再执行 adb shell,将会直接获得一个 # 符号的 root shell,拥有系统的最高权限。

1.2 什么情况下才可以进入root

adb root 命令并非在所有设备上都有效。它的成功执行完全取决于设备的ro.debuggable 这个系统属性。

  • ro.debuggable 属性的获取 可以通过之前介绍的 adb shell getprop 查看( 可查看之前文章)
    在这里插入图片描述
    ro.debuggable 属性的值等于1时才可以执行adb root命令获取到root权限
    当手机是root版本 或者userdebug版本的时候ro.debuggable属性值才是1, 一般手机都是user的,所以不能进入root
  • root版本 或者userdebug版本必须刷指定的系统才能实现
  • user版本的手机可以通过工具取得了root权限,这里不具体介绍

1.3 进入root

adb root
在这里插入图片描述
当已经是root状态时 执行adb root
在这里插入图片描述

1.4 退出root

adb unroot在这里插入图片描述
当已经是非root状态时,执行 adb unroot
在这里插入图片描述

2. 查看app进程id

很多情况下,需要获取app的进程id来kil进程或者用来查看进程

adb shell pidof 包名 例如 获取com.android.settings 的进程id,包名的获取可参考包名获取
在这里插入图片描述
可以通过 pidkill进程,因为adb不是root所以不能kill掉设置这个进程
在这里插入图片描述
可以通过pid过滤对应app的日志
在这里插入图片描述

3. adb服务端重启

在执行自动化测试中 adb命令会出现卡死的情况,或者第一次执行adb命令需要启动adb server

  • 启动adb server adb start-server
  • kill adb server adb kill-server
    在这里插入图片描述
    有时候需要查看adb server的日志 确认测试中是不是手机离线导致的问题
  • linux 或者 mac 系统中 日志保存在 /tmp/adb.***.log
  • windows保存在 c盘,用户目录下 文件名 adb_log,可以直接在C盘下搜索

4. 获取当前界面的xml

有时候我们在做UI自动化时,有些控件找不到时,需要dump下当前页面的xml,来辅助判断

adb shell uiautomator dump   /data/local/tmp/text.xml

/data/local/tmp/text.xml 是手机中保存xml文件的文件路径,保存完后,可通过adb pull命令将文件拉到主机中,adb pull命令

5. 输入text

有时候UI界面的元素不好定位,比如输入短信验证码的情况下,难以实现输入文字,就可以考虑通过adb shell命令输入文字

adb shell input text 123

123 是要输入的文字,但是要执行 input text 命令需要打开开发者-USB调试(安全设置),打开开发者模式可参考开发者设置
以小米手机为例,
在这里插入图片描述
例如我们将光标放在设置的搜索框中,然后执行 adb shell input text 123
在这里插入图片描述
在这里插入图片描述
本期的分享就到这里,每天进步一点点!!

http://www.gsyq.cn/news/9563.html

相关文章:

  • 视频融合平台EasyCVR国标GB28181视频诊断功能详解与实践
  • MyEMS 进阶应用:从单厂能耗管理到集团跨区域能源数据协同分析
  • avalonia android TextBox多行模式下回车会关闭输入法问题
  • client-go限速之QPS、Burst 和 RateLimiter
  • python实现网站登录会话脚本 - wanghongwei
  • 基于java+springboot的社区居民诊疗健康管理系统(源代码+文档+讲解视频) - 指南
  • 时序数据库IoTDB的六大实用场景盘点 - 指南
  • K8S的CoreDns配置文件添加域名解析
  • nodify_介绍及安装
  • MQTT协议(消息队列遥测传输)
  • 【低代码平台之应用构建展示】数智化贸易订单管理平台
  • Threading 串行VS并发
  • parallel index
  • 微指令控制器基本原理
  • 一个拒绝过度设计的 .NET 快速开发框架:开箱即用,专注干活
  • React 学习笔记4 Diffing/脚手架 - 详解
  • VisualStudio-Python-工具指南-全-
  • 深入解析:Spring Boot注解
  • Gevent和Subprocess问题
  • WPF ListBox loaded 76.6M items with imagesource
  • 【数据结构】双向链表 - 指南
  • 告别“能源糊涂账”:MyEMS如何帮企业把能耗数据“算明白、用到位”
  • 完整教程:ElasticSearch倒排索引原理
  • 负载排查和分析三
  • 完整教程:线程、进程、协程
  • CF913G Power Substring
  • ES集群部署-EFK架构实战 - 实践
  • 《BOE解忧实验室》第四季圆满收官 以科技重塑文化生活新范式
  • 洛谷P2261 [CQOI2007] 余数求和
  • 完整教程:uniapp、devceo华为鸿蒙运行模拟器报错:未开启Hyper-V