告别手动点点点:用ADB+Python打造你的安卓设备自动化小助手
2026/6/13 7:53:28 网站建设 项目流程

告别手动点点点:用ADB+Python打造你的安卓设备自动化小助手

在移动互联网时代,安卓设备已经成为我们日常生活和工作的重要工具。然而,频繁的手动操作不仅效率低下,还容易出错。想象一下,如果你能通过几行代码自动完成应用安装、数据备份、定时任务等操作,那将节省多少宝贵时间?本文将带你深入探索如何将ADB命令与Python脚本结合,构建一个功能强大的个人设备自动化工具。

1. 环境准备与基础配置

1.1 ADB工具安装与配置

ADB(Android Debug Bridge)是谷歌提供的调试工具,它建立了PC与安卓设备之间的桥梁。要开始自动化之旅,首先需要正确安装和配置ADB环境:

  1. 下载平台工具包

    • 访问 官方下载页面 获取最新版本
    • Windows用户选择platform-tools-latest-windows.zip
  2. 配置环境变量

    # 将adb所在目录添加到系统PATH # Windows示例(假设解压到D:\platform-tools): setx /M PATH "%PATH%;D:\platform-tools"
  3. 验证安装

    adb version # 应显示类似以下信息 # Android Debug Bridge version 1.0.41

1.2 设备连接与授权

确保设备已开启开发者选项和USB调试模式:

不同品牌设备开启方式略有差异,通常在设置→关于手机→连续点击版本号7次可激活开发者选项

连接设备后,执行以下命令检查连接状态:

adb devices # 成功连接应显示设备序列号及状态 # List of devices attached # xxxxxxxx device

若设备未授权,需在设备上确认调试授权对话框。对于无线调试(Android 11+):

adb pair 192.168.x.x:xxxx # 配对码 adb connect 192.168.x.x:xxxx

2. Python与ADB的完美结合

2.1 使用subprocess调用ADB

Python的subprocess模块是与系统命令交互的利器。以下是一个基础封装类:

import subprocess from typing import Optional class ADBController: def __init__(self, device_id: Optional[str] = None): self.device_id = device_id def run_adb(self, command: str) -> str: """执行ADB命令并返回输出""" full_cmd = f"adb {f'-s {self.device_id} ' if self.device_id else ''}{command}" try: result = subprocess.run( full_cmd, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) return result.stdout.strip() except subprocess.CalledProcessError as e: print(f"命令执行失败: {e.stderr}") return ""

2.2 常用功能封装示例

设备信息获取

def get_device_info(self) -> dict: return { "model": self.run_adb("shell getprop ro.product.model"), "android_version": self.run_adb("shell getprop ro.build.version.release"), "resolution": self.run_adb("shell wm size"), "density": self.run_adb("shell wm density") }

应用管理

def install_app(self, apk_path: str) -> bool: output = self.run_adb(f"install -r {apk_path}") return "Success" in output def uninstall_app(self, package_name: str, keep_data=False) -> bool: flag = "-k " if keep_data else "" output = self.run_adb(f"uninstall {flag}{package_name}") return "Success" in output

3. 自动化实战项目

3.1 批量截图与整理系统

以下脚本实现定时截图并按日期分类存储:

