【无标题】

ADBLab

项目概览 项目地址点击直接跳转

ADBLab 是一款基于 PySide6 的 Android 设备管理、自动化测试与性能诊断桌面工具。项目将常用 ADB、scrcpy、logcat、dumpsys、gfxinfo、meminfo 等能力封装为图形界面,适合日常设备调试、应用管理、投屏控制、Monkey 压测、文件操作和性能巡检。

项目 当前状态
应用版本 3.0.0,来源于 utils/app_metadata.py
开发语言 Python,建议使用 Python 3.11
GUI 框架 PySide6 / Qt 6
主要平台 Windows 10/11
内置工具 scrcpy-win64-v3.3.1/,包含 adb.exescrcpy.exe
作者 Frankie Hu (Copyright © 2026)

快速启动

bash 复制代码
pip install -r requirements.txt
python main.py

当前功能

设备与基础操作

  • IP/USB 设备连接、断开、刷新、重启和多选批量操作。
  • 设备信息读取:品牌、型号、Android 版本、SDK、CPU、分辨率、内存、存储、网络信息等。
  • ADB Server 重启、TCP/IP 模式、端口 forward/reverse、系统 reboot 模式切换。
  • 左侧设备列表持续扫描 USB 设备,支持历史设备与连接记录。

应用管理与测试

  • 获取当前前台包名,支持 focus 优先检测和 activity/window 回退。
  • 安装、卸载、清数据、强停、重启、禁用、启用、disable-user。
  • 本地 APK 解析,读取包名、版本、权限、架构等信息。
  • Monkey 压力测试:事件占比、事件数、throttle、flags、随机种子、按设备中止。
  • Bugreport、ANR 拉取、logcat 导出/清理、meminfo、cpuinfo、gfxinfo、top、wakelock、netstats 等诊断入口。
  • 临时邮箱能力:通过 core/mail/ 调用 AMZ123 API 获取邮箱与验证码。

Remote 投屏控制

  • 内置 scrcpy v3.3.1,支持流畅/均衡/画质/低延迟预设。
  • 自定义分辨率、FPS、码率、codec、buffer、方向锁定、录制文件。
  • 支持全屏、置顶、显示触摸、保持唤醒、关闭设备屏幕、无窗口、无音频。
  • models/remote/ 提供原生无界面服务层:
    • ScrcpyService:scrcpy 路径解析、版本检测、预检、编码器检测、启动/停止、FPS 解析。
    • RemoteControlService:按键、D-Pad、滑动、通知栏、旋转等 ADB 控制。
    • control_mapping.py:keycode 和手势坐标计算。
    • scrcpy_args.py:集中构建 scrcpy 参数。
  • Remote 保留 ADBLab 自有 PySide6 UI,不嵌入 guiscrcpy 的 Qt UI/launcher 栈。

文件浏览器

  • 浏览设备文件系统,支持路径栏、后退/前进/上级导航、搜索过滤。
  • 拉取、推送、删除、重命名、新建文件/文件夹、复制/剪切/粘贴。
  • 文本和图片查看,脚本执行,APK 直接安装,文件属性查看。
  • chmod 权限弹窗与 root 模式。
  • models/file_explorer_service.py 是无 Qt 依赖的纯逻辑层,负责路径处理、shell quoting、ls -la 解析、权限模式和文件名安全校验。

性能监控

  • 工具栏提供 Performance 入口,必须先选中设备;弹窗标题会带上当前设备名称。
  • gui/dialogs/performance_launcher.py 提供 MobilePerf 启动弹窗,支持获取当前前台包名、配置采样频率/时长/Monkey/dumpheap/异常关键字、启动/停止采集、打开结果目录和跳转 Perfetto。
  • MobilePerf 结果目录会追加设备名称,方便区分多设备保存文件。
  • MobilePerf 日志使用纯文本批量追加,保留工具原始输出,不再额外叠加 ADBLab 时间和等级前缀,避免长时间运行导致主界面卡顿。
  • mobileperf/ 保持独立移植目录;ADBLab 通过 models/mobileperf/runner.py 生成临时配置并启动子进程,不直接修改 mobileperf/config.conf
  • 原 Perfetto 跳转已移动到 Performance 弹窗内的 Open Perfetto 按钮。
  • gui/dialogs/performance_monitor.py 提供单设备性能弹窗,gui/dialogs/performance_timeline.py 提供原生时间线图。
  • gui/performance_web/ 提供可选 Web 仪表盘资源:index.htmlstyle.cssapp.js
  • models/performance/ 提供采集、解析、会话、报告和 worker 层:
    • 启动耗时:am start -S -W 与 logcat Displayed / Fully drawn 解析。
    • 帧率与卡顿:dumpsys gfxinfo <package> framestats 统计。
    • 内存:dumpsys meminfo 的 PSS、Java Heap、Native Heap、Graphics、Views、Activities 等字段。
    • CPU:读取 /proc/<pid>/stat/proc/stat 做进程 CPU delta。
    • 设备信息:getprop、cpuinfo、meminfo、SurfaceFlinger、root 状态等。
    • 报告:生成 summary、metrics、文本报告和趋势分析所需数据。

