You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

8.1 KiB

项目修改记录

2025-08-07

Python版本兼容性分析

  • 分析了 requirements.txt 中的依赖包版本
  • 确定支持的Python版本范围:3.8 - 3.11
  • 推荐使用Python 3.9或3.10版本

pip编码问题修复

  • 修复了 requirements.txt 中中文注释导致的GBK编码错误
  • 将中文注释改为英文注释
  • 建议升级pip版本到最新版本

adbutils版本修复

  • 修复了 adbutils==2.0.0 版本不存在的问题
  • 更新为 adbutils==2.10.0(有效的最新版本)

配置模块导出修复

  • 修复了 ProtocolTypeDeviceStatus 无法从 app.core.config 导入的问题
  • app/core/config/__init__.py 中添加了这两个类的导入和导出

设备管理器导入路径修复

  • 修复了多个服务文件中 device_manager 导入路径错误的问题
  • from app.core.device_manager import device_manager 改为 from app.core.device.manager import device_manager
  • 修复了多个API端点文件中的导入路径错误

服务类名称修复

  • 修复了 app/core/device/dispatcher.py 中服务类名称错误的问题
  • ADBServiceSSHServiceATServicePLNKServiceATXService 改为 AdbServiceSshServiceAtServicePlnkServiceAtxService

未使用的导入清理

  • 移除了 app/api/v1/endpoints/adb.py 中未使用的 UploadFileFile 导入
  • 这解决了 python-multipart 依赖问题

警告过滤添加

  • run.py 中添加了 warnings.filterwarnings 来忽略paramiko的弃用警告
  • 解决了 TripleDES 加密算法弃用警告

USB监控模块删除

  • 删除了 app/api/v1/endpoints/usb_monitor.py 文件
  • 该文件依赖不存在的 device_monitor_manager 服务
  • 更新了 app/core/app/router.pyapp/api/v1/endpoints/__init__.py 中的相关引用
  • 这解决了路由注册时的导入错误问题

路由管理器实例调用修复

  • 修复了 app/core/app/factory.py 中路由注册失败的问题
  • RouterManager.register_all_routers(app) 改为使用全局实例 router_manager.register_all_routers(app)
  • 解决了 "路由注册失败" 错误,因为之前错误地调用了类方法而不是实例方法

python-multipart依赖启用

  • requirements.txt 中启用了 python-multipart==0.0.6 依赖
  • 解决了FastAPI路由注册时提示需要安装python-multipart的错误
  • 虽然代码中没有直接使用表单数据,但FastAPI在某些情况下会自动检测到可能需要处理表单数据

导入路径修复

  • 修复了 app/services/enhanced_adb_service.py 中错误的导入路径
  • from app.core.adb_client import AdbClient 改为 from app.core.adb import AdbClient
  • from app.core.adb_exceptions import ... 改为 from app.core.exceptions import ...
  • 修复了 test_exception_handling.py 中的多个导入路径错误
  • 解决了 "No module named 'app.core.adb_client'" 的导入错误

AdbClient API适配修复

  • 修复了 app/services/enhanced_adb_service.pyAdbClient 构造函数调用错误
  • AdbClient(host, port) 改为 AdbClient(),并将host和port保存为实例变量
  • 修复了方法调用不匹配的问题:
    • get_server_info() 改为使用 server_version()
    • list_devices() 改为使用 devices()
    • execute_shell_command() 改为使用 shell()
    • list_forward_ports() 改为使用 forward_list()
  • 添加了状态字符串到枚举的转换逻辑
  • 解决了 "AdbClient.init() takes 1 positional argument but 3 were given" 错误

2025-08-07 - 修复路由注册失败问题

问题描述

应用启动时出现路由注册失败错误:

{"timestamp": "2025-08-07T16:10:55.327368", "level": "ERROR", "message": "路由注册失败", "logger_name": "app.core.app.router", "context": {"request_id": null, "user_id": null, "session_id": null, "module": "structured_log", "function": "_log", "line_number": 123, "timestamp": "2025-08-07T16:10:55.327368", "duration_ms": null, "extra": {"error": "no running event loop"}}, "exception": null, "stack_trace": null}

问题原因

