当前位置: 首页 > 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.hskmm.com/?act=detail&tid=13385

相关文章:

  • SAP-ABAP中STOP,EXIT,CHECK,RETURN,CONTINUE,LEAVE,REJECT的区别
  • Linux开机启动进入紧急模式emergency mode的解决方法 - 规格严格
  • Arduino ide 软件 不建议大家使用 缺点多多
  • 视频融合平台EasyCVR国标GB28181视频诊断功能详解与实践
  • Refit Consul
  • 故障处理:Oracle 19.20未知BUG导致oraagent进程内存泄漏的案例处理
  • 麒麟服务器操作系统查询可用的内核版本以及安装和降级命令
  • esp32 stm32 ros2 三者区别
  • 20250406_信安一把梭_测试篇
  • 前端 10 个 JS 神 API,开箱即用
  • 故障处理:清除 DBA_DATAPUMP_JOBS 视图中的异常数据泵作业
  • Web自动化测试智能体详解
  • Queue 配合Thread使用
  • MyEMS 进阶应用:从单厂能耗管理到集团跨区域能源数据协同分析
  • Playwright自动化测试框架与AI智能体应用
  • 以下内容在if判定的时候会被判定为 假
  • Python __init__.py文件
  • 20250330_信安一把梭_考试篇
  • VS Code配置Conda环境完整指南
  • 不同Windows系统中支持的最新.Net Framework/.NET版本
  • avalonia android TextBox多行模式下回车会关闭输入法问题
  • 每周读书与学习-初识JMeter 元件(二)
  • client-go限速之QPS、Burst 和 RateLimiter
  • 三度蝉联Gartner SASE领导者:唯一厂商的技术实力解析
  • 基础命令
  • 水水水 || CSP-S 2025 初赛
  • python实现网站登录会话脚本 - wanghongwei
  • HCM 性能优化函数
  • Nginx配置里alias和root的区别
  • 国产DevOps生态崛起:Gitee如何赋能企业数字化转型