from datetime import datetime import os def auto_screenshot(interval: int, duration: int): """定时截图 :param interval: 截图间隔(秒) :param duration: 总持续时间(秒) """ today = datetime.now().strftime("%Y%m%d") os.makedirs(f"screenshots/{today}", exist_ok=True) for i in range(duration // interval): timestamp = datetime.now().strftime("%H%M%S") self.run_adb(f"shell screencap -p /sdcard/screen_{timestamp}.png") self.run_adb(f"pull /sdcard/screen_{timestamp}.png screenshots/{today}/") time.sleep(interval)

3.2 游戏自动化测试框架

针对游戏测试需求,我们可以构建一个基于坐标操作的测试框架:

class GameTester: def __init__(self, adb: ADBController): self.adb = adb self.actions = [] def record_tap(self, x: int, y: int, delay=1): """记录点击动作""" self.actions.append(("tap", x, y, delay)) def record_swipe(self, x1: int, y1: int, x2: int, y2: int, duration=500): """记录滑动动作""" self.actions.append(("swipe", x1, y1, x2, y2, duration)) def execute(self, repeat=1): """执行记录的动作序列""" for _ in range(repeat): for action in self.actions: if action[0] == "tap": self.adb.run_adb(f"shell input tap {action[1]} {action[2]}") time.sleep(action[3]) elif action[0] == "swipe": self.adb.run_adb(f"shell input swipe {action[1]} {action[2]} {action[3]} {action[4]} {action[5]}")

4. 高级技巧与优化

4.1 多设备并行控制

当需要管理多台设备时,可以扩展我们的ADBController:

class MultiDeviceManager: def __init__(self): self.devices = {} self._detect_devices() def _detect_devices(self): output = subprocess.getoutput("adb devices") for line in output.splitlines()[1:]: if line.strip() and "device" in line: device_id = line.split("\t")[0] self.devices[device_id] = ADBController(device_id) def run_on_all(self, command: str): """在所有设备上执行相同命令""" results = {} for device_id, controller in self.devices.items(): results[device_id] = controller.run_adb(command) return results

4.2 性能监控与日志分析

结合ADB命令和Python数据分析库,可以构建设备监控系统:

import pandas as pd from io import StringIO def get_cpu_usage(self) -> pd.DataFrame: """获取CPU使用情况""" output = self.run_adb("shell top -n 1 -b") return pd.read_csv(StringIO(output), sep=r"\s+", skiprows=[0], header=None) def monitor_performance(interval=5, duration=60): """性能监控""" data = [] start_time = time.time() while time.time() - start_time < duration: cpu_data = get_cpu_usage() mem_data = self.run_adb("shell cat /proc/meminfo") # 解析内存数据... data.append({ "timestamp": datetime.now(), "cpu_usage": cpu_data.iloc[0][9], # 第一个进程的CPU使用率 "free_mem": parse_meminfo(mem_data)["MemFree"] }) time.sleep(interval) return pd.DataFrame(data)

4.3 异常处理与重试机制

健壮的自动化系统需要完善的错误处理:

from functools import wraps import time def retry(max_attempts=3, delay=1): """重试装饰器""" def decorator(func): @wraps(func) def wrapper(*args, **kwargs): last_error = None for attempt in range(max_attempts): try: return func(*args, **kwargs) except Exception as e: last_error = e print(f"尝试 {attempt + 1}/{max_attempts} 失败: {e}") time.sleep(delay) raise Exception(f"所有尝试失败: {last_error}") return wrapper return decorator @retry(max_attempts=5, delay=2) def reliable_adb_command(self, command: str): """带重试机制的ADB命令""" return self.run_adb(command)

5. 项目扩展与生态整合

5.1 与Tasker等自动化工具联动

通过ADB可以扩展Tasker等自动化工具的能力:

def trigger_tasker_profile(self, profile_name: str): """触发Tasker配置文件""" self.run_adb(f"shell am broadcast -a net.dinglisch.android.tasker.ACTION_TASK " f"-e tn \"{profile_name}\"")

5.2 构建Web控制界面

使用Flask等框架为自动化脚本添加Web控制端:

from flask import Flask, jsonify, request app = Flask(__name__) adb = ADBController() @app.route('/api/screenshot', methods=['POST']) def take_screenshot(): filename = f"screen_{datetime.now().strftime('%Y%m%d_%H%M%S')}.png" adb.run_adb(f"shell screencap -p /sdcard/{filename}") adb.run_adb(f"pull /sdcard/{filename} static/screenshots/") return jsonify({"status": "success", "file": filename}) @app.route('/api/apps', methods=['GET']) def list_apps(): apps = adb.run_adb("shell pm list packages -3").splitlines() return jsonify({"user_apps": [pkg.replace("package:", "") for pkg in apps]})

5.3 定时任务管理系统

结合APScheduler实现复杂的定时任务:

from apscheduler.schedulers.background import BackgroundScheduler scheduler = BackgroundScheduler() def schedule_daily_backup(): """每天凌晨备份指定应用数据""" @scheduler.scheduled_job('cron', hour=2) def job(): adb.run_adb("shell pm list packages -3 > apps.txt") # 处理备份逻辑... scheduler.start()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询