adb shell input 分析(1)

本文探讨了adb shell input命令的功能,包括使用keyevent发送按键事件,如通过输入adb shell input keyevent 4模拟back键。此外,还介绍了text参数用于文本输入,如adb shell input text 123,支持单引号和双引号。文章通过分析log揭示了text输入实际上是将文本拆分为单个字符,模拟按键事件。对于中文文本,adb shell input目前无法支持,尝试输入会导致crash。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

adb shell input的功能

adb shell input可以通过adb命令行发送input事件。包含keyevent和text两种。

keyevent

对于安卓API KeyEvent定义的健值均可支持

https://developer.android.com/reference/android/view/KeyEvent

健值举例:

KEYCODE_0
Added in API level 1
public static final int KEYCODE_0
Key code constant: '0' key.

Constant Value: 7 (0x00000007)

KEYCODE_1
Added in API level 1
public static final int KEYCODE_1
Key code constant: '1' key.

Constant Value: 8 (0x00000008)

KEYCODE_11
Added in API level 21
public static final int KEYCODE_11
Key code constant: '11' key.

Constant Value: 227 (0x000000e3)

KEYCODE_12
Added in API level 21
public static final int KEYCODE_12
Key code constant: '12' key.

Constant Value: 228 (0x000000e4)

KEYCODE_2
Added in API level 1
public static final int KEYCODE_2
Key code constant: '2' key.

Constant Value: 9 (0x00000009)

KEYCODE_3
Added in API level 1
public static final int KEYCODE_3
Key code constant: '3' key.

Constant Value: 10 (0x0000000a)

KEYCODE_3D_MODE
public static final int KEYCODE_3D_MODE
Key code constant: 3D Mode key. Toggles the display between 2D and 3D mode. * @apiSince 14

Constant Value: 206 (0x000000ce)

KEYCODE_4
Added in API level 1
public static final int KEYCODE_4
Key code constant: '4' key.

Constant Value: 11 (0x0000000b)

KEYCODE_5
Added in API level 1
public static final int KEYCODE_5
Key code constant: '5' key.

Constant Value: 12 (0x0000000c)

例如,发送一个back键:

通过查询上述文档,我们发现back键值为4,所以连通adb调试后,命令行输入:

adb shell input keyevent 4

手机端就会响应back键(如果当前页面可以响应back)。

text

也可以支持直接的文本输入,例如,在手机端打开一个可以响应文本输入的界面,例如EditText控件,命令行输入:

adb shell input text 123

手机端EditText会填充文本123。

支持文本单引号和双引号:

adb shell input text "123"

adb shell input text '123'

都是可以的。

adb shell input的实现机制

从分析log开始

通过命令行调试一个back键值:adb shell input keyevent 4,看到手机端有如下log:

一部分是AndroidRuntime的log:

12-12 16:32:57.324  9375  9375 D AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 2000 <<<<<<
12-12 16:32:57.329  9375  9375 D AndroidRuntime: CheckJNI is OFF
12-12 16:32:57.445  9375  9375 D AndroidRuntim
### ADB Shell Input Tap 命令的使用方法 在 Android 设备上,`adb shell input tap` 命令用于模拟用户在屏幕上的点击操作。该命令的基本语法如下: ```shell adb shell input tap <x> <y> ``` 其中 `<x>` 和 `<y>` 分别表示点击位置的横坐标和纵坐标。这些值是基于设备屏幕分辨率的像素点。 例如,在屏幕上坐标 (100, 600) 处进行一次点击操作,可以执行以下命令: ```shell adb shell input tap 100 600 ``` 这种模拟点击的方式常用于自动化测试或脚本编写中,以实现对特定 UI 元素的交互操作[^1]。 --- ### 模拟点击坐标的实际应用 在实际使用中,可以通过多次调用 `adb shell input tap` 命令来完成一系列复杂的操作。例如,打开某个应用程序并导航到指定页面。以下是一个示例脚本,展示了如何通过连续点击来实现这一目标: ```shell # 打开百度阅读应用 adb shell input tap 150 1350 sleep 5 # 进入“我的”页面 adb shell input tap 980 1810 ``` 上述脚本中,首先通过点击坐标 `(150, 1350)` 来启动百度阅读应用,然后等待 5 秒钟后,再通过点击坐标 `(980, 1810)` 导航至“我的”页面[^2]。 --- ### 使用批处理脚本实现自动化测试 除了单独使用 `adb shell input tap` 命令外,还可以将其集成到批处理脚本中,以实现更复杂的自动化测试任务。例如,以下是一个 Windows 系统下的批处理脚本示例,它通过循环执行滑动和点击操作来进行压力测试: ```batch @echo off for /l %%i in (1,1,1500) do ( adb shell input swipe 240 837 240 837 8000 adb shell input tap 91 958 adb shell input tap 137 650 echo "i=%%i" ) pause ``` 此脚本在一个循环中重复执行了 1500 次滑动和点击操作,并输出当前循环次数。这种方式非常适合用于长时间的压力测试或功能验证[^3]。 --- ### 相关命令与扩展用途 除了 `tap` 命令外,`adb shell input` 还支持其他多种输入模拟命令,如 `swipe`、`keyevent` 等。以下是部分常用命令及其用途: - **滑动操作**:`adb shell input swipe <x1> <y1> <x2> <y2> [duration(ms)]` 用于模拟手指在屏幕上的滑动动作。例如,从坐标 `(240, 837)` 滑动到 `(240, 837)`(即原地滑动),持续时间为 8000 毫秒: ```shell adb shell input swipe 240 837 240 837 8000 ``` - **按键事件**:`adb shell input keyevent <key code number or name>` 用于模拟按键操作。例如,发送一个删除键事件: ```shell adb shell input keyevent 67 ``` 这些命令可以组合使用,以实现更加复杂和灵活的自动化测试场景[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值