告别重复操作:用Python打造你的专属ADB自动化工具
你是否还在为重复执行ADB(Android Debug Bridge,安卓调试桥)命令而烦恼?手动输入adb shell am start启动应用,再敲adb logcat抓取日志,最后还要adb pull导出文件——这些机械操作不仅浪费时间,还容易出错。本文将带你用Python集成awesome-adb项目,构建一套自动化调试工具,让你的Android调试效率提升10倍。
为什么选择Python+ADB?
ADB作为Android开发的多功能工具,提供了设备管理、应用控制、文件传输等核心功能(完整命令集参见README.md)。但原生ADB存在两大痛点:
- 命令冗长:复杂操作需拼接多个参数,如
adb -s 192.168.1.100:5555 shell pm list packages -3 - 无法批量执行:测试场景需手动依次输入命令
Python的 subprocess 模块能完美解决这些问题。通过封装ADB命令为Python函数,我们可以实现:
- 一键执行多步骤测试流程
- 实时解析命令输出并生成报告
- 跨平台兼容(Windows/macOS/Linux)
核心功能实现
1. 设备连接管理
设备连接是ADB操作的基础。以下代码能自动检测已连接设备,并支持USB/无线两种连接模式:
import subprocess
def get_connected_devices():
"""获取所有已连接设备列表"""
result = subprocess.run(
["adb", "devices"],
capture_output=True,
text=True
).stdout
devices = []
for line in result.splitlines()[1:]:
if "device" in line:
devices.append(line.split()[0])
return devices
# 无线连接示例(Android 11+)
def connect_wireless(ip, port=5555):
"""无线连接设备(需先通过USB配对)"""
subprocess.run(["adb", "tcpip", str(port)])
subprocess.run(["adb", "connect", f"{ip}:{port}"])
完整设备管理命令可参考README.md中的"无线连接(Android11及以上)"章节
2. 应用自动化控制
结合pm(Package Manager,包管理器)和am(Activity Manager,活动管理器)命令,我们可以实现应用的安装、启动和数据清理一条龙操作:
def install_apk(apk_path, device_id=None):
"""安装APK文件"""
cmd = ["adb"]
if device_id:
cmd.extend(["-s", device_id])
cmd.extend(["install", "-r", apk_path]) # -r参数保留数据
subprocess.run(cmd, check=True)
def start_app(package_name, activity_name, device_id=None):
"""启动应用指定Activity"""
cmd = ["adb"]
if device_id:
cmd.extend(["-s", device_id])
cmd.extend([
"shell", "am", "start",
f"{package_name}/{activity_name}"
])
subprocess.run(cmd)
def clear_app_data(package_name, device_id=None):
"""清除应用数据和缓存"""
cmd = ["adb"]
if device_id:
cmd.extend(["-s", device_id])
cmd.extend(["shell", "pm", "clear", package_name])
subprocess.run(cmd)
pm命令参数详解:related/pm.md
am命令参数详解:related/am.md
3. 日志实时监控
通过实时解析adb logcat输出,我们可以构建自定义日志监控系统,及时捕获应用崩溃信息:
import threading
def monitor_logs(package_name, callback, device_id=None):
"""实时监控应用日志"""
cmd = ["adb"]
if device_id:
cmd.extend(["-s", device_id])
cmd.extend(["shell", "logcat", f"--pid=$(pidof -s {package_name})"])
def log_reader():
with subprocess.Popen(
cmd, stdout=subprocess.PIPE, text=True
) as proc:
for line in proc.stdout:
if "AndroidRuntime: FATAL EXCEPTION" in line:
callback(f"应用崩溃: {line}")
threading.Thread(target=log_reader, daemon=True).start()
实战案例:自动化测试工具
下面我们整合上述功能,构建一个完整的应用测试工具。这个工具能实现:
- 连接指定设备
- 安装测试APK
- 启动应用并监控日志
- 自动截图并导出报告
import time
from datetime import datetime
class ADBAutomator:
def __init__(self, device_id=None):
self.device_id = device_id
self.logs = []
def take_screenshot(self, output_path):
"""截取设备屏幕"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
temp_path = f"/sdcard/screenshot_{timestamp}.png"
cmd = ["adb"]
if self.device_id:
cmd.extend(["-s", self.device_id])
cmd.extend(["shell", "screencap", "-p", temp_path])
subprocess.run(cmd)
# 拉取到本地
subprocess.run(["adb", "pull", temp_path, output_path])
return output_path
# 使用示例
if __name__ == "__main__":
automator = ADBAutomator(device_id="192.168.1.100:5555")
# 执行测试流程
automator.install_apk("test_app.apk")
automator.start_app("com.example.test", ".MainActivity")
automator.monitor_logs("com.example.test", print)
# 模拟用户操作
time.sleep(10) # 等待应用启动
automator.take_screenshot("./test_result.png")
automator.clear_app_data("com.example.test")
进阶技巧:构建图形化界面
对于非技术人员,可以使用Tkinter或PyQt将工具封装为图形界面。以下是Tkinter实现的简易控制面板:
import tkinter as tk
from tkinter import filedialog
class ADBGUI:
def __init__(self, root):
self.root = root
self.root.title("ADB自动化工具")
# 设备选择下拉框
tk.Label(root, text="设备:").grid(row=0, column=0)
self.device_var = tk.StringVar(value=get_connected_devices())
tk.OptionMenu(root, self.device_var, *get_connected_devices()).grid(row=0, column=1)
# 安装APK按钮
tk.Button(root, text="安装APK", command=self.install_apk_gui).grid(row=1, column=0)
def install_apk_gui(self):
apk_path = filedialog.askopenfilename(filetypes=[("APK文件", "*.apk")])
if apk_path:
install_apk(apk_path, self.device_var.get())
# 启动GUI
root = tk.Tk()
app = ADBGUI(root)
root.mainloop()
扩展资源与最佳实践
-
命令参考
-
常见问题
- 设备连接失败:检查开发者选项中的"USB调试"是否开启
- 权限不足:尝试
adb root命令(需设备已root)
-
性能优化
- 避免频繁创建subprocess实例
- 对长时间运行的命令使用超时控制
通过Python集成awesome-adb,我们不仅解放了双手,更实现了调试流程的标准化和可复用性。无论是日常测试还是批量设备管理,这套工具都能显著提升你的工作效率。现在就克隆项目仓库开始尝试吧:
git clone https://gitcode.com/gh_mirrors/aw/awesome-adb
项目结构概览:gh_mirrors/aw/awesome-adb
包含核心命令文档、相关工具脚本及资源文件
你准备好用Python+ADB解决什么问题了?是自动化测试、性能监控还是定制化设备管理?欢迎在评论区分享你的使用场景!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




