pure-python-adb 插件体系深度解析:6大内置插件监控CPU、内存、电池与流量
pure-python-adb 插件体系深度解析:6大内置插件监控CPU、内存、电池与流量
【免费下载链接】pure-python-adbThis is pure-python implementation of the ADB client.项目地址: https://gitcode.com/gh_mirrors/pu/pure-python-adb
pure-python-adb(导入名ppadb)是一个纯 Python 实现的 ADB 客户端库,无需安装 Android SDK 即可在 Python 中操控设备。它的亮点在于一套开箱即用的内置插件体系:CPU 占用、内存消耗、电池电量、流量统计、输入模拟、屏幕参数六大能力全部以插件形式内置,一行方法调用即可完成监控。本文将带你完整看懂这套插件架构,并学会如何扩展自己的插件。
为什么不用 adb 命令行,而用纯 Python 客户端?
传统方式是用adb命令行工具连接 adb server:
命令行方式每次都要解析文本输出,写自动化脚本非常繁琐。而pure-python-adb直接以 Python 库的身份连接 adb server(默认127.0.0.1:5037),返回结构化对象——CPU 统计是对象、内存信息是对象、电量是整数,天然适合写监控脚本和自动化测试。
💡 核心体验:同样的监控逻辑,adb 命令需要写十几行 shell + 正则解析,用 ppadb 只需
device.cpu_percent(1)一行。
插件体系如何工作:Device 类的多重继承
理解这套体系的关键在 ppadb/device.py:
class Device(Transport, Serial, Input, Utils, WM, Traffic, CPUStat, BatteryStats): passDevice类通过多重继承同时混入了所有插件类,因此你拿到的每一个device对象都自动拥有全部插件的方法。所有插件都继承自同一个极简基类 Plugin,它只要求你实现shell(cmd, handler=None, timeout=None)方法——这意味着任何插件本质上就是"会执行 shell 命令并解析结果的一族方法"。
6 个内置插件源码全部位于 ppadb/plugins/device/ 目录:
| 插件 | 源码文件 | 核心能力 |
|---|---|---|
| 🧮 CPUStat | cpustat.py | CPU 占用率、核数、进程/线程 CPU |
| 📊 Utils | utils.py | 内存占用、前台 Activity、PID/UID |
| 🔋 BatteryStats | batterystats.py | 电池电量、电池统计数据 |
| 📶 Traffic | traffic.py | 按应用统计网络流量 |
| 🖱️ Input | input.py | 模拟点击、滑动、按键、输入文字 |
| 📐 WM | wm.py | 屏幕分辨率与密度 |
插件一:CPUStat——实时监控 CPU 使用率
CPUStat 通过读取/proc/stat计算整机 CPU 占用,是性能监控最常用的插件:
cpu_percent(interval=1):两次采样相减,返回整机 CPU 使用率百分比cpu_count():返回 CPU 核心数量get_pid_cpu(pid):返回指定进程的 CPU 统计(ProcessCPUStat 对象)get_all_thread_cpu(pid):返回进程内每个线程的 CPU 统计
设计很精巧:TotalCPUStat对象支持+和-运算符重载,采样相减后直接算出使用率,无需手动处理内核累计时间。
插件二:Utils——查询内存占用与前台 Activity
Utils 插件覆盖了日常调试的高频需求:
get_meminfo(package_name):返回应用的 MemInfo 对象,包含PSS、私有脏页、堆大小等 7 项内存指标get_top_activity()/get_top_activities():获取当前屏幕最上层 Activity(包名 + Activity 名 + PID),自动化测试判断"是否跳转成功"就靠它get_pid()/get_uid():自动兼容不同系统的ps命令差异get_package_version_name():读取应用版本号
插件三:BatteryStats——电池电量与耗电量统计
BatteryStats 提供两个层次的数据:
get_battery_level():通过dumpsys battery一键获取当前电量百分比get_batterystats():解析dumpsys batterystats -c输出,按区块(section)返回结构化的电池统计数据,区块模型定义在 batterystats_section.py
配合 scripts/batterystats_codegen.py 这个代码生成脚本,区块解析类可以自动生成,维护成本极低。
插件四:Traffic——精确到每个 App 的流量监控
Traffic 插件调用get_traffic(package_name)后,先查出应用的 UID,再从/proc/net/xt_qtaguid/stats读取计数,返回一组 TrafficState 对象,包含上下行字节数、包数,以及 TCP/UDP/其他的分项统计——做流量审计、排查偷跑流量时非常实用。
插件五:Input——模拟点击、滑动与按键
Input 封装了 Androidinput命令:
input_text(string):输入一段文字input_tap(x, y)/input_swipe(x1, y1, x2, y2, duration):点击与滑动input_keyevent(keycode):发送按键事件(支持长按)
配套的按键码常量表在 ppadb/keycode.py,无需死记 KEYCODE 编号。
插件六:WM——获取屏幕分辨率与密度
WM 插件只有两个方法,却是自动化"必配":wm_size()返回 Size 宽高对象,wm_density()返回屏幕密度倍数(160dpi 为 1.0)。做跨设备自动化时,先取分辨率再按比例换算坐标,就不用手写死坐标了。
快速上手:3 行代码开始设备监控
安装后连接设备,即可串联使用全部插件:
from ppadb.client import Client as AdbClient client = AdbClient() # 默认连接 127.0.0.1:5037 device = client.device("emulator-5554") print(device.cpu_percent(1)) # CPU 使用率(%) print(device.get_battery_level()) # 电池电量(%) print(device.get_meminfo("com.example.app")) # 应用内存信息 print(device.get_traffic("com.example.app")) # 应用流量统计 print(device.wm_size()) # 屏幕分辨率完整示例可参考 example/screencap.py,插件行为覆盖见 test/test_plugins.py。
如何扩展:自己写一个插件
得益于插件基类只有shell()一个方法,扩展成本几乎为零:新建一个继承 Plugin 的类,把 shell 命令解析成方法,再混入Device即可。整个体系的设计哲学可以概括为一句话——插件 = shell 命令 + 结构化解析,这也是它简洁却强大的原因。
📌小结:pure-python-adb 的 6 大内置插件用多重继承方式把 CPU、内存、电池、流量、输入、屏幕六大监控能力整合进Device对象,让你不依赖 Android SDK 就能用纯 Python 完成设备状态监控与自动化操作,是自动化测试和监控脚本的理想选择。
【免费下载链接】pure-python-adbThis is pure-python implementation of the ADB client.项目地址: https://gitcode.com/gh_mirrors/pu/pure-python-adb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
