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

使用 ADB 在某个特定时间点点击 Android 设备上的某个按钮

前提条件

  1. 安装 ADB:确保你已经在计算机上安装了 Android SDK(或单独的 ADB)。并将其添加到系统环境变量中,以便你可以在命令行中运行 adb。

  2. USB调试:确保 Android 设备已启用 USB 调试模式。这可以在设备的“设置” -> “关于手机”中,连续点击“版本号”7次,然后返回“设置” -> “开发者选项”中启用 USB 调试。

  3. 连接设备:通过 USB 数据线将 Android 设备连接到计算机。

流程步骤

  1. 查找设备的连接状态
    你可以通过运行下面的命令来确保连接状态:

    adb devices
    
    

    这将列出连接的设备,如果你的设备出现在列表中,就表示连接成功。

  2. 确定要点击的按钮的坐标
    为了点击按钮,你需要知道该按钮在屏幕上的确切位置(x, y 坐标)。你可以采取以下几种方法获取这些坐标:

    • 使用屏幕截图

      adb shell screencap -p /sdcard/screenshot.png
      adb pull /sdcard/screenshot.png .
      
      

      之后查看截图文件,以找到你想要点击的按钮位置。

    • 使用 UI 自动化工具
      你可以使用 uiautomator 工具来获取界面信息:

      adb shell uiautomator dump /sdcard/window_dump.xml
      adb pull /sdcard/window_dump.xml .
      
      

      然后通过分析 XML 文件找到你所需按钮的坐标。

  3. 编写点击命令
    假设你已经获取到按钮的坐标 (x, y)。接下来编写一个命令在特定时间点击该位置。你可以使用 sleep 命令来设置延迟。

    示例:假设确定按钮坐标是 (500, 800),你希望在10秒后进行点击。

    sleep 10 ; adb shell input tap 500 800
    
    
  4. 整合到一个脚本中
    如果你希望将命令放入一个脚本文件中,可以创建一个 .sh 文件(Linux/Mac OS)或 .bat 文件(Windows)。

    • Linux/MacOS 示例

      创建一个名为 click_button.sh 的文件,内容如下:

      #!/bin/bash
      sleep 10
      adb shell input tap 500 800
      
      

      然后给文件执行权限:

      chmod +x click_button.sh
      
      

      然后运行脚本:

      ./click_button.sh
      
      
    • Windows 示例

      创建一个名为 click_button.bat 的文件,内容如下:

      @echo off
      timeout /t 10
      adb shell input tap 500 800
      
      

      然后双击该文件运行。

运行脚本

确保设备连接正常后,运行你编写的脚本,等待 10 秒钟后,它将自动点击指定的按钮。

注意事项

  • 屏幕旋转:确保设备处于固定的屏幕方向(竖屏或横屏),因为这会影响坐标值。
  • 坐标准确性:不同设备的分辨率不同,确保你在对应的分辨率下获取坐标。
  • 权限设置:某些设备可能在 UI 自动化上有额外的限制,确保你的应用权限设置妥当。

window_dump.xml

当前页面完整的 UI 树结构信息都 dump 出来了,包括 view 的类名、资源 ID 和屏幕位置坐标等

http://www.lryc.cn/news/475541.html

相关文章:

  • 【随笔】对于开发者而言,你对什么事情感到失落?亦或者你上一次感到有成就感是什么时候?你遇到过怎样格局的老板?
  • 【LeetCode】两数之和返回两数下标、数组形式整数相加
  • Kubernetes中的secrets存储
  • 使用 Elastic、OpenLLMetry 和 OpenTelemetry 跟踪 LangChain 应用程序
  • 【论文复现】VALL-E:语音合成的新里程
  • java项目之微服务在线教育系统设计与实现(springcloud)
  • P3-1.【结构化程序设计】第一节——知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法
  • Vue2——单页应用程序路由的使用
  • 变分法(Calculus of Variations)
  • 包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述:
  • 【P2-1】ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式介绍与AT指令介绍
  • 《C#语法一篇通》,20万字,48小时阅读,持续完善中。。。
  • [node] 2 fs文件系统模块
  • 【react】基础知识点学习
  • D4--哈夫曼树和不等式
  • 详解RabbitMQ三种队列类型
  • openGauss数据库-头歌实验1-3 创建和管理模式
  • 森林火灾检测数据集(猫脸码客 第233期)
  • LeetCode100之找到字符串中所有字母异位词(438)--Java
  • 【Python】Python自习课:第一个python程序
  • DICOM标准:解析DICOM属性中的病人模块
  • C++设计模式创建型模式———生成器模式
  • 基于微信小程序的校园失物招领系统的研究与实现(V4.0)
  • DDRNet模型创新实现人像分割
  • try…catch…finally语句里return语句的执行顺序是怎样的?
  • AIGC与虚拟现实(VR)的结合与应用前景
  • 如何在visual studio中 生成 并 使用dll和lib文件
  • 「Mac畅玩鸿蒙与硬件15」鸿蒙UI组件篇5 - Slider 和 Progress 组件
  • Iceoryx2:高性能进程间通信框架(中间件)
  • 构 造 器