弹窗与工具

  • 主窗口工具栏提供置顶按钮,状态保存到 AppSettings["always_on_top"];Windows 运行时切换使用原生窗口置顶,不重建主界面。
  • 应用管理器:表格/网格视图、搜索过滤、批量操作、备份/恢复、权限管理、JSON 预设。
  • 实时 Logcat:等级、包名、Tag 过滤,语法高亮,导出文本。
  • 截图查看器:多图导航、缩放、复制、另存为、打开目录、删除。
  • Monkey、Remote、MobilePerf 弹窗和面板响应全局主题、字体、图标刷新和深浅色切换。
  • 设置弹窗:主题、字体、窗口尺寸、面板宽度、保存目录、日志行数、危险操作确认、持续扫描等。

项目结构

text 复制代码
ADBLab/
├── main.py                         # 程序入口,设置 Windows AppUserModelID、主题和主窗口
├── requirements.txt                # 运行与打包依赖
├── pyproject.toml                  # black / ruff 配置,目标语法 py310
├── ADBLab.spec                     # PyInstaller 打包配置
├── README.md
├── icon.ico
├── mobileperf/                     # MobilePerf 移植内核,保持独立目录
├── .github/workflows/
│   ├── Build-exe.yaml              # 构建 exe 并发布 GitHub Release
│   └── Auto-Clean.yaml             # 清理旧 workflow runs / releases
│
├── core/                           # 核心基础设施
│   ├── adb_bridge.py               # 轻量 ADB 桥接
│   ├── log_service.py              # 线程安全日志服务,跨线程 flush 回到 owner thread
│   ├── settings_manager.py         # 应用设置单例,JSON 原子写入
│   └── mail/                       # 临时邮箱 API 与异步任务
│
├── controllers/                    # Controller 层,多个 mixin 组合成 ADBController
│   ├── __init__.py
│   ├── _base.py                    # model、signals、handler_map 分发
│   ├── _device.py                  # 设备连接与设备信息
│   ├── _app.py                     # 应用管理、Monkey、日志、Bugreport
│   ├── _system.py                  # 系统命令、广播、Activity、输入法、模拟器
│   ├── _media.py                   # 截图、录屏、性能基础项、电池
│   ├── _input.py                   # 文本输入、点击、滑动、keyevent、settings
│   └── _file.py                    # 文件、端口、content query
│
├── models/                         # Model 与服务层
│   ├── adb_model.py                # @async_command 与 ADBModelCore
│   ├── adb_device.py               # 设备操作
│   ├── adb_app.py                  # 应用操作
│   ├── adb_testing.py              # Monkey、Bugreport、ANR、日志
│   ├── adb_advanced.py             # 录屏、输入、性能基础项、logcat
│   ├── adb_network.py              # 网络 ADB mixin
│   ├── adb_system.py               # 系统 ADB mixin
│   ├── app_manager_worker.py       # 应用管理器 worker
│   ├── file_explorer_worker.py     # 文件浏览器 QThread worker
│   ├── file_explorer_service.py    # 文件浏览器纯逻辑服务
│   ├── device_store.py             # YAML 设备信息持久化
│   ├── base/
│   │   ├── command_runner.py       # 短生命周期命令统一入口
│   │   ├── process_runner.py       # 长生命周期进程统一管理
│   │   └── focus_detector.py       # 前台包名检测
│   ├── remote/                     # Remote / scrcpy 无界面服务层
│   ├── mobileperf/                 # MobilePerf runner、临时配置与日志/结果管理
│   └── performance/                # 性能监控服务、解析、会话、报告、workers
│
├── gui/                            # PySide6 视图层
│   ├── main_frame.py               # 主窗口、工具栏、QSplitter、信号接线
│   ├── panels/                     # 右侧 Apps/System/Remote 面板与左侧设备/日志面板
│   ├── dialogs/                    # About、App Manager、File Explorer、Logcat、Performance、Screenshot、Settings
│   ├── performance_web/            # 性能监控 Web 仪表盘静态资源
│   ├── styles/                     # 主题、QSS、字体、图标加载
│   └── widgets/                    # 自定义控件
│
├── utils/
│   ├── app_metadata.py             # 应用版本单一事实来源
│   ├── resource_path.py            # 开发/打包资源路径解析
│   ├── adb_resolver.py             # 内置 ADB 路径解析
│   └── batch_tracker.py            # 多设备批量进度追踪
│
├── tests/
│   ├── test_model_execution.py
│   ├── test_remote_services.py
│   ├── test_file_explorer_service.py
│   └── test_performance_services.py
│
├── resources/                      # 设置、历史、预览图、二维码、图标、Bugreport 转换器
└── scrcpy-win64-v3.3.1/            # Windows 版 adb/scrcpy 运行时

架构说明

MVC + 信号/槽

