告别重复操作:用Python打造你的专属ADB自动化工具

告别重复操作:用Python打造你的专属ADB自动化工具

【免费下载链接】awesome-adb ADB Usage Complete / ADB 用法大全 【免费下载链接】awesome-adb 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-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存在两大痛点:

  1. 命令冗长:复杂操作需拼接多个参数,如adb -s 192.168.1.100:5555 shell pm list packages -3
  2. 无法批量执行:测试场景需手动依次输入命令

Python的 subprocess 模块能完美解决这些问题。通过封装ADB命令为Python函数,我们可以实现:

  • 一键执行多步骤测试流程
  • 实时解析命令输出并生成报告
  • 跨平台兼容(Windows/macOS/Linux)

ADB与Python集成架构

核心功能实现

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()

实战案例:自动化测试工具

下面我们整合上述功能,构建一个完整的应用测试工具。这个工具能实现:

  1. 连接指定设备
  2. 安装测试APK
  3. 启动应用并监控日志
  4. 自动截图并导出报告
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()

扩展资源与最佳实践

  1. 命令参考

    • 基础命令:README.md
    • 高级操作:README.md(含屏幕录制、WiFi密码查看等)
  2. 常见问题

    • 设备连接失败:检查开发者选项中的"USB调试"是否开启
    • 权限不足:尝试adb root命令(需设备已root)
  3. 性能优化

    • 避免频繁创建subprocess实例
    • 对长时间运行的命令使用超时控制

通过Python集成awesome-adb,我们不仅解放了双手,更实现了调试流程的标准化和可复用性。无论是日常测试还是批量设备管理,这套工具都能显著提升你的工作效率。现在就克隆项目仓库开始尝试吧:

git clone https://gitcode.com/gh_mirrors/aw/awesome-adb

项目结构概览:gh_mirrors/aw/awesome-adb
包含核心命令文档、相关工具脚本及资源文件

你准备好用Python+ADB解决什么问题了?是自动化测试、性能监控还是定制化设备管理?欢迎在评论区分享你的使用场景!

【免费下载链接】awesome-adb ADB Usage Complete / ADB 用法大全 【免费下载链接】awesome-adb 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-adb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值