Repository navigation
AzureQL v2.2.8
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 安装使用。