text 复制代码
用户操作 Panel/Dialog
  → 发出 Qt signal
  → ADBController 或弹窗本地 worker 接收
  → Model / Service 通过 CommandRunner 或 ProcessRunner 执行
  → Worker / Model 发回结果
  → Controller / Dialog 更新日志、状态和界面

核心原则:

  • UI 只负责交互、状态展示和信号连接。
  • 短命令统一走 CommandRunner.run()
  • 长生命周期任务统一走 ProcessRunner.start() / ProcessRunner.spawn()
  • UI 层不能直接调用 subprocess.run()subprocess.Popen()os.startfile()
  • Remote、File Explorer、Performance 的复杂逻辑都放入无 Qt 或低 Qt 耦合的服务层,便于单测和复用。

线程模型

  • 主线程:Qt 事件循环和 UI 渲染。
  • 普通异步 ADB 命令:@async_command 包装成 QRunnable,交给 QThreadPool
  • 弹窗级任务:App Manager、File Explorer、Performance 使用专用 QThread/worker。
  • 长进程:Monkey、Logcat、scrcpy、性能采样等由 ProcessRunner 管理进程生命周期。
  • 日志:LogService 批量缓冲刷新,并通过 Qt 信号把跨线程 flush 调回 owner thread。

当前服务拆分

服务层 文件 说明
命令执行 models/base/command_runner.py ADB 与短命令统一执行入口,规范输出与 timeout
进程执行 models/base/process_runner.py 管理长生命周期进程,支持 stop、spawn、stop_all
Remote models/remote/ scrcpy 参数、预检、启动、FPS、按键与手势控制
File Explorer models/file_explorer_service.py shell quoting、路径、权限、文件列表解析
MobilePerf models/mobileperf/ + mobileperf/ 临时 config、子进程启动/停止、日志批量回传、结果目录定位
Performance models/performance/ 指标采集、解析、报告、会话、时间线数据
设置 core/settings_manager.py 应用配置 JSON 原子写入和自动保存
日志 core/log_service.py 线程安全日志缓冲与 UI 刷新

依赖

requirements.txt 当前内容:

版本 用途
PySide6 / PySide6_Addons / PySide6_Essentials 6.8.1.1 Qt 6 GUI
PyYAML 6.0.2 YAML 解析
ruamel.yaml / ruamel.yaml.clib / ruamel.base latest / 1.0.0 YAML 读写
Requests 2.32.5 HTTP 请求,临时邮箱 API
Pillow 未固定 图片相关处理
pyinstaller 未固定 Windows exe 打包

系统侧依赖:

  • Windows 10/11。
  • ADB:已内置在 scrcpy-win64-v3.3.1/
  • scrcpy:已内置 Windows 版 scrcpy.exe
  • aapt:用于本地 APK 解析,需外部提供。
  • Java JRE:用于运行 resources/chkbugreport-0.5-215.jar

测试与验证

当前测试目录覆盖:

  • tests/test_model_execution.py:命令/进程执行层与 ADB model 行为。
  • tests/test_remote_services.py:Remote scrcpy 参数、预检、按键/手势映射。
  • tests/test_file_explorer_service.py:文件浏览器路径、quoting、ls 解析、权限模式。
  • tests/test_performance_services.py:性能指标解析、采样、报告、dashboard 数据。
  • MobilePerf/Performance 入口、置顶切换、Monkey/Remote 字体主题刷新等 UI 行为集中在 tests/test_model_execution.py 中做轻量回归。

建议改动后至少执行:

bash 复制代码
py -3.11 -m compileall mobileperf models gui tests
py -3.11 -m pytest tests -q
git diff --check

文档或中文内容改动后,建议使用 UTF-8 读回确认,避免 Windows 终端编码显示误判:

bash 复制代码
python -c "from pathlib import Path; print(Path('README.md').read_text(encoding='utf-8')[:120])"

相关推荐
MATLAB代码顾问1 小时前
Python数据分析项目实战:销售数据仪表盘
开发语言·python·数据分析
码云骑士1 小时前
07-Python装饰器从入门到源码(下)-带参数装饰器与wraps
开发语言·python
KIO no way1 小时前
AI发布工作流配置指南_用CSDN_AI数字营销把分发自动化
人工智能·python·自动化
码云骑士2 小时前
09-Python模块导入机制-sys.path与循环导入的死锁式排查
开发语言·python
天佑木枫2 小时前
第5天:循环 —— 让程序重复执行
python
聆风吟º2 小时前
【Python编程日志】Python基础数据类型完整梳理
开发语言·python·数据类型
盼小辉丶2 小时前
OpenCV-Python实战(28)——OpenCV计算摄影从HDR图像融合到全景拼接
python·opencv·计算机视觉
shchojj2 小时前
ChatGPT Prompt Engineering for Developers - Expanding
开发语言·python·prompt
努力的lpp2 小时前
渗透主流工具完整参数手册(sqlmap、Nmap、Hydra、Dirsearch、Xray)
javascript·网络协议·测试工具·安全·http·工具