Skip to content

AzureQL v2.2.8

Choose a tag to compare

@github-actions github-actions released this 04 Sep 18:28
7e67081

AzureQL v2.2.8

本版本集中修复备份恢复、环境变量导入、依赖操作、任务日志、大型脚本和 Android 16 返回手势相关问题,并完成第一轮全局性能优化与真机回归。

2026-09-04 完成内容

备份与恢复

  • 修复导出任务取消后可能遗留 0 字节 SAF 文档的问题:等待 WorkManager 确认取消后,使用 DocumentsContract.deleteDocument() 清理,普通 ContentResolver.delete() 作为回退。
  • 补齐导出失败与自动重试耗尽后的文件清理,按 15/30/60 秒退避重试,最终失败不会误报成功,也不会在 SAF 目录留下空文件。
  • 增加无效 .tgz/.gz 归档的上传前校验;网络中断时可取消上传,并明确提示服务端数据尚未恢复。
  • 完成基础数据导出 → 上传 → 二次确认 → 服务重启 → 返回登录页 → 重新登录的核心闭环实机验证。

环境变量备份导入

  • 支持空文件、重复项、批量导入、部分失败重试和失败摘要,避免以笼统 HTTP 500 结束。
  • 重复变量不会覆盖已有数据;实机验证 47 条重复项全部跳过。
  • 实机验证 101 条有效变量批量导入,并将 1 条非法项在本地分类;空文件在本地直接拒绝,不发起网络请求。
  • 保留并恢复环境变量的置顶、禁用状态;搜索输入停止 300 ms 后自动提交远端搜索,同时保留搜索按钮的立即提交功能。

依赖管理

  • 完善新增、重装、删除的异步终态判断和日志结果展示,不再把“任务已提交”误判为最终成功或失败。
  • 增加单项与批量操作的并发门闩,快速重复点击不会重复提交;异常路径也会正确释放门闩。
  • 完成依赖新增、重装、删除的回归测试与 Android 16 真机验证,覆盖安装日志、结束时间、耗时和最终列表状态。

MCP 安全与连接

  • 修复 R8 压缩后 Netty 反射导致的 MCP 服务启动崩溃,扩大必要的运行时 keep 范围并排除未打包的可选 codec。
  • 实机验证未授权请求统一返回 401 UNAUTHORIZED,不会暴露匿名 MCP 接口。
  • 实机验证带有效 Bearer Token 的 initialize 握手、协议 2025-03-26 和 tools/list;当前返回 11 个只读工具。
  • MCP 设置入口明确为“创建 Agent(默认只读)”,读写权限需要后续单独授权;测试 Agent 已在验证后撤销。

任务、依赖与订阅日志

  • 修复日志选择层包裹整个 LazyColumn 导致的滚动抖动,改为每个可见日志分块独立支持文本选择。
  • 用 Activity 同窗覆盖层替换日志和任务详情的独立 ModalBottomSheet 窗口,修复返回时输入法快速闪现问题。
  • 保留遮罩点击、系统返回和顶部下拉关闭;下拉超过距离或速度阈值关闭,未达到阈值时弹性回位,正文日志仍可独立滚动。
  • 运行中任务日志支持先读取 64 KiB 尾部,再按 2 秒间隔使用 nextOffset 增量追加;任务结束、切换日志、退出页面或日志轮转时停止并重置,界面最多保留最新 256 KiB。
  • 依赖安装日志和订阅日志的返回路径完成 Android 16 真机回归,退出后不再闪现输入法。

返回手势与页面切换

  • 关闭 Android 16 预测返回造成的整窗缩放,保留 AndroidX 返回栈处理;设置、备份和依赖管理页面均可正常返回。
  • 页面切换继续保持无动画,真机复测未出现 missed VSync,设置返回首页时不再产生拖拽/卡顿观感。

大型脚本缓存、编辑与预览

  • 新增脚本草稿 .meta 边车文件,保存服务端大小、可用时的修改时间和原始 SHA-256;以服务端 size 为主要版本标识,兼容当前青龙脚本树不返回 mtime 的情况。
  • 脚本关闭后可复用未变化的本地缓存;脏稿优先恢复,不会被旧云端正文覆盖。缓存增加 64 个文件 / 256 MiB 的 LRU 上限,并联动清理 .meta、.bak 和孤儿边车文件。
  • 修复离线打开已缓存脚本时误删缓存并重新下载的问题;服务端不可达时直接复用干净缓存,明确确认文件不存在时才重新下载。
  • 上传增加服务端版本/大小二次确认;离线、超时、HTTP 4xx/5xx、冲突或服务端未确认时保留草稿并标记“待上传”,不会伪造成功。相关异常路径和 MCP update_script 分支已补齐测试。
  • 修复外部编辑器流程的快照、取消截断还原、异步落盘等待、进程重建恢复和 .meta 原子写入。
  • 长单行脚本按 1024 字形安全边界进行视觉分段,避免拆开代理对、ZWJ Emoji、肤色修饰符、组合标记和地区指示符;恢复软换行并移除横向滚动,视觉换行不会改变保存内容,支持复制当前原始段落。
  • Android 16 真机验证 10 MiB 脚本显示“第 1 / 1280 段”并可翻至下一段;50 MiB 脚本首次下载约 28.7 秒,缓存复用再次打开约 2.6 秒,约提升 11 倍。

性能与工程质量

  • ApiClientRegistry 按连接配置复用 Retrofit、OkHttp 和 TLS 材料;Token 更新不会触发客户端重建,相同配置的并发首次创建只构建一组客户端。
  • SessionSnapshot 在首次需要时读取 DataStore/Keystore,后续请求复用内存快照,不再重复解密和读取持久化数据。
  • 任务、依赖、订阅和日志正文保持青龙服务端原文,不再被本地化逻辑改写;日志查看器限制为最多 256 KiB 窗口。
  • 完成 Macrobenchmark 和 Baseline Profile 回归:覆盖冷启动、连续切换页面、500 项任务、大型脚本目录、1/5/20 MiB 日志、10/50 MiB 脚本及订阅日志轮询。
  • 复测确认大脚本文本布局的灾难性长帧已消除;script-50 场景 Frame overrun P99 为 11.20 ms,分页预览未出现此前的布局尖峰。
  • 补齐核心数据、脚本、依赖、MCP、备份和 Compose 相关回归测试;GitHub Actions #267 已完成 Debug 验证、签名 Release 构建和 APK 签名校验。

兼容性与安全

  • 支持 Android 12(API 31)及以上版本。
  • Release APK 使用 AzureQL 正式发布密钥签名。
  • MCP 默认创建只读 Agent;环境变量值、Token、密码和服务端敏感路径不会写入日志、审计或 MCP 响应。

已知限制

  • 已确认部分第三方文件管理器(包括 MT 管理器)无法通过 AzureQL 的 FileProvider content:// URI 原子写回文件,因此使用此类编辑器保存大型脚本可能失败。取消截断还原、进程重建恢复和待上传保护已实现,后续将继续评估 SAF 文档编辑或更清晰的兼容性提示。

参考

Android 12+ 用户可下载下方 APK 安装使用。