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
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(有效的最新版本)
配置模块导出修复
- 修复了
ProtocolType和DeviceStatus无法从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中服务类名称错误的问题 - 将
ADBService、SSHService、ATService、PLNKService、ATXService改为AdbService、SshService、AtService、PlnkService、AtxService
未使用的导入清理
- 移除了
app/api/v1/endpoints/adb.py中未使用的UploadFile和File导入 - 这解决了
python-multipart依赖问题
警告过滤添加
- 在
run.py中添加了warnings.filterwarnings来忽略paramiko的弃用警告 - 解决了 TripleDES 加密算法弃用警告
USB监控模块删除
- 删除了
app/api/v1/endpoints/usb_monitor.py文件 - 该文件依赖不存在的
device_monitor_manager服务 - 更新了
app/core/app/router.py和app/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.py中AdbClient构造函数调用错误 - 将
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()获取服务实例
修改的文件
app/services/enhanced_adb_service.py- 修复异步初始化问题app/api/v1/endpoints/enhanced_adb.py- 实现延迟初始化
影响
- 修复了应用启动时的路由注册失败问题
- 设备监控功能现在需要手动启动,而不是自动启动
- 提高了应用的启动稳定性
后续建议
- 如果需要自动启动设备监控,可以在应用启动完成后(有事件循环运行时)手动调用
start_monitoring() - 考虑在应用关闭时调用
stop_monitoring()来清理资源
2025-08-07 - 增强设备监控功能
新增功能
- 自动启动监控: 在应用启动时自动启动ADB设备监控
- 增强日志记录: 添加详细的监控启动、停止和状态日志
- 监控管理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
修改内容
- 修复了设备监控中的状态属性访问错误
- 增强了设备状态转换的健壮性
- 添加了详细的错误处理和日志记录
- 改进了对未知设备状态的处理
影响
- 修复了设备监控异常,现在可以正常监控设备连接/断开事件
- 提高了设备状态处理的稳定性
- 增强了错误恢复能力