2024-09-24
使用 adb shell getevent
來錄製並重複 Android 手機的操作是一種更底層的方式,這會捕獲設備上的所有輸入事件,例如觸摸、按鍵等。這裡是具體的步驟:
首先,確認設備是否已連接並可被 adb
檢測到:
adb devices
確保你已啟用開發者選項並允許 USB 調試。
getevent
錄製事件在 Android 設備上使用 getevent
來錄製操作事件。打開一個終端,輸入以下命令開始錄製:adb shell getevent -t > /sdcard/events.txt
這會記錄你在設備上的所有操作,並將它們保存到 /sdcard/events.txt
。-t
參數會為每個事件添加時間戳,方便稍後重放。
當你完成錄製時,按下 Ctrl + C
來結束錄製。
你可以通過以下命令將錄製的文件複製到電腦上:
adb pull /sdcard/events.txt
錄製完成後,現在可以重放這些操作。
你可以使用以下命令將錄製的事件文件重放到設備上:
adb shell cat /sdcard/events.txt | adb shell sendevent
這會按照錄製時的順序將所有事件重放回設備。
你也可以使用 Python 來解析 getevent
的輸出,並重複這些事件,這樣可以實現更加靈活的控制。
events.txt
文件的格式。每行會記錄一個事件,格式如下:/dev/input/event2: 0003 0039 00000001
/dev/input/event2: 0003 0035 000003d3
/dev/input/event2: 0003 0036 00000780
/dev/input/event2: 0000 0000 00000000
這些數字代表了事件類型、代碼和值。
示例代碼(假設你對事件做了一些解析):
import subprocess
import time
def replay_event(event_file):
with open(event_file, 'r') as f:
for line in f:
if line.strip(): # 確保不是空行
# 解析事件行,提取設備、類型、代碼和數值
parts = line.split()
device = parts[0].strip(':')
type_code = parts[1]
code = parts[2]
value = parts[3]
# 使用 adb sendevent 重放事件
sendevent_cmd = f'adb shell sendevent {device} {type_code} {code} {value}'
subprocess.run(sendevent_cmd, shell=True)
# 根據錄製的時間戳添加適當延遲(可選)
time.sleep(0.01) # 調整為適合的延遲
# 重放錄製的事件
replay_event('events.txt')
不同設備有不同的事件輸入設備 :設備上可能會有多個輸入設備(如觸摸屏、按鍵等),你需要確認正確的輸入設備文件(如 /dev/input/event0
)。
精確控制 :getevent
會記錄大量低層次的事件,可能會包含噪音或無關的事件(如鍵盤按鍵等)。你可以對事件進行過濾,只保留與觸摸相關的事件來進行重放。
兼容性問題 :某些 Android 設備可能會對這種重放方式做出防範措施,或者不同的 Android 版本處理事件的方式不同。
這樣,你就可以使用 adb shell getevent
來錄製和重複操作了。如果需要更進一步的自動化控制,可能需要借助其他專門的自動化工具。
在 Android 上錄製并重放动作,通常需要使用一些工具,例如 ADB(Android Debug Bridge)和 Python 来自动化执行任务。这里是一种方法,可以使用 ADB 工具配合 Python 脚本录制并重放设备的触摸操作。
首先,你需要安装 ADB(Android Debug Bridge)工具。你可以通过以下方式安装:
Windows: 你可以从 Android SDK 下载 ADB。
Mac/Linux: 使用 Homebrew 或 Apt 安装:
Mac: brew install android-platform-tools
Linux: sudo apt-get install android-tools-adb
确保 USB 调试已在 Android 设备上启用。通过 USB 将设备连接到计算机,然后运行以下命令以验证是否连接成功:
adb devices
你可以通过以下命令记录设备上的触摸操作:
adb shell screenrecord /sdcard/screenrecord.mp4
这将录制设备屏幕到 /sdcard/screenrecord.mp4
文件中。你可以指定文件路径和名称。
你还可以通过以下命令监控并捕捉设备的触摸事件:
adb shell getevent -lt
这会输出所有触摸事件的原始数据,包括屏幕触摸、按钮按下等操作。
下面是一个用 Python 调用 ADB 命令来实现录制和重放触摸动作的示例:
import os
import time
# 录制触摸动作
def record_events(output_file):
print("Recording events...")
os.system(f"adb shell getevent -lt > {output_file}")
print("Recording completed!")
# 重放触摸动作
def replay_events(input_file):
print("Replaying events...")
with open(input_file, 'r') as f:
for line in f:
if "EV_SYN" not in line: # 排除同步事件
os.system(f"adb shell sendevent {line.strip()}")
time.sleep(0.01) # 控制每个事件之间的时间间隔
print("Replay completed!")
# 示例用法
record_file = "touch_events.txt"
# 录制动作
record_events(record_file)
# 重放动作
replay_events(record_file)
录制动作: record_events
函数会使用 ADB 的 getevent
命令捕获设备的触摸事件,并将其保存到文件中。
重放动作: replay_events
函数从文件中读取触摸事件,并使用 ADB 的 sendevent
命令将这些事件重放到设备上。
使用 ADB 捕获和重放触摸事件可能因不同设备而有所不同。
重放的触摸事件必须精确,包括设备分辨率等因素。
Android 版本的差异可能会影响事件的捕获和回放。
你可以通过这些步骤实现基本的动作录制和重放。如果需要更高级的自动化操作,也可以考虑使用 Appium 等自动化工具。
在 Android 手機上使用 Python 來錄製並重複動作,可以透過以下方法實現:
adb
命令adb
(Android Debug Bridge)是一個工具,允許你與 Android 設備進行互動,包括模擬觸控、鍵盤事件、錄製螢幕等操作。
你可以使用一些基於 Python 的自動化工具來錄製和執行動作,例如:
uiautomator
:專門用於控制 Android 設備 UI 的工具。
Appium
:一個支持多平台(iOS、Android)的自動化測試框架。
MonkeyRunner
:Android SDK 自帶的工具,用來自動化 UI 操作。
adb
和 uiautomator
:首先確保已安裝 Android SDK 並能使用 adb
命令,然後可以安裝 uiautomator
的 Python 包:pip install uiautomator2
確保你的設備開啟了開發者模式,並允許 USB 調試。你可以使用 adb devices
來確認設備是否連接。
可以通過 adb
命令錄製設備的螢幕操作,然後使用 Python 腳本來重複這些操作。
錄製螢幕的指令:
adb shell screenrecord /sdcard/screen.mp4
這裡是一個使用 uiautomator2
的簡單範例,來自動化點擊和滑動操作:
import uiautomator2 as u2
# 連接設備
d = u2.connect('設備IP或USB')
# 點擊螢幕上特定坐標
d.click(300, 500)
# 滑動
d.swipe(300, 500, 300, 1000)
# 輸入文字
d.send_keys("Hello World")
# 打開應用
d.app_start("com.example.app")
# 等待特定元素出現並點擊
d(text="Click Me").click()
# 錄製的動作可以根據需求腳本化重複
可以將這些動作腳本化,然後根據需求調用不同的動作序列來實現重複操作。
如果需要更複雜的錄製與重複功能,你可以考慮使用 Appium 來進行完整的測試自動化,這樣能夠記錄更加複雜的應用內行為。
用 MonkeyRecorder 录制Android 动作, 重放Android 动作
MonkeyRecorder 是一个工具,可以帮助录制和重放 Android 设备上的用户操作。它是 UI/Application Exerciser Monkey (简称 Monkey)的一个增强版,Monkey 通常用于自动化测试应用,但 MonkeyRecorder 提供了图形化界面,可以更直观地录制并重放操作。以下是如何使用 MonkeyRecorder 录制和重放 Android 操作的步骤:
Mac: brew install android-platform-tools
Linux: sudo apt-get install android-tools-adb
确保你的 Android 设备已连接并可以通过 ADB 识别。在终端或命令提示符下运行以下命令,以确认设备连接成功:
adb devices
设备连接成功后,将显示设备的 ID。
.py
格式。monkeyrunner recorded_script.py
这将模拟你录制的所有操作,并在设备上重新执行。
当你使用 MonkeyRecorder 录制操作后,它会生成类似于以下的 Python 脚本:
# MonkeyRunner Script Example
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# Connect to the device
device = MonkeyRunner.waitForConnection()
# Perform some actions (example)
device.touch(100, 200, 'DOWN_AND_UP')
MonkeyRunner.sleep(1)
device.drag((100, 200), (300, 400), 1, 10)
# More actions can be added based on your recording
MonkeyRunner 还允许你编写自定义的 Python 脚本来自动化 Android 设备上的各种操作,如点击、滑动、输入文本等。你可以通过 Python 脚本模拟用户操作,并集成到更大的测试框架中。
通过 MonkeyRecorder,用户可以轻松录制 Android 设备上的交互操作并使用 MonkeyRunner 工具回放这些操作。这种方式不仅适用于测试,还可以用于自动化操作。
如果需要进一步详细的配置或遇到问题,随时可以继续讨论!
使用 Appium 进行 Android 操作录制和重放可以通过 Python 语言来实现。Appium 是一个开源的自动化工具,支持多种平台(如 Android 和 iOS)的应用程序自动化测试。你可以通过 Appium 客户端在 Python 中编写脚本来录制并重放 Android 设备上的操作。
npm install -g appium
pip
安装 Appium 的 Python 客户端:pip install Appium-Python-Client
appium
Desired Capabilities
配置如下:{
"platformName": "Android",
"platformVersion": "11.0",
"deviceName": "Android Emulator",
"appPackage": "com.android.calculator2",
"appActivity": ".Calculator"
}
如果你不使用 Appium Desktop 的录制功能,可以直接编写 Appium 脚本来控制 Android 设备的操作。以下是一个简单的 Appium Python 脚本示例,用于自动化 Android 设备上的基本操作。
from appium import webdriver
from time import sleep
# 设置 Desired Capabilities
desired_caps = {
"platformName": "Android",
"platformVersion": "11.0", # 根据你的设备版本
"deviceName": "Android Emulator", # 设备名称,可以是实际设备或模拟器
"appPackage": "com.android.calculator2", # 你想测试的应用程序包名
"appActivity": ".Calculator", # 应用的主 Activity
"automationName": "UiAutomator2" # 使用的自动化引擎
}
# 连接 Appium Server 并启动 Session
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
# 等待应用启动
sleep(5)
# 示例操作:点击数字 1
digit_one = driver.find_element_by_id("com.android.calculator2:id/digit_1")
digit_one.click()
# 示例操作:点击加号
plus_sign = driver.find_element_by_accessibility_id("plus")
plus_sign.click()
# 示例操作:点击数字 2
digit_two = driver.find_element_by_id("com.android.calculator2:id/digit_2")
digit_two.click()
# 示例操作:点击等号
equal_sign = driver.find_element_by_accessibility_id("equals")
equal_sign.click()
# 等待几秒以查看结果
sleep(2)
# 关闭会话
driver.quit()
platformName
: 平台类型(如 Android)。platformVersion
: Android 系统的版本号。
deviceName
: 设备的名称或模拟器的名称。
appPackage
和 appActivity
: 要启动的应用程序包名和主 Activity 名称。
automationName
: Appium 使用的自动化引擎,通常是 UiAutomator2
。
driver.find_element_by_id
或 driver.find_element_by_accessibility_id
来找到元素并进行点击等操作。录制完成后,你可以通过运行生成的 Python 脚本来重放操作。确保 Appium Server 正在运行,然后运行脚本:
python recorded_script.py
这将会在连接的 Android 设备上自动重现录制的操作。
录制 :通过 Appium Desktop 的录制功能,生成 Python 脚本,帮助你快速录制 Android 应用中的操作。
重放 :使用生成的 Python 脚本,通过 Appium 自动化执行操作,完成重放。
扩展 :你可以在脚本中添加更多的自动化测试内容,如断言(Assertions)来验证应用的状态。
通过以上步骤,你可以利用 Appium 实现 Android 操作的自动录制和回放。如果有任何问题或进一步的需求,欢迎继续讨论!