You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android Monkey随机运行保存为可编辑脚本用于后续重放?

如何将Android Monkey随机运行过程保存为可编辑的重放脚本

当然有办法实现你的需求!既然你明确不需要依赖-s seed参数(毕竟seed只能复现随机序列,没法提前编辑事件),我们可以通过捕获Monkey事件日志并转换为标准Monkey脚本格式的方式来实现,具体步骤如下:

1. 捕获Monkey的详细事件日志

首先运行Monkey时,开启最高级别的日志输出(-vv),并将日志重定向到本地文件,这样就能记录下所有Monkey执行的操作细节。

执行命令:

adb shell monkey -p <你的包名> -vv <事件总数> > monkey_raw_events.log

比如你想让Monkey执行1000个随机事件,就把<事件总数>换成1000。这个日志文件里会包含每一个事件的类型(点击、滑动、按键等)、坐标、时间戳等关键信息。

2. 将日志转换为Monkey可识别的脚本格式

Monkey脚本采用逐行指令的格式,支持的核心指令包括:

  • Tap <x> <y>:模拟屏幕点击
  • Drag <x1> <y1> <x2> <y2> <时长(毫秒)>:模拟拖拽操作
  • Press <按键码>:模拟物理按键(比如返回键是4,主页键是3)
  • Wait <毫秒>:暂停指定时长

你可以写一个简单的解析脚本(比如Python或Shell脚本)来处理monkey_raw_events.log,提取关键信息并转换为上述格式。举个简单的Python示例逻辑:

import re

with open("monkey_raw_events.log", "r") as f:
    lines = f.readlines()

script_lines = ["# Monkey Replay Script"]
current_down = None

for line in lines:
    # 匹配Touch DOWN事件
    down_match = re.search(r'Touch \(ACTION_DOWN\): 0:\((\d+\.\d+), (\d+\.\d+)\)', line)
    if down_match:
        x = int(float(down_match.group(1)))
        y = int(float(down_match.group(2)))
        current_down = (x, y)
        continue
    
    # 匹配Touch UP事件,生成Tap指令
    up_match = re.search(r'Touch \(ACTION_UP\): 0:\((\d+\.\d+), (\d+\.\d+)\)', line)
    if up_match and current_down:
        x_up = int(float(up_match.group(1)))
        y_up = int(float(up_match.group(2)))
        if x_up == current_down[0] and y_up == current_down[1]:
            script_lines.append(f"Tap {x_up} {y_up}")
        else:
            # 如果Down和Up坐标不同,视为Drag
            script_lines.append(f"Drag {current_down[0]} {current_down[1]} {x_up} {y_up} 500")
        script_lines.append("Wait 300")  # 每次操作后加短暂等待
        current_down = None
    
    # 匹配按键事件
    key_match = re.search(r'KeyDown\((\d+)\)', line)
    if key_match:
        keycode = key_match.group(1)
        script_lines.append(f"Press {keycode}")
        script_lines.append("Wait 300")

# 保存为脚本文件
with open("monkey_replay_script.txt", "w") as f:
    f.write("\n".join(script_lines))

运行这个脚本后,你会得到一个monkey_replay_script.txt,里面就是格式化好的可编辑脚本。

3. 编辑脚本(按需调整)

现在你可以直接打开monkey_replay_script.txt进行编辑:

  • 删除不需要的操作步骤
  • 修改点击/拖拽的坐标
  • 调整Wait的时长
  • 新增自定义的指令(比如添加特定的按键操作)

4. 推送到设备并重放脚本

首先把编辑好的脚本推送到Android设备:

adb push monkey_replay_script.txt /sdcard/

然后执行Monkey重放命令:

adb shell monkey -p <你的包名> -f /sdcard/monkey_replay_script.txt 1

这里最后的1表示重放一次脚本,你可以根据需要修改次数。

这种方式完全满足你“编辑脚本后再重放”的需求,相比seed参数灵活性高得多。

内容的提问来源于stack exchange,提问作者FlyingPumba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:13:36