EnhancedAdbService 类在构造函数中自动启动了设备监控,调用了 asyncio.create_task(),但此时还没有运行的事件循环,导致 "no running event loop" 错误。

修复方案

1. 修改 EnhancedAdbService 类 (app/services/enhanced_adb_service.py)

  • 移除构造函数中的自动启动监控逻辑
  • _start_monitoring() 方法改为异步的 start_monitoring() 方法
  • 添加 stop_monitoring() 方法用于停止监控
  • 修改 _monitor_devices() 方法,移除自动重启逻辑

2. 修改 enhanced_adb 端点 (app/api/v1/endpoints/enhanced_adb.py)

  • 将全局 EnhancedAdbService 实例改为延迟初始化
  • 添加 get_adb_service() 函数实现延迟初始化
  • 更新所有端点函数,在需要时调用 get_adb_service() 获取服务实例

修改的文件

  1. app/services/enhanced_adb_service.py - 修复异步初始化问题
  2. app/api/v1/endpoints/enhanced_adb.py - 实现延迟初始化

影响

  • 修复了应用启动时的路由注册失败问题
  • 设备监控功能现在需要手动启动,而不是自动启动
  • 提高了应用的启动稳定性

后续建议

  • 如果需要自动启动设备监控,可以在应用启动完成后(有事件循环运行时)手动调用 start_monitoring()
  • 考虑在应用关闭时调用 stop_monitoring() 来清理资源

2025-08-07 - 增强设备监控功能

新增功能

  1. 自动启动监控: 在应用启动时自动启动ADB设备监控
  2. 增强日志记录: 添加详细的监控启动、停止和状态日志
  3. 监控管理API: 新增监控启动、停止和状态查询API

修改内容

1. EnhancedAdbService 类增强 (app/services/enhanced_adb_service.py)

  • 增强 start_monitoring() 方法,添加详细日志和错误处理
  • 增强 stop_monitoring() 方法,添加任务状态检查和清理日志
  • 增强 _monitor_devices() 方法,添加启动和异常日志
  • 添加任务ID跟踪和状态监控

2. 应用工厂增强 (app/core/app/factory.py)

  • 添加 @app.on_event("startup") 事件处理器,自动启动设备监控
  • 添加 @app.on_event("shutdown") 事件处理器,自动停止设备监控
  • 添加启动和关闭过程的详细日志

3. 监控管理API (app/api/v1/endpoints/enhanced_adb.py)

  • 新增 POST /api/v1/adb/monitor/start - 启动设备监控
  • 新增 POST /api/v1/adb/monitor/stop - 停止设备监控
  • 新增 GET /api/v1/adb/monitor/status - 获取监控状态

监控功能特性

  • 自动启动: 应用启动时自动开始监控
  • 状态跟踪: 实时跟踪监控任务状态
  • 错误处理: 完善的异常处理和日志记录
  • 手动控制: 支持通过API手动启动/停止监控
  • 资源清理: 应用关闭时自动清理监控资源

日志增强

  • 监控启动/停止的详细日志
  • 任务创建和取消的跟踪日志
  • 异常情况的详细错误日志
  • 监控状态的实时反馈

2025-08-07 - 修复设备状态处理错误

问题描述

设备监控出现错误:'str' object has no attribute 'value'

  • 错误发生在处理设备事件时,尝试访问 event.status.value
  • event.status 是字符串而不是枚举对象

修复方案

1. 修复设备事件处理 (app/services/enhanced_adb_service.py)

  • 修改 _monitor_devices() 方法,直接使用 event.status 而不是 event.status.value
  • 修改 _handle_device_event() 方法,直接使用 event.status 而不是 event.status.value

2. 增强设备列表处理

  • 改进 list_devices() 方法中的状态转换逻辑
  • 添加对字符串状态和枚举状态的处理
  • 增加错误处理和日志记录
  • 使用 DeviceStatus.OFFLINE 作为默认状态而不是 DISCONNECTED

修改内容

  • 修复了设备监控中的状态属性访问错误
  • 增强了设备状态转换的健壮性
  • 添加了详细的错误处理和日志记录
  • 改进了对未知设备状态的处理

影响

  • 修复了设备监控异常,现在可以正常监控设备连接/断开事件
  • 提高了设备状态处理的稳定性
  • 增强了错误恢复能力