1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| import subprocess
import time
import os
class AdbWrapper:
def __init__(self, device_id=None):
self.device_id = device_id
def run_cmd(self, cmd):
adb_cmd = ["adb"]
if self.device_id:
adb_cmd.extend(["-s", self.device_id])
adb_cmd.extend(cmd)
try:
result = subprocess.run(
adb_cmd,
capture_output=True,
text=True,
check=True
)
return result.stdout.strip()
except subprocess.CalledProcessError as e:
print(f"Error running command {' '.join(adb_cmd)}: {e.stderr}")
return None
def install(self, apk_path):
print(f"Installing {apk_path}...")
return self.run_cmd(["install", "-r", apk_path])
def uninstall(self, package_name):
print(f"Uninstalling {package_name}...")
return self.run_cmd(["uninstall", package_name])
def start_app(self, package_name, activity_name):
print(f"Starting {package_name}/{activity_name}...")
return self.run_cmd(["shell", "am", "start", "-n", f"{package_name}/{activity_name}"])
def stop_app(self, package_name):
print(f"Stopping {package_name}...")
return self.run_cmd(["shell", "am", "force-stop", package_name])
def clear_data(self, package_name):
print(f"Clearing data for {package_name}...")
return self.run_cmd(["shell", "pm", "clear", package_name])
def click(self, x, y):
return self.run_cmd(["shell", "input", "tap", str(x), str(y)])
def swipe(self, x1, y1, x2, y2, duration=500):
return self.run_cmd(["shell", "input", "swipe", str(x1), str(y1), str(x2), str(y2), str(duration)])
def input_text(self, text):
# Note: special characters might need escaping
return self.run_cmd(["shell", "input", "text", text])
def screenshot(self, remote_path="/sdcard/screenshot.png", local_path="screenshot.png"):
self.run_cmd(["shell", "screencap", "-p", remote_path])
self.run_cmd(["pull", remote_path, local_path])
print(f"Screenshot saved to {local_path}")
# 使用示例
if __name__ == "__main__":
adb = AdbWrapper() # 默认连接第一个设备
# 打印连接的设备
print("Devices:", adb.run_cmd(["devices"]))
# adb.start_app("com.example.app", "com.example.app.MainActivity")
# time.sleep(5)
# adb.click(500, 1000)
# adb.screenshot()
|