Skip to content

XScript v0.2.6

Latest

Choose a tag to compare

@github-actions github-actions released this 16 Oct 04:47
· 56 commits to main since this release

新增

  • 后台悬浮窗(参照 AScript 的 App 小悬浮窗):脚本运行、应用切到后台时,屏幕边上出现一个悬浮窗——绿点 + 工程名 + 已运行时间;可拖动,松手吸附到左 / 右边并记住位置(重启也在);点一下展开 运行 / 停止、日志、打开(停止是用户停止,不会触发“停止后重新运行”)。回到应用或脚本结束就收起。首页和打包 App 新增 悬浮窗显示:运行时显示(默认)/ 后台一直显示(没有脚本也显示“空闲”悬浮窗,可直接点运行)/ 已关闭;悬浮窗权限 一行显示“未授权,点此开启”,设为非关闭而没授权时弹窗引导去系统页面,没授权时静默不显示、脚本照常运行。窗口放在主进程,由已有的前台服务通知保活,不额外加通知,主进程被系统杀掉重启后自动恢复。GET /status 新增 overlay(enabled / always / permitted / visible / expanded / app_foreground / side / reason 和位置大小),/settings 新增 float_always。ui.float_show(x, y, dim) / FloatWindow.show(x, y, dim) 现在按 AScript 的 x / y / dim 定位(-1 / 0 贴边、小数为屏幕比例、正数像素;始终贴边)。AScript 实际行为和我们的差异见 功能对照 末尾的“悬浮窗”一节(没有来源的细节没有照搬)。验证:JVM 单测 19 项(可见性判断、面板状态机、位置夹取 / 吸附 / 还原 / AScript 坐标)、scripts/device_float_e2e.py 在 16KB(API 37)和 4KB(API 34)两台模拟器上各 50 项(授权用 appops、真实按 HOME / 点击 / 拖动,用 dumpsys window 和 uiautomator 检查窗口类型、位置、计时、停止后脚本真的退出、前台不显示),另在 16KB 模拟器上装了新打包的 App 验证,并在 4KB 模拟器上杀掉主进程验证脚本还在时悬浮窗自动恢复。
  • 悬浮窗面板按钮改成“图标在上、小字在下”:运行 / 停止、日志、打开、隐藏用手绘矢量图标(res/drawable/ic_float_*.xml,没有新依赖)加 11sp 标签,每个 ≥ 48dp(64 × 56dp)、间距均匀、按下有水波纹;运行是播放图标,运行中变成红色停止图标;面板改成随系统深浅色:浅色模式浅底深图标、深色模式深底浅图标(带描边,不透明)。FloatWindow.add_menu 的按钮同样是图标 + id 小字:给了图片就原色显示,没给或读不到图片就用通用图标,一行最多 4 个。内容描述保留,图标和标签对读屏隐藏避免重复朗读;窗口仍然自己量好大小,字体放大到 1.5 倍也不裁切。验证:device_float_e2e.py 新增按钮布局 / 均匀间距 / 大字体不裁切 / 脚本图标 vs 通用图标的像素检查,16KB 和 4KB 两台模拟器全部通过。
  • 悬浮窗优化:对着两台模拟器实际用了一遍(待机 / 运行 / 展开 / 拖动,深浅背景,字体 1.0 / 1.5,竖屏 / 横屏)后修了真正有问题的地方:
    • 触点太小:药丸高 37dp、面板按钮约 29dp,现在药丸和每个按钮都 ≥ 48dp;新增 隐藏 按钮(隐藏到下次运行或回到 App)。
    • 盖住状态栏、刘海和底部手势条(拖到顶 / 底会压在系统栏上):现在按系统栏 / 刘海 / 导航条的 insets 摆放,拖到边缘停在安全区内;横竖屏各记一个位置,旋转后重新摆放。
    • 一直挡着内容、深色背景下看不清:约 5 秒没碰就缩成 48dp 半透明小球(显示时间,红 ! 表示出错),碰一下恢复;深色模式换底色并加描边;dim(FloatWindow.show 的透明度)真正生效,小球在其基础上再淡。吸附带缓动。
    • 状态不清楚:绿 / 灰 / 红三种状态点;脚本报错或进程死亡后悬浮窗保留约 8 秒并写“出错”(正常结束、用户停止不会)。
    • 字体大小或深色模式切换后悬浮窗不更新:现在自动重建;读屏有“状态 + 名称 + 已运行时间”的朗读文字,点击可被 TalkBack 触发。
    • 面板里按钮被裁掉(窗口宽度没跟着变宽):窗口大小改为自己量好后精确设置。
    • 每秒一次的计时器每次都查进程列表:改为最多每 4 秒一次、只在文字变化时更新、屏幕熄灭时降频,隐藏时没有轮询;20 秒内主进程 CPU 约 1%(一个核)。
    • FloatWindow.add_menu 现在可用(ui.float_add_menu):往面板里加圆形图标按钮,点击在脚本里另开线程调回调,remove_system=True 隐藏内置按钮,脚本结束清除。
    • /status.overlay 新增 state / error / menus / insets / alpha / screen_width / screen_height,reason 新增 user_hidden。
    • 没做:半隐藏到屏幕边外的小球(触点会小于 48dp)、长按菜单(点一下已能展开)、避让输入法(悬浮窗不抢焦点,不受影响)、多显示器。
    • 验证:JVM 单测 FloatLogicTest 扩到 32 项;Python 运行时测试 5 项(add_menu);scripts/device_float_e2e.py 扩到 134 项,16KB(API 37)和 4KB(API 34)两台模拟器各全部通过(含小球尺寸 / 透明度、触点尺寸、拖到状态栏 / 导航条、隐藏、出错提示、add_menu 点击回调、字体 1.5 与深色重建、横竖屏分别记位置、CPU)。
  • 修复:RunState 的状态文件改为原子写入,另一个进程不会读到写了一半的空文件。