Skip to content

Releases: 84593320z/GKD-XA

Release v1.4.6

Choose a tag to compare

@github-actions github-actions released this 24 Oct 05:34

更新内容

v1.4.6(2026-10-24)

这一版补的是三处「用起来会卡住或不敢碰」的地方。

  • Shizuku / ADB 下自动补授「写入安全设置」:priv-kit 在服务端不是 root、又没有
    GRANT_RUNTIME_PERMISSIONS 时会跳过授权,Shizuku 正好落在这一支,于是「自动开启无障碍」
    和开机自愈都缺这条权限。现在改由特权服务执行一次 pm grant(5 秒上限,失败只记日志);
    权限会持久化,之后开机不再要求特权服务在线。root(KernelSU 等)行为不变。
  • 新增订阅显示进度:下载 → 解析 → 检查 → 保存四个阶段都会显示在链接对话框里,保存阶段
    不可取消(避免写一半);失败提示留在对话框内,不用关掉重来。
  • 订阅内应用分组可拖拽排序:仅本地订阅,长按拖动;原地松手仍是进入多选。保存失败会自动
    回到拖拽前的顺序,拖拽期间不响应多选与批量操作。

本版无数据库迁移、无配置格式变更,可回退到 v1.4.5。

v1.4.5(2026-10-20)

这一版没有新功能,修的是「看起来正常、其实缺了一截」和「说法容易被误解」两件事。

  • AI 回复截断:之前只有 Chat Completions 的流式响应能识别「被长度上限截断」。这版把
    非流式响应(Chat Completions 非流式 / Anthropic / Responses)也纳入判定;SSE 流中途被
    掐断时不再当作完整回复,而是按原预算重试一次。
  • 更新通道:测试通道改为读取 version/beta.json,不再和稳定通道共用一份元数据;
    version/*.json 增加构建门禁——版本号、日志首条、倒序、下载地址与 tag 任何一处不一致都会
    让构建直接失败,避免出现「改了 JSON 忘了 gradle」的错版。
  • 文案与接口:应用名组件 GkAppNameText 的 appId 改为必传,把「参数都缺时的运行时报错」
    提前成编译期约束(顺带修掉两个只传 appInfo 的调用点);无障碍权限按钮改为
    「单次授予」,写入安全设置改为「永久授予」,工作模式「基础 / 增强」改为
    「手动开启 / 自动开启」——原文案容易被理解成功能强弱。

本版无数据库迁移、无配置格式变更,可回退到 v1.4.4。

v1.4.4(2026-10-15)

v1.4.2 给外部调用加了锁,这版把钥匙递到用户手里。

  • 新增「设置 - 高级设置 - 外部调用命令」:查看并复制 Tasker / adb 使用的完整命令。
    v1.4.2 给 ExposeService 加 token 鉴权之前,任意应用都能触发截图与全局同步;但鉴权加上后
    token 只落在应用私有目录和自动生成的 expose.sh 里,手动调用的用户没有任何途径拿到它,
    等于这条路对普通用户是关着的。现在这一页直接给出可用命令。
  • token 默认掩码,只露前 3 位,点击上方命令文本才展开;复制按钮始终复制含真实 token 的完整
    命令。命令固定 --ei expose 0(抓取快照),没有做 -1/1 的选择器。

本版相对 v1.4.3 只有这一个设置页(AdvancedPage +57 行、5 条字符串)。无障碍点广告主流程、
AI 生成链路、数据库与配置格式全部未动。

未验证项

纯展示 + 复制到剪贴板,不碰启动流程,风险面很小。没有实机跑过的点:

  1. 长命令在窄屏上的换行与可读性。
  2. 页面显示的 token 与 ExposeService 实际校验的值不一致 —— 若发生,外部调用会得到
    「外部调用被拒绝:缺少或错误的 token」提示。

出问题怎么办

  • 反馈:设置 - 高级设置 - 导出日志,日志里带外部调用的鉴权判断记录。
  • 回退:本版只有 9631ece 一个功能提交,整体回到 v1.4.3(93fc089)只需 revert 它,
    不涉及数据库迁移、不涉及配置格式变更,用户侧无感。

v1.4.3(2026-10-15)

AI 生成这条链一次过;顺带两个界面交互修好

  • Chat Completions 改走 SSE 流式,并加上 Max Tokens 自适应:预算偏小自动抬到 16384、
    输出被截断(finish_reason == "length")就翻倍重试、被服务端拒绝则回退到 8192 并
    按服务商记住上限,下次不再撞同一堵墙。Responses / anthropic 端点未接流式,行为不变。
  • 加强模式(双击快照按钮)现在能区分失败原因:以前 AI 生成的选择器没命中时,回喂给
    模型的话永远是同一句「未匹配到任何节点」;现在会用选择器的快速匹配能力判断,如果它
    本身就无法快速匹配(首个属性没写成 [id=] / [vid=] / [text=] 等号精确匹配),
    重试提示会直接指向写法问题。日志同时记下「可快速匹配 true/false」和选择器原文。
  • 触发记录支持按应用多选筛选(只在"全部记录"视图出现,订阅维度和单应用入口行为不变)。
  • 悬浮快照按钮改成单击展开菜单(仅快照 / 加强模式 / 算了),去掉原来单击必须白等的
    400 毫秒双击判定。
  • 同步上游 gkd-selector 0.6.1 的 fast query 诊断 API(纯加法,不改匹配行为)。
  • 新增 SSE 解析与 token 预算的单元测试,单测数 136 → 152。

v1.4.2(2026-10-14)

更新通道修好了 —— 这一版必须手动装一次

  • 修复:检查更新拿到的是上游 gkd-plus 的版本号和更新日志,而且更新失败。 更新通道、
    REPOSITORY_URL(关于页/崩溃上报页的「提 issue」)、commitUrl 四处都还写着
    github.com/fjjzy/gkd-plus,是 fork 时留下的源头错误。因为坏的就是「检查更新」本身,
    老用户没法靠应用内更新拿到这个修复 —— 需要手动下载安装一次。
  • 修复:外部调用接口无鉴权。 ExposeService 是 exported 服务,之前设备上任何应用都能
    用 am start-foreground-service … --ei expose 0 触发截图、expose 1 触发一次全局运行时
    同步。现在必须带上随机 token(存在 noBackupFilesDir,刻意不放 storeFolder —— 那个目录会被
    「导出日志」打包带出去)。内部通道自动带 token,行为不变。
  • 加强模式(双击快照按钮)的判据改对了。 原来只要界面前后签名不同就报「规则验证成功」,
    于是「误点了别的元素、页面滚了一下、跳去别的界面」都会被判成生效 —— 而这正是加强模式要
    排除的情况。现在改成执行后用同一个选择器重新查询,不再命中才算生效。另外中途抛异常
    时不再把已经生成好的规则丢掉。
  • 导出日志可选附带最近 1/3/7 天的快照(节点 JSON + 截图)。默认不带,且不做记忆,
    每次导出都要重新选。
  • priv-kit 0.16.1 → 0.17.7:修 Android 17 无线调试反复弹系统选择器、以及缺局域网权限时
    被动发现挂起。注意它不修 Shizuku 连接下的闪烁,那条仍在排查。

v1.4.1(2026-10-12)

开机自愈修好了,而且是靠真机导出日志定位到的

  • 开机广播不再被「常驻通知」开关拦住:BootReceiver 以前只做 StatusService.autoStart(),
    而它内部的 needRestart 第一项就是常驻通知开关 —— 关掉它就等于把开机兜底一起关掉,
    说明里没提、路径上一行日志都没有。现在广播一旦送达就无条件补一次运行时同步,
    补开无障碍不再依赖常驻通知。
  • 自动开无障碍改认「真的连上了」:以前看的是 isRunning(服务 onCreate 就置 true),
    而实例要到 onServiceConnected 才赋值;服务被创建但绑定失败时,应用会认为"已经在运行",
    于是不再重开、你也关不掉。现在统一用 isReady = isRunning && instance != null。
  • 导出日志现在能直接判定开机问题:补上触发来源(sync(boot) / sync(privilege connected) /
    回前台),并在"已经就绪、无需写入"这个唯一的静默分支也打一条。这次就是靠这两条日志
    区分出「没跑」和「跑了但没事」。
  • 返回上一页时清掉输入焦点:前进不算,编辑页的自动聚焦保持原样。
  • 设置文件解析失败不再无声丢档:先把坏文件改名成 store.json.corrupt-<时间戳> 留档再回落默认值,
    否则下一次写入就直接覆盖掉用户原来的配置。
  • 单元测试第一次进了构建门禁:仓库里 32 个测试文件、136 个用例从来没被 CI 跑过,
    接上之后第一轮就抓出一处移植改动引入的 4 个回归(该改动随后已回退)。

顺带记录一条这次查清但不是本应用问题的现象:ColorOS 的无障碍开关可能显示为「关」,
而框架侧服务其实已经 Bound 且正常收到窗口事件 —— 我们写的是标准的
enabled_accessibility_services + accessibility_enabled,那个 UI 读的是它自己的记录。
以应用内显示的状态为准。

v1.4.0(2026-10-07)

界面层完全跟随 miuix 上游 0.9.4

  • 依赖从 0.9.3 升到 0.9.4。上游在这个版本删掉了 miuix-navigation3-ui,换成自带运行时的
    miuix-nav:NavKey / NavBackStack / NavDisplay / entry DSL 全部归 Miuix,SavedState 与
    ViewModelStore 的 entry 装饰由库接管,因此 navigation3-runtime 与
    lifecycle-viewmodel-navigation3 两个 AndroidX 依赖一并移除。
  • 页面转场改由库提供:删掉自写的 transitionSpec / popTransitionSpec / predictivePopTransitionSpec
    三段,默认走 NavTransitions.MiuixDefault(带连续栈深度,下层页面随返回进度连续缩放与压暗),
    编辑器类页面(触发提示、通知文案、禁用应用列表、规则组/分类编辑等)走 NavTransitions.Modal。
    预测式返回现在是库实现,支持拖拽中途松手回弹。
  • 底栏(液态玻璃)重新同步上游:命中判定换成按按下位置直接算 tab,并补上可聚焦、键盘方向键/回车
    操作与 TalkBack 选中态语义;拖拽动画区分「被取消」与「正常停手」。
  • 14 个镜像自上游 example 的文件全部标注 同步自 miuix@39c40f9 (v0.9.4) <上游路径>,
    以后同步可以直接 diff,不用再靠肉眼比对。

修复:深色/浅色下大量内容看不清

  • MIUIX→Material3 的颜色桥接原本漏了 10 个槽位(surfaceContainerLow/Lowest、surfaceBright/Dim、
    inverse*、surfaceTint、outlineVariant、scrim),一直保留 Material3 基线值。MIUIX 深色的
    surface 是纯黑、background 是 #242424,明度阶梯方向和 Material3 默认相反,于是没被桥接的
    面板色会和内容色对冲。现在按 MIUIX 自己的明度补齐(深浅分开取)。
  • 主题原本只提供 MIUIX 的内容色,没提供 Material3 的同名 Local:没被 M3 Surface 包住的
    M3 Text / Icon 取不到色就退到平台默认(黑),深色下表现为「内容不显示」。现在两个都提供。
  • 批量修掉 23 处颜色槽位误用。根因是 MIUIX 的 secondary 是容器色(浅色 #E6E6E6、
    深色 #505050,配套前景恒为白),不是 Material3 那个「次要强调色」,而代码里把它当文字色用了 11 处
    (订阅名、作者、版本号、更新链接、白名单提示、活动名等),浅色下等于白底画白字;同类问题还有
    下拉菜单选中项背景用恒为纯白的前景槽位、黑色遮罩上的提示文字用线条色、以及在 60% 文字色上再乘一次
    alpha 只剩 24%~36% 等。.background(secondary) 那类正确用法保持不变。

修复:几个会静默失效的逻辑洞

  • updateSystemDefaultAppId 在没有可解析 HOME(或包可见性受限)的设备上会抛空指针,而它是运行时
    状态同步的第一步,一抛就把「给自己授权 → 刷新权限 → 修无障碍 → 自动开无障碍」整条链带走,
    表现正是「拿到 root 了但无障碍没自动开」。改为空值走兜底,并把同步链改成逐步隔离,
    失败步骤名写进日志。
  • 切换工作模式后只关掉了旧通道、没有任何一次状态同步,新模式的服务没人起,必须退出重进界面。
  • 悬浮窗/截图服务的 onDestroyed 无条件清空全局实例:系统重建服务时旧实例的销毁会清掉新实例的引用,
    之后永久静默失效。照无障碍服务的写法加上「只清自己」的判断。
  • 规则匹配的并发标志位在协程内部才置位,拦不住同一帧内连发的无障碍事件,导致并发查询与重复点击。
    占位提前到入口。

清理

  • 删掉 9 个全仓零引用的文件(1955 行):自绘三态开关、整页死代码的旧首页、旧版订阅卡片等。
    它们是 v1.3.2「界面回退到 1.2.7 观感」时把旧副本一起捞回来的,其中旧订阅卡片还带着
    v1.3.1 已经修掉的「按压露尖角」写法。纯删除,行为与外观不变。

v1.3.3(2026-10-06)

修复:ColorOS 等 ROM 关机后无障碍不会自动恢复

  • 原因不是时序也不是权限,而是代码自锁:fixRestartAutomatorService() 要求 enableAutomator 为真才会写无障碍,
    而该标志位只有无障碍已经启动之后才为真 —— 冷启动时必然是假,于是永远轮不到去开
    (自动化模式不受影响,它的连接是无条件走的,所以表现成「自动化能自己起、无障碍不能」)
  • 新增 armA11yService():以「工作模式 = 无障碍」作为用户意图,自己复核 WRITE_SECURE_SETTINGS,
    写入无障碍总开关与服务列表,并在 2/5/10 秒内最多 4 次复验重试(应对刚拉起来又被系统解绑的那几秒)
  • 触发点接在运行时状态同步上:开机自启、拿到 root(特权通道就绪)、回到前台各补一次,root 迟到也能补开
  • 不和手动操作对着干:通过开关或下拉磁贴主动关闭无障碍后 30 分钟内不自动打开,主动再开立即撤销抑制;
    前台应用命中「禁用无障碍列表」时不打开
  • 每个拦截分支都写运行日志,再遇到没自动开时导出日志即可直接定位是被哪一条拦住

开机自启兜底(恢复自本地构建)

  • 新增 BootReceiver(BOOT_COMPLETED)与 StatusServiceJobService(persisted Job,开机 +10 秒兜底):
    常驻通知/服务状态不再需要开机后手动打开
  • AIDL 接口抽成独立模块 gkd-aidl(包名 li.gkd.aidl)并补齐 R8 keep 规则
  • 新增特权能力探测与权限常量集中定义

构建防护

  • APK 内新增 assets/working-tree.txt,自证构建时的工作区状态:干净时只有 commit 行;
    存在未提交改动时列出文件路径,并在构建目录留下 dirty.patch 与文件快照,
    避免再次出现「本机构建源码丢失、只能从 APK 反推」

v1.3.2(2026-10-03)

界面层整体回退到 v1.2.7 观感

  • 底座与业务能力保持 v1.3.1 不变,界面层整体恢复为 v1.2.7 那套 MIUIX 渲染层(即 v1.3.0 移植到新底座后的版本):
    • 恢复自研液态玻璃悬浮底栏(ui/liquid 整包)与配套设置开关
    • 恢复 GkTriStateSwitch、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup 等自绘组件
    • 恢复旧版设置分组 / 卡片 / 对话框 / 输入框样式(撤销 1.3.1 的 GkRowDefaults 排版统一与 M3→miuix 组件替换)
    • 恢复应用配置页「本地订阅」分组入口与订阅分组标题
  • 保留 v1.3.1 的全部修复(在恢复后的界面上重新应用):
    • 首页「应用」数量与「应用」Tab 同源(AppInfoRepository.visibleAppInfosFlow)
    • 应用列表点击闪退(TextStyle placeholder 的 lineHeight/width 兜底)
    • 订阅卡片按压高亮露出尖角
    • 二级页顶栏(多选顶栏)上方大片留白(改用 SmallTopAppBar)
  • 补齐 1.3.0 翻译版遗漏的 1.2.7 界面元素:
    • 悬浮按钮恢复液态玻璃(vibrancy + 折射 + 高光,无 RuntimeShader 时回退实色),涉及 8 个页面
    • 关于页整页恢复 1.2.7 版式:滚动视差 Logo(渐变收起/标题淡入)、背景特效(BgEffect 组件包整体移植)、
      顶栏滚动模糊落定转实色;功能保持新底座实现(更新渠道/检查更新/反馈/导出日志/分享 APK)
  • 恢复「触发提示 → 实时通知(流体云/超级岛)」完整功能(1.3.0 换底座时丢失,表现为选项点击无反应):
    • 设置项恢复三选一样式(悬浮窗 / 系统 Toast / 实时通知)与选中态正确回显
    • 移植 ActionTipNotif 渲染器:同一条 ongoing 通知同时适配 ColorOS 流体云(Google Live Update,
      反射调用避免 ROM 缺方法崩溃)与 HyperOS 超级岛(miui.focus 模板);通知权限缺失/无 Live Update
      API 时给出结果提示
    • 恢复「存在时间」快选与自定义秒数(2-120 秒,到期自动取消)、「实时更新系统开关」直达入口、
      「发送测试通知」按当前样式分发并在需要时先请求通知权限
    • store 新增 actionTipStyle / actionTipLiveDurationSec(带默认值,旧配置兼容);
      resolveActionTipStyle 兼容旧版 useSystemToast 开关
  • 修复 AI 服务商三个页面(列表 / 详情 / 使用说明)顶栏与页签底色异常:
    1.3.0 移植时这三个页面用了 material3 Scaffold + GkTopAppBar(顶栏恒为实色 surface、
    页面体为 background 色,与 1.2.7 毛玻璃壳的 surface 容器形成色差)。现统一换回
    GkPageScaffold 毛玻璃二级页壳(顶栏滚动透出毛玻璃、落定转实色),与 1.2.7 一致
  • 全 App 二级页壳统一:其余 20 处仍使用 material3 Scaffold 的页面全部换回
    GkPageScaffold 毛玻璃壳,彻底消除顶栏/页面体的 surface–background 色差:
    • 订阅流 6 页(应用列表、应用规则组、分类、分类规则组、全局规则组、全局排除,
      多选顶栏接壳的 externalScrollBehavior + barColor)
    • 日志 3 页(活动记录、触发记录、无障碍事件)
    • 编辑器壳 GkEditorScaffold(覆盖规则组/分类/规则排除/屏蔽列表编辑、
      触发提示文案、通知文案 6 个编辑页)
    • 应用作用域 2 页、快照页、快照设置页、局部关闭引导页、崩溃报告页(新增 bottomBar 槽)、
      内置浏览器(关闭内容采样避免重绘闪烁)、规则源查看与规则控制关系全屏弹窗

v1.3.1(2026-10-03)

全 App 统一分组与行排版

  • 新增 GkRowDefaults 作为全 App 唯一的排版规格来源:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、
    行内边距 16/12、行首图标 24 + 间距 16、分组小标题 14 Bold(缩进 32)、分割线 0.33dp@10%

  • 设置分组现在会真正渲染「常规 / 无障碍 / 外观 / 其他」这类小标题(此前该参数被忽略)

  • 设置项与开关项改为统一的「标题 16 Medium + 摘要 14」两行结构,行尾箭头改为细箭头

  • 按压反馈统一为「按住整行叠 6% 前景色」(去掉涟漪),与 MIUIX 组件行为一致

  • 组内分割线自动生成(miuix 组件本身不画行间分割线):非首行自动画一条 0.33dp 细线

  • 首页 / 订阅 / 应用 / 设置四个主 Tab、应用配置页规则卡、应用列表卡、订阅卡全部统一到该规格

  • Material3 组件继续替换为官方 miuix:单选按钮、下拉刷新、Tooltip、复选框、底部操作条、
    普通按钮、对话框(17 处调用点零改动)、Scaffold(22 个文件)、输入框(新增 GkTextField 封装,
    删除从 material3 手工拷贝的 GkOutlinedTextField)

AI 配置界面重排

  • 服务商列表:顶部圆角搜索框,「添加服务商」入口改为「标题 + 摘要 + 右箭头」行,已配置项改为
    名称 / 地址 / 元信息三段式,行尾圆点即选即切当前服务商,删除由长按触发并走统一弹窗
  • 服务商详情(配置):输入项改为「label 当占位」的紧凑写法,端点模式改为行尾值 + 箭头,
    测试连接为标准行;自定义请求头可展开;启用开关 + 系统提示词 + 生成参数分组;
    底部是全宽主按钮 + 状态文字,危险操作为居中红字卡片
  • 模型页签:容器与行样式同步到同一套排版规格
  • 排版规格统一:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、行内边距 16/12、
    行首图标 24 +...
Read more

Release v1.4.5

Choose a tag to compare

@github-actions github-actions released this 20 Oct 08:07

更新内容

v1.4.5(2026-10-20)

这一版没有新功能,修的是「看起来正常、其实缺了一截」和「说法容易被误解」两件事。

  • AI 回复截断:之前只有 Chat Completions 的流式响应能识别「被长度上限截断」。这版把
    非流式响应(Chat Completions 非流式 / Anthropic / Responses)也纳入判定;SSE 流中途被
    掐断时不再当作完整回复,而是按原预算重试一次。
  • 更新通道:测试通道改为读取 version/beta.json,不再和稳定通道共用一份元数据;
    version/*.json 增加构建门禁——版本号、日志首条、倒序、下载地址与 tag 任何一处不一致都会
    让构建直接失败,避免出现「改了 JSON 忘了 gradle」的错版。
  • 文案与接口:应用名组件 GkAppNameText 的 appId 改为必传,把「参数都缺时的运行时报错」
    提前成编译期约束(顺带修掉两个只传 appInfo 的调用点);无障碍权限按钮改为
    「单次授予」,写入安全设置改为「永久授予」,工作模式「基础 / 增强」改为
    「手动开启 / 自动开启」——原文案容易被理解成功能强弱。

本版无数据库迁移、无配置格式变更,可回退到 v1.4.4。

v1.4.4(2026-10-15)

v1.4.2 给外部调用加了锁,这版把钥匙递到用户手里。

  • 新增「设置 - 高级设置 - 外部调用命令」:查看并复制 Tasker / adb 使用的完整命令。
    v1.4.2 给 ExposeService 加 token 鉴权之前,任意应用都能触发截图与全局同步;但鉴权加上后
    token 只落在应用私有目录和自动生成的 expose.sh 里,手动调用的用户没有任何途径拿到它,
    等于这条路对普通用户是关着的。现在这一页直接给出可用命令。
  • token 默认掩码,只露前 3 位,点击上方命令文本才展开;复制按钮始终复制含真实 token 的完整
    命令。命令固定 --ei expose 0(抓取快照),没有做 -1/1 的选择器。

本版相对 v1.4.3 只有这一个设置页(AdvancedPage +57 行、5 条字符串)。无障碍点广告主流程、
AI 生成链路、数据库与配置格式全部未动。

未验证项

纯展示 + 复制到剪贴板,不碰启动流程,风险面很小。没有实机跑过的点:

  1. 长命令在窄屏上的换行与可读性。
  2. 页面显示的 token 与 ExposeService 实际校验的值不一致 —— 若发生,外部调用会得到
    「外部调用被拒绝:缺少或错误的 token」提示。

出问题怎么办

  • 反馈:设置 - 高级设置 - 导出日志,日志里带外部调用的鉴权判断记录。
  • 回退:本版只有 9631ece 一个功能提交,整体回到 v1.4.3(93fc089)只需 revert 它,
    不涉及数据库迁移、不涉及配置格式变更,用户侧无感。

v1.4.3(2026-10-15)

AI 生成这条链一次过;顺带两个界面交互修好

  • Chat Completions 改走 SSE 流式,并加上 Max Tokens 自适应:预算偏小自动抬到 16384、
    输出被截断(finish_reason == "length")就翻倍重试、被服务端拒绝则回退到 8192 并
    按服务商记住上限,下次不再撞同一堵墙。Responses / anthropic 端点未接流式,行为不变。
  • 加强模式(双击快照按钮)现在能区分失败原因:以前 AI 生成的选择器没命中时,回喂给
    模型的话永远是同一句「未匹配到任何节点」;现在会用选择器的快速匹配能力判断,如果它
    本身就无法快速匹配(首个属性没写成 [id=] / [vid=] / [text=] 等号精确匹配),
    重试提示会直接指向写法问题。日志同时记下「可快速匹配 true/false」和选择器原文。
  • 触发记录支持按应用多选筛选(只在"全部记录"视图出现,订阅维度和单应用入口行为不变)。
  • 悬浮快照按钮改成单击展开菜单(仅快照 / 加强模式 / 算了),去掉原来单击必须白等的
    400 毫秒双击判定。
  • 同步上游 gkd-selector 0.6.1 的 fast query 诊断 API(纯加法,不改匹配行为)。
  • 新增 SSE 解析与 token 预算的单元测试,单测数 136 → 152。

v1.4.2(2026-10-14)

更新通道修好了 —— 这一版必须手动装一次

  • 修复:检查更新拿到的是上游 gkd-plus 的版本号和更新日志,而且更新失败。 更新通道、
    REPOSITORY_URL(关于页/崩溃上报页的「提 issue」)、commitUrl 四处都还写着
    github.com/fjjzy/gkd-plus,是 fork 时留下的源头错误。因为坏的就是「检查更新」本身,
    老用户没法靠应用内更新拿到这个修复 —— 需要手动下载安装一次。
  • 修复:外部调用接口无鉴权。 ExposeService 是 exported 服务,之前设备上任何应用都能
    用 am start-foreground-service … --ei expose 0 触发截图、expose 1 触发一次全局运行时
    同步。现在必须带上随机 token(存在 noBackupFilesDir,刻意不放 storeFolder —— 那个目录会被
    「导出日志」打包带出去)。内部通道自动带 token,行为不变。
  • 加强模式(双击快照按钮)的判据改对了。 原来只要界面前后签名不同就报「规则验证成功」,
    于是「误点了别的元素、页面滚了一下、跳去别的界面」都会被判成生效 —— 而这正是加强模式要
    排除的情况。现在改成执行后用同一个选择器重新查询,不再命中才算生效。另外中途抛异常
    时不再把已经生成好的规则丢掉。
  • 导出日志可选附带最近 1/3/7 天的快照(节点 JSON + 截图)。默认不带,且不做记忆,
    每次导出都要重新选。
  • priv-kit 0.16.1 → 0.17.7:修 Android 17 无线调试反复弹系统选择器、以及缺局域网权限时
    被动发现挂起。注意它不修 Shizuku 连接下的闪烁,那条仍在排查。

v1.4.1(2026-10-12)

开机自愈修好了,而且是靠真机导出日志定位到的

  • 开机广播不再被「常驻通知」开关拦住:BootReceiver 以前只做 StatusService.autoStart(),
    而它内部的 needRestart 第一项就是常驻通知开关 —— 关掉它就等于把开机兜底一起关掉,
    说明里没提、路径上一行日志都没有。现在广播一旦送达就无条件补一次运行时同步,
    补开无障碍不再依赖常驻通知。
  • 自动开无障碍改认「真的连上了」:以前看的是 isRunning(服务 onCreate 就置 true),
    而实例要到 onServiceConnected 才赋值;服务被创建但绑定失败时,应用会认为"已经在运行",
    于是不再重开、你也关不掉。现在统一用 isReady = isRunning && instance != null。
  • 导出日志现在能直接判定开机问题:补上触发来源(sync(boot) / sync(privilege connected) /
    回前台),并在"已经就绪、无需写入"这个唯一的静默分支也打一条。这次就是靠这两条日志
    区分出「没跑」和「跑了但没事」。
  • 返回上一页时清掉输入焦点:前进不算,编辑页的自动聚焦保持原样。
  • 设置文件解析失败不再无声丢档:先把坏文件改名成 store.json.corrupt-<时间戳> 留档再回落默认值,
    否则下一次写入就直接覆盖掉用户原来的配置。
  • 单元测试第一次进了构建门禁:仓库里 32 个测试文件、136 个用例从来没被 CI 跑过,
    接上之后第一轮就抓出一处移植改动引入的 4 个回归(该改动随后已回退)。

顺带记录一条这次查清但不是本应用问题的现象:ColorOS 的无障碍开关可能显示为「关」,
而框架侧服务其实已经 Bound 且正常收到窗口事件 —— 我们写的是标准的
enabled_accessibility_services + accessibility_enabled,那个 UI 读的是它自己的记录。
以应用内显示的状态为准。

v1.4.0(2026-10-07)

界面层完全跟随 miuix 上游 0.9.4

  • 依赖从 0.9.3 升到 0.9.4。上游在这个版本删掉了 miuix-navigation3-ui,换成自带运行时的
    miuix-nav:NavKey / NavBackStack / NavDisplay / entry DSL 全部归 Miuix,SavedState 与
    ViewModelStore 的 entry 装饰由库接管,因此 navigation3-runtime 与
    lifecycle-viewmodel-navigation3 两个 AndroidX 依赖一并移除。
  • 页面转场改由库提供:删掉自写的 transitionSpec / popTransitionSpec / predictivePopTransitionSpec
    三段,默认走 NavTransitions.MiuixDefault(带连续栈深度,下层页面随返回进度连续缩放与压暗),
    编辑器类页面(触发提示、通知文案、禁用应用列表、规则组/分类编辑等)走 NavTransitions.Modal。
    预测式返回现在是库实现,支持拖拽中途松手回弹。
  • 底栏(液态玻璃)重新同步上游:命中判定换成按按下位置直接算 tab,并补上可聚焦、键盘方向键/回车
    操作与 TalkBack 选中态语义;拖拽动画区分「被取消」与「正常停手」。
  • 14 个镜像自上游 example 的文件全部标注 同步自 miuix@39c40f9 (v0.9.4) <上游路径>,
    以后同步可以直接 diff,不用再靠肉眼比对。

修复:深色/浅色下大量内容看不清

  • MIUIX→Material3 的颜色桥接原本漏了 10 个槽位(surfaceContainerLow/Lowest、surfaceBright/Dim、
    inverse*、surfaceTint、outlineVariant、scrim),一直保留 Material3 基线值。MIUIX 深色的
    surface 是纯黑、background 是 #242424,明度阶梯方向和 Material3 默认相反,于是没被桥接的
    面板色会和内容色对冲。现在按 MIUIX 自己的明度补齐(深浅分开取)。
  • 主题原本只提供 MIUIX 的内容色,没提供 Material3 的同名 Local:没被 M3 Surface 包住的
    M3 Text / Icon 取不到色就退到平台默认(黑),深色下表现为「内容不显示」。现在两个都提供。
  • 批量修掉 23 处颜色槽位误用。根因是 MIUIX 的 secondary 是容器色(浅色 #E6E6E6、
    深色 #505050,配套前景恒为白),不是 Material3 那个「次要强调色」,而代码里把它当文字色用了 11 处
    (订阅名、作者、版本号、更新链接、白名单提示、活动名等),浅色下等于白底画白字;同类问题还有
    下拉菜单选中项背景用恒为纯白的前景槽位、黑色遮罩上的提示文字用线条色、以及在 60% 文字色上再乘一次
    alpha 只剩 24%~36% 等。.background(secondary) 那类正确用法保持不变。

修复:几个会静默失效的逻辑洞

  • updateSystemDefaultAppId 在没有可解析 HOME(或包可见性受限)的设备上会抛空指针,而它是运行时
    状态同步的第一步,一抛就把「给自己授权 → 刷新权限 → 修无障碍 → 自动开无障碍」整条链带走,
    表现正是「拿到 root 了但无障碍没自动开」。改为空值走兜底,并把同步链改成逐步隔离,
    失败步骤名写进日志。
  • 切换工作模式后只关掉了旧通道、没有任何一次状态同步,新模式的服务没人起,必须退出重进界面。
  • 悬浮窗/截图服务的 onDestroyed 无条件清空全局实例:系统重建服务时旧实例的销毁会清掉新实例的引用,
    之后永久静默失效。照无障碍服务的写法加上「只清自己」的判断。
  • 规则匹配的并发标志位在协程内部才置位,拦不住同一帧内连发的无障碍事件,导致并发查询与重复点击。
    占位提前到入口。

清理

  • 删掉 9 个全仓零引用的文件(1955 行):自绘三态开关、整页死代码的旧首页、旧版订阅卡片等。
    它们是 v1.3.2「界面回退到 1.2.7 观感」时把旧副本一起捞回来的,其中旧订阅卡片还带着
    v1.3.1 已经修掉的「按压露尖角」写法。纯删除,行为与外观不变。

v1.3.3(2026-10-06)

修复:ColorOS 等 ROM 关机后无障碍不会自动恢复

  • 原因不是时序也不是权限,而是代码自锁:fixRestartAutomatorService() 要求 enableAutomator 为真才会写无障碍,
    而该标志位只有无障碍已经启动之后才为真 —— 冷启动时必然是假,于是永远轮不到去开
    (自动化模式不受影响,它的连接是无条件走的,所以表现成「自动化能自己起、无障碍不能」)
  • 新增 armA11yService():以「工作模式 = 无障碍」作为用户意图,自己复核 WRITE_SECURE_SETTINGS,
    写入无障碍总开关与服务列表,并在 2/5/10 秒内最多 4 次复验重试(应对刚拉起来又被系统解绑的那几秒)
  • 触发点接在运行时状态同步上:开机自启、拿到 root(特权通道就绪)、回到前台各补一次,root 迟到也能补开
  • 不和手动操作对着干:通过开关或下拉磁贴主动关闭无障碍后 30 分钟内不自动打开,主动再开立即撤销抑制;
    前台应用命中「禁用无障碍列表」时不打开
  • 每个拦截分支都写运行日志,再遇到没自动开时导出日志即可直接定位是被哪一条拦住

开机自启兜底(恢复自本地构建)

  • 新增 BootReceiver(BOOT_COMPLETED)与 StatusServiceJobService(persisted Job,开机 +10 秒兜底):
    常驻通知/服务状态不再需要开机后手动打开
  • AIDL 接口抽成独立模块 gkd-aidl(包名 li.gkd.aidl)并补齐 R8 keep 规则
  • 新增特权能力探测与权限常量集中定义

构建防护

  • APK 内新增 assets/working-tree.txt,自证构建时的工作区状态:干净时只有 commit 行;
    存在未提交改动时列出文件路径,并在构建目录留下 dirty.patch 与文件快照,
    避免再次出现「本机构建源码丢失、只能从 APK 反推」

v1.3.2(2026-10-03)

界面层整体回退到 v1.2.7 观感

  • 底座与业务能力保持 v1.3.1 不变,界面层整体恢复为 v1.2.7 那套 MIUIX 渲染层(即 v1.3.0 移植到新底座后的版本):
    • 恢复自研液态玻璃悬浮底栏(ui/liquid 整包)与配套设置开关
    • 恢复 GkTriStateSwitch、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup 等自绘组件
    • 恢复旧版设置分组 / 卡片 / 对话框 / 输入框样式(撤销 1.3.1 的 GkRowDefaults 排版统一与 M3→miuix 组件替换)
    • 恢复应用配置页「本地订阅」分组入口与订阅分组标题
  • 保留 v1.3.1 的全部修复(在恢复后的界面上重新应用):
    • 首页「应用」数量与「应用」Tab 同源(AppInfoRepository.visibleAppInfosFlow)
    • 应用列表点击闪退(TextStyle placeholder 的 lineHeight/width 兜底)
    • 订阅卡片按压高亮露出尖角
    • 二级页顶栏(多选顶栏)上方大片留白(改用 SmallTopAppBar)
  • 补齐 1.3.0 翻译版遗漏的 1.2.7 界面元素:
    • 悬浮按钮恢复液态玻璃(vibrancy + 折射 + 高光,无 RuntimeShader 时回退实色),涉及 8 个页面
    • 关于页整页恢复 1.2.7 版式:滚动视差 Logo(渐变收起/标题淡入)、背景特效(BgEffect 组件包整体移植)、
      顶栏滚动模糊落定转实色;功能保持新底座实现(更新渠道/检查更新/反馈/导出日志/分享 APK)
  • 恢复「触发提示 → 实时通知(流体云/超级岛)」完整功能(1.3.0 换底座时丢失,表现为选项点击无反应):
    • 设置项恢复三选一样式(悬浮窗 / 系统 Toast / 实时通知)与选中态正确回显
    • 移植 ActionTipNotif 渲染器:同一条 ongoing 通知同时适配 ColorOS 流体云(Google Live Update,
      反射调用避免 ROM 缺方法崩溃)与 HyperOS 超级岛(miui.focus 模板);通知权限缺失/无 Live Update
      API 时给出结果提示
    • 恢复「存在时间」快选与自定义秒数(2-120 秒,到期自动取消)、「实时更新系统开关」直达入口、
      「发送测试通知」按当前样式分发并在需要时先请求通知权限
    • store 新增 actionTipStyle / actionTipLiveDurationSec(带默认值,旧配置兼容);
      resolveActionTipStyle 兼容旧版 useSystemToast 开关
  • 修复 AI 服务商三个页面(列表 / 详情 / 使用说明)顶栏与页签底色异常:
    1.3.0 移植时这三个页面用了 material3 Scaffold + GkTopAppBar(顶栏恒为实色 surface、
    页面体为 background 色,与 1.2.7 毛玻璃壳的 surface 容器形成色差)。现统一换回
    GkPageScaffold 毛玻璃二级页壳(顶栏滚动透出毛玻璃、落定转实色),与 1.2.7 一致
  • 全 App 二级页壳统一:其余 20 处仍使用 material3 Scaffold 的页面全部换回
    GkPageScaffold 毛玻璃壳,彻底消除顶栏/页面体的 surface–background 色差:
    • 订阅流 6 页(应用列表、应用规则组、分类、分类规则组、全局规则组、全局排除,
      多选顶栏接壳的 externalScrollBehavior + barColor)
    • 日志 3 页(活动记录、触发记录、无障碍事件)
    • 编辑器壳 GkEditorScaffold(覆盖规则组/分类/规则排除/屏蔽列表编辑、
      触发提示文案、通知文案 6 个编辑页)
    • 应用作用域 2 页、快照页、快照设置页、局部关闭引导页、崩溃报告页(新增 bottomBar 槽)、
      内置浏览器(关闭内容采样避免重绘闪烁)、规则源查看与规则控制关系全屏弹窗

v1.3.1(2026-10-03)

全 App 统一分组与行排版

  • 新增 GkRowDefaults 作为全 App 唯一的排版规格来源:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、
    行内边距 16/12、行首图标 24 + 间距 16、分组小标题 14 Bold(缩进 32)、分割线 0.33dp@10%

  • 设置分组现在会真正渲染「常规 / 无障碍 / 外观 / 其他」这类小标题(此前该参数被忽略)

  • 设置项与开关项改为统一的「标题 16 Medium + 摘要 14」两行结构,行尾箭头改为细箭头

  • 按压反馈统一为「按住整行叠 6% 前景色」(去掉涟漪),与 MIUIX 组件行为一致

  • 组内分割线自动生成(miuix 组件本身不画行间分割线):非首行自动画一条 0.33dp 细线

  • 首页 / 订阅 / 应用 / 设置四个主 Tab、应用配置页规则卡、应用列表卡、订阅卡全部统一到该规格

  • Material3 组件继续替换为官方 miuix:单选按钮、下拉刷新、Tooltip、复选框、底部操作条、
    普通按钮、对话框(17 处调用点零改动)、Scaffold(22 个文件)、输入框(新增 GkTextField 封装,
    删除从 material3 手工拷贝的 GkOutlinedTextField)

AI 配置界面重排

  • 服务商列表:顶部圆角搜索框,「添加服务商」入口改为「标题 + 摘要 + 右箭头」行,已配置项改为
    名称 / 地址 / 元信息三段式,行尾圆点即选即切当前服务商,删除由长按触发并走统一弹窗
  • 服务商详情(配置):输入项改为「label 当占位」的紧凑写法,端点模式改为行尾值 + 箭头,
    测试连接为标准行;自定义请求头可展开;启用开关 + 系统提示词 + 生成参数分组;
    底部是全宽主按钮 + 状态文字,危险操作为居中红字卡片
  • 模型页签:容器与行样式同步到同一套排版规格
  • 排版规格统一:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、行内边距 16/12、
    行首图标 24 + 间距 16、分割线 0.33dp@10%(有图标时左缩进 56)、
    主按钮 44 高/圆角 22、弹窗内外边距 24/16、分组小标题 14 Bold 缩进 32

修复 + 界面回归原版 miuix

  • 修复首页「应用」数量不准确:该卡片误用订阅快照表的 size(等于订阅条数),改为与「应用」Tab 同源的已安装应用列表
  • 修复应用列表点击后闪退:miuix 的 TextStyle(body1 / body2 …)默认只声明 fontSize,lineHeight 为 TextUnit.Unspecified,而 Compose 的 Placeholder 不接受 Unspecified。含全局规则组的应用、以及系统应用,进入应用配置页必崩;现已在标题/规则组名称的内联图标占位符处统一兜底
  • 修复订阅卡片点按后按压高亮露出四个尖角:点击反馈曾挂在卡片外层的 combinedClickable 上,涟漪绘制在卡片背景之下且不受 squircle 裁剪,只从四个圆角溢出;...
Read more

Release v1.4.4

Choose a tag to compare

@github-actions github-actions released this 16 Oct 03:42

更新内容

v1.4.4(2026-10-15)

AI 生成链路的一次升级。⚠ 本版未做完整真机验证,风险已知并写在下面。

  • Chat Completions 改走 SSE 流式,并加上 Max Tokens 自适应:预算偏小自动抬到 16384、
    输出被截断(finish_reason == "length")就翻倍重试一次、被服务端以 token 上限类错误拒绝
    则回退到 8192 并按服务商记住上限,下次不再撞同一堵墙。Responses / anthropic 端点
    未接流式,行为不变。
  • 加强模式(双击快照按钮)现在能区分失败原因:以前 AI 的选择器没命中时,回喂给模型的
    话永远是同一句「未匹配到任何节点」;现在会判断该选择器能否走快速匹配 —— 如果它首个属性
    没按规则写成 [id=] / [vid=] / [text=] 等号精确匹配,重试提示会直接指向写法问题。
    日志同时记录「可快速匹配 true/false」与选择器原文。
  • 新增「设置 - 高级设置 - 外部调用」:显示并一键复制带 token 的抓取快照命令。上一版给
    外部调用加了 token 鉴权,但没给普通用户任何拿到 token 的途径,等于把这条路关上了 —— 这版补回。
  • 同步上游 gkd-selector 0.6.1 的 fast query 诊断 API(纯加法,不改匹配行为)。
  • 单元测试 136 → 152(新增 SSE 解析与 token 预算两组纯函数测试,均不依赖网络)。

未验证项与影响范围

本版改动全部集中在 AI 规则生成链路,无障碍点广告的主流程一行未动。未做真机验证的具体项:

  1. 流式请求在个别服务商上可能不被正确支持 —— 症状是 AI 生成失败或结果缺尾。已加的兜底是:
    响应不是 text/event-stream 时自动回落到原来的非流式解析;但服务商行为无法穷举。
  2. 抬底到 16384 会让部分按 token 计费的服务商单次消耗变高(这是自适应的代价)。
  3. 加强模式的重试提示改动,可能让某些模型的重试收敛变慢(不会更差于原来的笼统提示)。

出问题怎么办

  • 反馈:应用内「日志」页导出日志(设置 - 高级设置 - 导出日志),日志里已带
    可快速匹配 / token 预算 / 流式分支的判断记录,直接发出来即可定位。
  • 临时回退:本版是独立提交链,出问题可整体回退到 v1.4.3(93fc089)——
    回退只需 revert 这 3 个功能提交,不涉及数据库迁移、不涉及配置格式变更,用户侧无感。

v1.4.3(2026-10-15)

AI 生成这条链一次过;顺带两个界面交互修好

  • Chat Completions 改走 SSE 流式,并加上 Max Tokens 自适应:预算偏小自动抬到 16384、
    输出被截断(finish_reason == "length")就翻倍重试、被服务端拒绝则回退到 8192 并
    按服务商记住上限,下次不再撞同一堵墙。Responses / anthropic 端点未接流式,行为不变。
  • 加强模式(双击快照按钮)现在能区分失败原因:以前 AI 生成的选择器没命中时,回喂给
    模型的话永远是同一句「未匹配到任何节点」;现在会用选择器的快速匹配能力判断,如果它
    本身就无法快速匹配(首个属性没写成 [id=] / [vid=] / [text=] 等号精确匹配),
    重试提示会直接指向写法问题。日志同时记下「可快速匹配 true/false」和选择器原文。
  • 触发记录支持按应用多选筛选(只在"全部记录"视图出现,订阅维度和单应用入口行为不变)。
  • 悬浮快照按钮改成单击展开菜单(仅快照 / 加强模式 / 算了),去掉原来单击必须白等的
    400 毫秒双击判定。
  • 同步上游 gkd-selector 0.6.1 的 fast query 诊断 API(纯加法,不改匹配行为)。
  • 新增 SSE 解析与 token 预算的单元测试,单测数 136 → 152。

v1.4.2(2026-10-14)

更新通道修好了 —— 这一版必须手动装一次

  • 修复:检查更新拿到的是上游 gkd-plus 的版本号和更新日志,而且更新失败。 更新通道、
    REPOSITORY_URL(关于页/崩溃上报页的「提 issue」)、commitUrl 四处都还写着
    github.com/fjjzy/gkd-plus,是 fork 时留下的源头错误。因为坏的就是「检查更新」本身,
    老用户没法靠应用内更新拿到这个修复 —— 需要手动下载安装一次。
  • 修复:外部调用接口无鉴权。 ExposeService 是 exported 服务,之前设备上任何应用都能
    用 am start-foreground-service … --ei expose 0 触发截图、expose 1 触发一次全局运行时
    同步。现在必须带上随机 token(存在 noBackupFilesDir,刻意不放 storeFolder —— 那个目录会被
    「导出日志」打包带出去)。内部通道自动带 token,行为不变。
  • 加强模式(双击快照按钮)的判据改对了。 原来只要界面前后签名不同就报「规则验证成功」,
    于是「误点了别的元素、页面滚了一下、跳去别的界面」都会被判成生效 —— 而这正是加强模式要
    排除的情况。现在改成执行后用同一个选择器重新查询,不再命中才算生效。另外中途抛异常
    时不再把已经生成好的规则丢掉。
  • 导出日志可选附带最近 1/3/7 天的快照(节点 JSON + 截图)。默认不带,且不做记忆,
    每次导出都要重新选。
  • priv-kit 0.16.1 → 0.17.7:修 Android 17 无线调试反复弹系统选择器、以及缺局域网权限时
    被动发现挂起。注意它不修 Shizuku 连接下的闪烁,那条仍在排查。

v1.4.1(2026-10-12)

开机自愈修好了,而且是靠真机导出日志定位到的

  • 开机广播不再被「常驻通知」开关拦住:BootReceiver 以前只做 StatusService.autoStart(),
    而它内部的 needRestart 第一项就是常驻通知开关 —— 关掉它就等于把开机兜底一起关掉,
    说明里没提、路径上一行日志都没有。现在广播一旦送达就无条件补一次运行时同步,
    补开无障碍不再依赖常驻通知。
  • 自动开无障碍改认「真的连上了」:以前看的是 isRunning(服务 onCreate 就置 true),
    而实例要到 onServiceConnected 才赋值;服务被创建但绑定失败时,应用会认为"已经在运行",
    于是不再重开、你也关不掉。现在统一用 isReady = isRunning && instance != null。
  • 导出日志现在能直接判定开机问题:补上触发来源(sync(boot) / sync(privilege connected) /
    回前台),并在"已经就绪、无需写入"这个唯一的静默分支也打一条。这次就是靠这两条日志
    区分出「没跑」和「跑了但没事」。
  • 返回上一页时清掉输入焦点:前进不算,编辑页的自动聚焦保持原样。
  • 设置文件解析失败不再无声丢档:先把坏文件改名成 store.json.corrupt-<时间戳> 留档再回落默认值,
    否则下一次写入就直接覆盖掉用户原来的配置。
  • 单元测试第一次进了构建门禁:仓库里 32 个测试文件、136 个用例从来没被 CI 跑过,
    接上之后第一轮就抓出一处移植改动引入的 4 个回归(该改动随后已回退)。

顺带记录一条这次查清但不是本应用问题的现象:ColorOS 的无障碍开关可能显示为「关」,
而框架侧服务其实已经 Bound 且正常收到窗口事件 —— 我们写的是标准的
enabled_accessibility_services + accessibility_enabled,那个 UI 读的是它自己的记录。
以应用内显示的状态为准。

v1.4.0(2026-10-07)

界面层完全跟随 miuix 上游 0.9.4

  • 依赖从 0.9.3 升到 0.9.4。上游在这个版本删掉了 miuix-navigation3-ui,换成自带运行时的
    miuix-nav:NavKey / NavBackStack / NavDisplay / entry DSL 全部归 Miuix,SavedState 与
    ViewModelStore 的 entry 装饰由库接管,因此 navigation3-runtime 与
    lifecycle-viewmodel-navigation3 两个 AndroidX 依赖一并移除。
  • 页面转场改由库提供:删掉自写的 transitionSpec / popTransitionSpec / predictivePopTransitionSpec
    三段,默认走 NavTransitions.MiuixDefault(带连续栈深度,下层页面随返回进度连续缩放与压暗),
    编辑器类页面(触发提示、通知文案、禁用应用列表、规则组/分类编辑等)走 NavTransitions.Modal。
    预测式返回现在是库实现,支持拖拽中途松手回弹。
  • 底栏(液态玻璃)重新同步上游:命中判定换成按按下位置直接算 tab,并补上可聚焦、键盘方向键/回车
    操作与 TalkBack 选中态语义;拖拽动画区分「被取消」与「正常停手」。
  • 14 个镜像自上游 example 的文件全部标注 同步自 miuix@39c40f9 (v0.9.4) <上游路径>,
    以后同步可以直接 diff,不用再靠肉眼比对。

修复:深色/浅色下大量内容看不清

  • MIUIX→Material3 的颜色桥接原本漏了 10 个槽位(surfaceContainerLow/Lowest、surfaceBright/Dim、
    inverse*、surfaceTint、outlineVariant、scrim),一直保留 Material3 基线值。MIUIX 深色的
    surface 是纯黑、background 是 #242424,明度阶梯方向和 Material3 默认相反,于是没被桥接的
    面板色会和内容色对冲。现在按 MIUIX 自己的明度补齐(深浅分开取)。
  • 主题原本只提供 MIUIX 的内容色,没提供 Material3 的同名 Local:没被 M3 Surface 包住的
    M3 Text / Icon 取不到色就退到平台默认(黑),深色下表现为「内容不显示」。现在两个都提供。
  • 批量修掉 23 处颜色槽位误用。根因是 MIUIX 的 secondary 是容器色(浅色 #E6E6E6、
    深色 #505050,配套前景恒为白),不是 Material3 那个「次要强调色」,而代码里把它当文字色用了 11 处
    (订阅名、作者、版本号、更新链接、白名单提示、活动名等),浅色下等于白底画白字;同类问题还有
    下拉菜单选中项背景用恒为纯白的前景槽位、黑色遮罩上的提示文字用线条色、以及在 60% 文字色上再乘一次
    alpha 只剩 24%~36% 等。.background(secondary) 那类正确用法保持不变。

修复:几个会静默失效的逻辑洞

  • updateSystemDefaultAppId 在没有可解析 HOME(或包可见性受限)的设备上会抛空指针,而它是运行时
    状态同步的第一步,一抛就把「给自己授权 → 刷新权限 → 修无障碍 → 自动开无障碍」整条链带走,
    表现正是「拿到 root 了但无障碍没自动开」。改为空值走兜底,并把同步链改成逐步隔离,
    失败步骤名写进日志。
  • 切换工作模式后只关掉了旧通道、没有任何一次状态同步,新模式的服务没人起,必须退出重进界面。
  • 悬浮窗/截图服务的 onDestroyed 无条件清空全局实例:系统重建服务时旧实例的销毁会清掉新实例的引用,
    之后永久静默失效。照无障碍服务的写法加上「只清自己」的判断。
  • 规则匹配的并发标志位在协程内部才置位,拦不住同一帧内连发的无障碍事件,导致并发查询与重复点击。
    占位提前到入口。

清理

  • 删掉 9 个全仓零引用的文件(1955 行):自绘三态开关、整页死代码的旧首页、旧版订阅卡片等。
    它们是 v1.3.2「界面回退到 1.2.7 观感」时把旧副本一起捞回来的,其中旧订阅卡片还带着
    v1.3.1 已经修掉的「按压露尖角」写法。纯删除,行为与外观不变。

v1.3.3(2026-10-06)

修复:ColorOS 等 ROM 关机后无障碍不会自动恢复

  • 原因不是时序也不是权限,而是代码自锁:fixRestartAutomatorService() 要求 enableAutomator 为真才会写无障碍,
    而该标志位只有无障碍已经启动之后才为真 —— 冷启动时必然是假,于是永远轮不到去开
    (自动化模式不受影响,它的连接是无条件走的,所以表现成「自动化能自己起、无障碍不能」)
  • 新增 armA11yService():以「工作模式 = 无障碍」作为用户意图,自己复核 WRITE_SECURE_SETTINGS,
    写入无障碍总开关与服务列表,并在 2/5/10 秒内最多 4 次复验重试(应对刚拉起来又被系统解绑的那几秒)
  • 触发点接在运行时状态同步上:开机自启、拿到 root(特权通道就绪)、回到前台各补一次,root 迟到也能补开
  • 不和手动操作对着干:通过开关或下拉磁贴主动关闭无障碍后 30 分钟内不自动打开,主动再开立即撤销抑制;
    前台应用命中「禁用无障碍列表」时不打开
  • 每个拦截分支都写运行日志,再遇到没自动开时导出日志即可直接定位是被哪一条拦住

开机自启兜底(恢复自本地构建)

  • 新增 BootReceiver(BOOT_COMPLETED)与 StatusServiceJobService(persisted Job,开机 +10 秒兜底):
    常驻通知/服务状态不再需要开机后手动打开
  • AIDL 接口抽成独立模块 gkd-aidl(包名 li.gkd.aidl)并补齐 R8 keep 规则
  • 新增特权能力探测与权限常量集中定义

构建防护

  • APK 内新增 assets/working-tree.txt,自证构建时的工作区状态:干净时只有 commit 行;
    存在未提交改动时列出文件路径,并在构建目录留下 dirty.patch 与文件快照,
    避免再次出现「本机构建源码丢失、只能从 APK 反推」

v1.3.2(2026-10-03)

界面层整体回退到 v1.2.7 观感

  • 底座与业务能力保持 v1.3.1 不变,界面层整体恢复为 v1.2.7 那套 MIUIX 渲染层(即 v1.3.0 移植到新底座后的版本):
    • 恢复自研液态玻璃悬浮底栏(ui/liquid 整包)与配套设置开关
    • 恢复 GkTriStateSwitch、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup 等自绘组件
    • 恢复旧版设置分组 / 卡片 / 对话框 / 输入框样式(撤销 1.3.1 的 GkRowDefaults 排版统一与 M3→miuix 组件替换)
    • 恢复应用配置页「本地订阅」分组入口与订阅分组标题
  • 保留 v1.3.1 的全部修复(在恢复后的界面上重新应用):
    • 首页「应用」数量与「应用」Tab 同源(AppInfoRepository.visibleAppInfosFlow)
    • 应用列表点击闪退(TextStyle placeholder 的 lineHeight/width 兜底)
    • 订阅卡片按压高亮露出尖角
    • 二级页顶栏(多选顶栏)上方大片留白(改用 SmallTopAppBar)
  • 补齐 1.3.0 翻译版遗漏的 1.2.7 界面元素:
    • 悬浮按钮恢复液态玻璃(vibrancy + 折射 + 高光,无 RuntimeShader 时回退实色),涉及 8 个页面
    • 关于页整页恢复 1.2.7 版式:滚动视差 Logo(渐变收起/标题淡入)、背景特效(BgEffect 组件包整体移植)、
      顶栏滚动模糊落定转实色;功能保持新底座实现(更新渠道/检查更新/反馈/导出日志/分享 APK)
  • 恢复「触发提示 → 实时通知(流体云/超级岛)」完整功能(1.3.0 换底座时丢失,表现为选项点击无反应):
    • 设置项恢复三选一样式(悬浮窗 / 系统 Toast / 实时通知)与选中态正确回显
    • 移植 ActionTipNotif 渲染器:同一条 ongoing 通知同时适配 ColorOS 流体云(Google Live Update,
      反射调用避免 ROM 缺方法崩溃)与 HyperOS 超级岛(miui.focus 模板);通知权限缺失/无 Live Update
      API 时给出结果提示
    • 恢复「存在时间」快选与自定义秒数(2-120 秒,到期自动取消)、「实时更新系统开关」直达入口、
      「发送测试通知」按当前样式分发并在需要时先请求通知权限
    • store 新增 actionTipStyle / actionTipLiveDurationSec(带默认值,旧配置兼容);
      resolveActionTipStyle 兼容旧版 useSystemToast 开关
  • 修复 AI 服务商三个页面(列表 / 详情 / 使用说明)顶栏与页签底色异常:
    1.3.0 移植时这三个页面用了 material3 Scaffold + GkTopAppBar(顶栏恒为实色 surface、
    页面体为 background 色,与 1.2.7 毛玻璃壳的 surface 容器形成色差)。现统一换回
    GkPageScaffold 毛玻璃二级页壳(顶栏滚动透出毛玻璃、落定转实色),与 1.2.7 一致
  • 全 App 二级页壳统一:其余 20 处仍使用 material3 Scaffold 的页面全部换回
    GkPageScaffold 毛玻璃壳,彻底消除顶栏/页面体的 surface–background 色差:
    • 订阅流 6 页(应用列表、应用规则组、分类、分类规则组、全局规则组、全局排除,
      多选顶栏接壳的 externalScrollBehavior + barColor)
    • 日志 3 页(活动记录、触发记录、无障碍事件)
    • 编辑器壳 GkEditorScaffold(覆盖规则组/分类/规则排除/屏蔽列表编辑、
      触发提示文案、通知文案 6 个编辑页)
    • 应用作用域 2 页、快照页、快照设置页、局部关闭引导页、崩溃报告页(新增 bottomBar 槽)、
      内置浏览器(关闭内容采样避免重绘闪烁)、规则源查看与规则控制关系全屏弹窗

v1.3.1(2026-10-03)

全 App 统一分组与行排版

  • 新增 GkRowDefaults 作为全 App 唯一的排版规格来源:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、
    行内边距 16/12、行首图标 24 + 间距 16、分组小标题 14 Bold(缩进 32)、分割线 0.33dp@10%

  • 设置分组现在会真正渲染「常规 / 无障碍 / 外观 / 其他」这类小标题(此前该参数被忽略)

  • 设置项与开关项改为统一的「标题 16 Medium + 摘要 14」两行结构,行尾箭头改为细箭头

  • 按压反馈统一为「按住整行叠 6% 前景色」(去掉涟漪),与 MIUIX 组件行为一致

  • 组内分割线自动生成(miuix 组件本身不画行间分割线):非首行自动画一条 0.33dp 细线

  • 首页 / 订阅 / 应用 / 设置四个主 Tab、应用配置页规则卡、应用列表卡、订阅卡全部统一到该规格

  • Material3 组件继续替换为官方 miuix:单选按钮、下拉刷新、Tooltip、复选框、底部操作条、
    普通按钮、对话框(17 处调用点零改动)、Scaffold(22 个文件)、输入框(新增 GkTextField 封装,
    删除从 material3 手工拷贝的 GkOutlinedTextField)

AI 配置界面重排

  • 服务商列表:顶部圆角搜索框,「添加服务商」入口改为「标题 + 摘要 + 右箭头」行,已配置项改为
    名称 / 地址 / 元信息三段式,行尾圆点即选即切当前服务商,删除由长按触发并走统一弹窗
  • 服务商详情(配置):输入项改为「label 当占位」的紧凑写法,端点模式改为行尾值 + 箭头,
    测试连接为标准行;自定义请求头可展开;启用开关 + 系统提示词 + 生成参数分组;
    底部是全宽主按钮 + 状态文字,危险操作为居中红字卡片
  • 模型页签:容器与行样式同步到同一套排版规格
  • 排版规格统一:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、行内边距 16/12、
    行首图标 24 + 间距 16、分割线 0.33dp@10%(有图标时左缩进 56)、
    主按钮 44 高/圆角 22、弹窗内外边距 24/16、分组小标题 14 Bold 缩进 32

修复 + 界面回归原版 miuix

  • 修复首页「应用」数量不准确:该卡片误用订阅快照表的 size(等于订阅条数),改为与「应用」Tab 同源的已安装应用列表
  • 修复应用列表点击后闪退:miuix 的 TextStyle(body1 / body2 …)默认只声明 fontSize,lineHeight 为 TextUnit.Unspecified,而 Compose 的 Placeholder 不接受 Unspecified。含全局规则组的应用、以及系统应用,进入应用配置页必崩;现已在标题/规则组名称的内联图标占位符处统一兜底
  • 修复订阅卡片点按后按压高亮露出四个尖角:点击反馈曾挂在卡片外层的 combinedClickable 上,涟漪绘制在卡片背景之下且不受 squircle 裁剪,只从四个圆角溢出;现已移入卡片内部
  • 修复二级页顶栏上方大片留白:MIUIX 的 TopAppBar 是大标题栏,标题传空串时仍会占掉一整行大标题高度(CollapsedHeight + 一行 title1 + LargeTitleBottomPadding),再把 bottomContent 顶到更下面。应用配置页、订阅应用列表页...
Read more

Release v1.4.3

Choose a tag to compare

@github-actions github-actions released this 15 Oct 11:01

更新内容

v1.4.3(2026-10-15)

AI 生成这条链一次过;顺带两个界面交互修好

  • Chat Completions 改走 SSE 流式,并加上 Max Tokens 自适应:预算偏小自动抬到 16384、
    输出被截断(finish_reason == "length")就翻倍重试、被服务端拒绝则回退到 8192 并
    按服务商记住上限,下次不再撞同一堵墙。Responses / anthropic 端点未接流式,行为不变。
  • 加强模式(双击快照按钮)现在能区分失败原因:以前 AI 生成的选择器没命中时,回喂给
    模型的话永远是同一句「未匹配到任何节点」;现在会用选择器的快速匹配能力判断,如果它
    本身就无法快速匹配(首个属性没写成 [id=] / [vid=] / [text=] 等号精确匹配),
    重试提示会直接指向写法问题。日志同时记下「可快速匹配 true/false」和选择器原文。
  • 触发记录支持按应用多选筛选(只在"全部记录"视图出现,订阅维度和单应用入口行为不变)。
  • 悬浮快照按钮改成单击展开菜单(仅快照 / 加强模式 / 算了),去掉原来单击必须白等的
    400 毫秒双击判定。
  • 同步上游 gkd-selector 0.6.1 的 fast query 诊断 API(纯加法,不改匹配行为)。
  • 新增 SSE 解析与 token 预算的单元测试,单测数 136 → 152。

v1.4.2(2026-10-14)

更新通道修好了 —— 这一版必须手动装一次

  • 修复:检查更新拿到的是上游 gkd-plus 的版本号和更新日志,而且更新失败。 更新通道、
    REPOSITORY_URL(关于页/崩溃上报页的「提 issue」)、commitUrl 四处都还写着
    github.com/fjjzy/gkd-plus,是 fork 时留下的源头错误。因为坏的就是「检查更新」本身,
    老用户没法靠应用内更新拿到这个修复 —— 需要手动下载安装一次。
  • 修复:外部调用接口无鉴权。 ExposeService 是 exported 服务,之前设备上任何应用都能
    用 am start-foreground-service … --ei expose 0 触发截图、expose 1 触发一次全局运行时
    同步。现在必须带上随机 token(存在 noBackupFilesDir,刻意不放 storeFolder —— 那个目录会被
    「导出日志」打包带出去)。内部通道自动带 token,行为不变。
  • 加强模式(双击快照按钮)的判据改对了。 原来只要界面前后签名不同就报「规则验证成功」,
    于是「误点了别的元素、页面滚了一下、跳去别的界面」都会被判成生效 —— 而这正是加强模式要
    排除的情况。现在改成执行后用同一个选择器重新查询,不再命中才算生效。另外中途抛异常
    时不再把已经生成好的规则丢掉。
  • 导出日志可选附带最近 1/3/7 天的快照(节点 JSON + 截图)。默认不带,且不做记忆,
    每次导出都要重新选。
  • priv-kit 0.16.1 → 0.17.7:修 Android 17 无线调试反复弹系统选择器、以及缺局域网权限时
    被动发现挂起。注意它不修 Shizuku 连接下的闪烁,那条仍在排查。

v1.4.1(2026-10-12)

开机自愈修好了,而且是靠真机导出日志定位到的

  • 开机广播不再被「常驻通知」开关拦住:BootReceiver 以前只做 StatusService.autoStart(),
    而它内部的 needRestart 第一项就是常驻通知开关 —— 关掉它就等于把开机兜底一起关掉,
    说明里没提、路径上一行日志都没有。现在广播一旦送达就无条件补一次运行时同步,
    补开无障碍不再依赖常驻通知。
  • 自动开无障碍改认「真的连上了」:以前看的是 isRunning(服务 onCreate 就置 true),
    而实例要到 onServiceConnected 才赋值;服务被创建但绑定失败时,应用会认为"已经在运行",
    于是不再重开、你也关不掉。现在统一用 isReady = isRunning && instance != null。
  • 导出日志现在能直接判定开机问题:补上触发来源(sync(boot) / sync(privilege connected) /
    回前台),并在"已经就绪、无需写入"这个唯一的静默分支也打一条。这次就是靠这两条日志
    区分出「没跑」和「跑了但没事」。
  • 返回上一页时清掉输入焦点:前进不算,编辑页的自动聚焦保持原样。
  • 设置文件解析失败不再无声丢档:先把坏文件改名成 store.json.corrupt-<时间戳> 留档再回落默认值,
    否则下一次写入就直接覆盖掉用户原来的配置。
  • 单元测试第一次进了构建门禁:仓库里 32 个测试文件、136 个用例从来没被 CI 跑过,
    接上之后第一轮就抓出一处移植改动引入的 4 个回归(该改动随后已回退)。

顺带记录一条这次查清但不是本应用问题的现象:ColorOS 的无障碍开关可能显示为「关」,
而框架侧服务其实已经 Bound 且正常收到窗口事件 —— 我们写的是标准的
enabled_accessibility_services + accessibility_enabled,那个 UI 读的是它自己的记录。
以应用内显示的状态为准。

v1.4.0(2026-10-07)

界面层完全跟随 miuix 上游 0.9.4

  • 依赖从 0.9.3 升到 0.9.4。上游在这个版本删掉了 miuix-navigation3-ui,换成自带运行时的
    miuix-nav:NavKey / NavBackStack / NavDisplay / entry DSL 全部归 Miuix,SavedState 与
    ViewModelStore 的 entry 装饰由库接管,因此 navigation3-runtime 与
    lifecycle-viewmodel-navigation3 两个 AndroidX 依赖一并移除。
  • 页面转场改由库提供:删掉自写的 transitionSpec / popTransitionSpec / predictivePopTransitionSpec
    三段,默认走 NavTransitions.MiuixDefault(带连续栈深度,下层页面随返回进度连续缩放与压暗),
    编辑器类页面(触发提示、通知文案、禁用应用列表、规则组/分类编辑等)走 NavTransitions.Modal。
    预测式返回现在是库实现,支持拖拽中途松手回弹。
  • 底栏(液态玻璃)重新同步上游:命中判定换成按按下位置直接算 tab,并补上可聚焦、键盘方向键/回车
    操作与 TalkBack 选中态语义;拖拽动画区分「被取消」与「正常停手」。
  • 14 个镜像自上游 example 的文件全部标注 同步自 miuix@39c40f9 (v0.9.4) <上游路径>,
    以后同步可以直接 diff,不用再靠肉眼比对。

修复:深色/浅色下大量内容看不清

  • MIUIX→Material3 的颜色桥接原本漏了 10 个槽位(surfaceContainerLow/Lowest、surfaceBright/Dim、
    inverse*、surfaceTint、outlineVariant、scrim),一直保留 Material3 基线值。MIUIX 深色的
    surface 是纯黑、background 是 #242424,明度阶梯方向和 Material3 默认相反,于是没被桥接的
    面板色会和内容色对冲。现在按 MIUIX 自己的明度补齐(深浅分开取)。
  • 主题原本只提供 MIUIX 的内容色,没提供 Material3 的同名 Local:没被 M3 Surface 包住的
    M3 Text / Icon 取不到色就退到平台默认(黑),深色下表现为「内容不显示」。现在两个都提供。
  • 批量修掉 23 处颜色槽位误用。根因是 MIUIX 的 secondary 是容器色(浅色 #E6E6E6、
    深色 #505050,配套前景恒为白),不是 Material3 那个「次要强调色」,而代码里把它当文字色用了 11 处
    (订阅名、作者、版本号、更新链接、白名单提示、活动名等),浅色下等于白底画白字;同类问题还有
    下拉菜单选中项背景用恒为纯白的前景槽位、黑色遮罩上的提示文字用线条色、以及在 60% 文字色上再乘一次
    alpha 只剩 24%~36% 等。.background(secondary) 那类正确用法保持不变。

修复:几个会静默失效的逻辑洞

  • updateSystemDefaultAppId 在没有可解析 HOME(或包可见性受限)的设备上会抛空指针,而它是运行时
    状态同步的第一步,一抛就把「给自己授权 → 刷新权限 → 修无障碍 → 自动开无障碍」整条链带走,
    表现正是「拿到 root 了但无障碍没自动开」。改为空值走兜底,并把同步链改成逐步隔离,
    失败步骤名写进日志。
  • 切换工作模式后只关掉了旧通道、没有任何一次状态同步,新模式的服务没人起,必须退出重进界面。
  • 悬浮窗/截图服务的 onDestroyed 无条件清空全局实例:系统重建服务时旧实例的销毁会清掉新实例的引用,
    之后永久静默失效。照无障碍服务的写法加上「只清自己」的判断。
  • 规则匹配的并发标志位在协程内部才置位,拦不住同一帧内连发的无障碍事件,导致并发查询与重复点击。
    占位提前到入口。

清理

  • 删掉 9 个全仓零引用的文件(1955 行):自绘三态开关、整页死代码的旧首页、旧版订阅卡片等。
    它们是 v1.3.2「界面回退到 1.2.7 观感」时把旧副本一起捞回来的,其中旧订阅卡片还带着
    v1.3.1 已经修掉的「按压露尖角」写法。纯删除,行为与外观不变。

v1.3.3(2026-10-06)

修复:ColorOS 等 ROM 关机后无障碍不会自动恢复

  • 原因不是时序也不是权限,而是代码自锁:fixRestartAutomatorService() 要求 enableAutomator 为真才会写无障碍,
    而该标志位只有无障碍已经启动之后才为真 —— 冷启动时必然是假,于是永远轮不到去开
    (自动化模式不受影响,它的连接是无条件走的,所以表现成「自动化能自己起、无障碍不能」)
  • 新增 armA11yService():以「工作模式 = 无障碍」作为用户意图,自己复核 WRITE_SECURE_SETTINGS,
    写入无障碍总开关与服务列表,并在 2/5/10 秒内最多 4 次复验重试(应对刚拉起来又被系统解绑的那几秒)
  • 触发点接在运行时状态同步上:开机自启、拿到 root(特权通道就绪)、回到前台各补一次,root 迟到也能补开
  • 不和手动操作对着干:通过开关或下拉磁贴主动关闭无障碍后 30 分钟内不自动打开,主动再开立即撤销抑制;
    前台应用命中「禁用无障碍列表」时不打开
  • 每个拦截分支都写运行日志,再遇到没自动开时导出日志即可直接定位是被哪一条拦住

开机自启兜底(恢复自本地构建)

  • 新增 BootReceiver(BOOT_COMPLETED)与 StatusServiceJobService(persisted Job,开机 +10 秒兜底):
    常驻通知/服务状态不再需要开机后手动打开
  • AIDL 接口抽成独立模块 gkd-aidl(包名 li.gkd.aidl)并补齐 R8 keep 规则
  • 新增特权能力探测与权限常量集中定义

构建防护

  • APK 内新增 assets/working-tree.txt,自证构建时的工作区状态:干净时只有 commit 行;
    存在未提交改动时列出文件路径,并在构建目录留下 dirty.patch 与文件快照,
    避免再次出现「本机构建源码丢失、只能从 APK 反推」

v1.3.2(2026-10-03)

界面层整体回退到 v1.2.7 观感

  • 底座与业务能力保持 v1.3.1 不变,界面层整体恢复为 v1.2.7 那套 MIUIX 渲染层(即 v1.3.0 移植到新底座后的版本):
    • 恢复自研液态玻璃悬浮底栏(ui/liquid 整包)与配套设置开关
    • 恢复 GkTriStateSwitch、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup 等自绘组件
    • 恢复旧版设置分组 / 卡片 / 对话框 / 输入框样式(撤销 1.3.1 的 GkRowDefaults 排版统一与 M3→miuix 组件替换)
    • 恢复应用配置页「本地订阅」分组入口与订阅分组标题
  • 保留 v1.3.1 的全部修复(在恢复后的界面上重新应用):
    • 首页「应用」数量与「应用」Tab 同源(AppInfoRepository.visibleAppInfosFlow)
    • 应用列表点击闪退(TextStyle placeholder 的 lineHeight/width 兜底)
    • 订阅卡片按压高亮露出尖角
    • 二级页顶栏(多选顶栏)上方大片留白(改用 SmallTopAppBar)
  • 补齐 1.3.0 翻译版遗漏的 1.2.7 界面元素:
    • 悬浮按钮恢复液态玻璃(vibrancy + 折射 + 高光,无 RuntimeShader 时回退实色),涉及 8 个页面
    • 关于页整页恢复 1.2.7 版式:滚动视差 Logo(渐变收起/标题淡入)、背景特效(BgEffect 组件包整体移植)、
      顶栏滚动模糊落定转实色;功能保持新底座实现(更新渠道/检查更新/反馈/导出日志/分享 APK)
  • 恢复「触发提示 → 实时通知(流体云/超级岛)」完整功能(1.3.0 换底座时丢失,表现为选项点击无反应):
    • 设置项恢复三选一样式(悬浮窗 / 系统 Toast / 实时通知)与选中态正确回显
    • 移植 ActionTipNotif 渲染器:同一条 ongoing 通知同时适配 ColorOS 流体云(Google Live Update,
      反射调用避免 ROM 缺方法崩溃)与 HyperOS 超级岛(miui.focus 模板);通知权限缺失/无 Live Update
      API 时给出结果提示
    • 恢复「存在时间」快选与自定义秒数(2-120 秒,到期自动取消)、「实时更新系统开关」直达入口、
      「发送测试通知」按当前样式分发并在需要时先请求通知权限
    • store 新增 actionTipStyle / actionTipLiveDurationSec(带默认值,旧配置兼容);
      resolveActionTipStyle 兼容旧版 useSystemToast 开关
  • 修复 AI 服务商三个页面(列表 / 详情 / 使用说明)顶栏与页签底色异常:
    1.3.0 移植时这三个页面用了 material3 Scaffold + GkTopAppBar(顶栏恒为实色 surface、
    页面体为 background 色,与 1.2.7 毛玻璃壳的 surface 容器形成色差)。现统一换回
    GkPageScaffold 毛玻璃二级页壳(顶栏滚动透出毛玻璃、落定转实色),与 1.2.7 一致
  • 全 App 二级页壳统一:其余 20 处仍使用 material3 Scaffold 的页面全部换回
    GkPageScaffold 毛玻璃壳,彻底消除顶栏/页面体的 surface–background 色差:
    • 订阅流 6 页(应用列表、应用规则组、分类、分类规则组、全局规则组、全局排除,
      多选顶栏接壳的 externalScrollBehavior + barColor)
    • 日志 3 页(活动记录、触发记录、无障碍事件)
    • 编辑器壳 GkEditorScaffold(覆盖规则组/分类/规则排除/屏蔽列表编辑、
      触发提示文案、通知文案 6 个编辑页)
    • 应用作用域 2 页、快照页、快照设置页、局部关闭引导页、崩溃报告页(新增 bottomBar 槽)、
      内置浏览器(关闭内容采样避免重绘闪烁)、规则源查看与规则控制关系全屏弹窗

v1.3.1(2026-10-03)

全 App 统一分组与行排版

  • 新增 GkRowDefaults 作为全 App 唯一的排版规格来源:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、
    行内边距 16/12、行首图标 24 + 间距 16、分组小标题 14 Bold(缩进 32)、分割线 0.33dp@10%

  • 设置分组现在会真正渲染「常规 / 无障碍 / 外观 / 其他」这类小标题(此前该参数被忽略)

  • 设置项与开关项改为统一的「标题 16 Medium + 摘要 14」两行结构,行尾箭头改为细箭头

  • 按压反馈统一为「按住整行叠 6% 前景色」(去掉涟漪),与 MIUIX 组件行为一致

  • 组内分割线自动生成(miuix 组件本身不画行间分割线):非首行自动画一条 0.33dp 细线

  • 首页 / 订阅 / 应用 / 设置四个主 Tab、应用配置页规则卡、应用列表卡、订阅卡全部统一到该规格

  • Material3 组件继续替换为官方 miuix:单选按钮、下拉刷新、Tooltip、复选框、底部操作条、
    普通按钮、对话框(17 处调用点零改动)、Scaffold(22 个文件)、输入框(新增 GkTextField 封装,
    删除从 material3 手工拷贝的 GkOutlinedTextField)

AI 配置界面重排

  • 服务商列表:顶部圆角搜索框,「添加服务商」入口改为「标题 + 摘要 + 右箭头」行,已配置项改为
    名称 / 地址 / 元信息三段式,行尾圆点即选即切当前服务商,删除由长按触发并走统一弹窗
  • 服务商详情(配置):输入项改为「label 当占位」的紧凑写法,端点模式改为行尾值 + 箭头,
    测试连接为标准行;自定义请求头可展开;启用开关 + 系统提示词 + 生成参数分组;
    底部是全宽主按钮 + 状态文字,危险操作为居中红字卡片
  • 模型页签:容器与行样式同步到同一套排版规格
  • 排版规格统一:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、行内边距 16/12、
    行首图标 24 + 间距 16、分割线 0.33dp@10%(有图标时左缩进 56)、
    主按钮 44 高/圆角 22、弹窗内外边距 24/16、分组小标题 14 Bold 缩进 32

修复 + 界面回归原版 miuix

  • 修复首页「应用」数量不准确:该卡片误用订阅快照表的 size(等于订阅条数),改为与「应用」Tab 同源的已安装应用列表
  • 修复应用列表点击后闪退:miuix 的 TextStyle(body1 / body2 …)默认只声明 fontSize,lineHeight 为 TextUnit.Unspecified,而 Compose 的 Placeholder 不接受 Unspecified。含全局规则组的应用、以及系统应用,进入应用配置页必崩;现已在标题/规则组名称的内联图标占位符处统一兜底
  • 修复订阅卡片点按后按压高亮露出四个尖角:点击反馈曾挂在卡片外层的 combinedClickable 上,涟漪绘制在卡片背景之下且不受 squircle 裁剪,只从四个圆角溢出;现已移入卡片内部
  • 修复二级页顶栏上方大片留白:MIUIX 的 TopAppBar 是大标题栏,标题传空串时仍会占掉一整行大标题高度(CollapsedHeight + 一行 title1 + LargeTitleBottomPadding),再把 bottomContent 顶到更下面。应用配置页、订阅应用列表页这类「标题自带渲染(应用名内联图标 / 已选 N 项)」的顶栏现改用 SmallTopAppBar,标题紧贴图标行下方,约省掉 34dp 空白
  • 弃用早期移植自 gkd-miuix 的界面方案,改为直接使用原版 miuix 组件:
    • 首页外壳简化为「一个 Scaffold + 一个 LayerBackdrop」,模糊统一走 miuix 官方 Modifier.textureBlur
    • 删除自研液态玻璃底栏(ui/liquid 整包)与配套的分页采样互斥、离屏栅格化 hack,设置页同步移除「液态玻璃」开关
    • 删除 GkTriStateSwitch(691 行自绘开关)、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup、EmptyText 等无人引用的残留组件
  • 界面层继续把残留的 Material3 组件换成原版 miuix:
    • 对话框/操作按钮:TextButton 39 处(19 个文件)改用 miuix TextButton,确认类按钮统一为 textButtonColorsPrimary(),破坏性操作沿用红色
    • 图标按钮配色来源统一(LocalContentColor 20 个文件改读 miuix 主题值,与 miuix Card / BasicComponent 的内容色对齐)
    • 加载指示:CircularProgressIndicator / LinearProgressIndicator 改用 miuix 版本
    • 容器与分割线:Surface、HorizontalDivider 改用 miuix 版本
    • 应用配置页顶栏标题改为居中显示
    • 图标按钮:GkIconButton / GkSizedIconButton / GkBlockCloseIconButton / GkSearchCloseIconButton 与三处直用的 IconButton 全部改用 miuix IconButton(miuix 无 colors 参数,配色改为 backgroundColor + 图标 tint);自绘的 CustomIconButton(Box + Material ripple)删除
  • 应用配置页整理:
    • 去掉「本地订阅 >」分组入口(它指向的二级订阅页功能与本页重复);单订阅时整行不再显示,仅当同一应用被多份订阅覆盖时才保留一个不可点的分组标签以便区分来源
    • 规则卡片之间补 4dp 垂直间距,不再首尾相连糊成一整块

v1.3.0(重构版)

**架构重构 + 全界...

Read more

Release v1.4.2

Choose a tag to compare

@github-actions github-actions released this 15 Oct 03:39

更新内容

v1.4.2(2026-10-14)

更新通道修好了 —— 这一版必须手动装一次

  • 修复:检查更新拿到的是上游 gkd-plus 的版本号和更新日志,而且更新失败。 更新通道、
    REPOSITORY_URL(关于页/崩溃上报页的「提 issue」)、commitUrl 四处都还写着
    github.com/fjjzy/gkd-plus,是 fork 时留下的源头错误。因为坏的就是「检查更新」本身,
    老用户没法靠应用内更新拿到这个修复 —— 需要手动下载安装一次。
  • 修复:外部调用接口无鉴权。 ExposeService 是 exported 服务,之前设备上任何应用都能
    用 am start-foreground-service … --ei expose 0 触发截图、expose 1 触发一次全局运行时
    同步。现在必须带上随机 token(存在 noBackupFilesDir,刻意不放 storeFolder —— 那个目录会被
    「导出日志」打包带出去)。内部通道自动带 token,行为不变。
  • 加强模式(双击快照按钮)的判据改对了。 原来只要界面前后签名不同就报「规则验证成功」,
    于是「误点了别的元素、页面滚了一下、跳去别的界面」都会被判成生效 —— 而这正是加强模式要
    排除的情况。现在改成执行后用同一个选择器重新查询,不再命中才算生效。另外中途抛异常
    时不再把已经生成好的规则丢掉。
  • 导出日志可选附带最近 1/3/7 天的快照(节点 JSON + 截图)。默认不带,且不做记忆,
    每次导出都要重新选。
  • priv-kit 0.16.1 → 0.17.7:修 Android 17 无线调试反复弹系统选择器、以及缺局域网权限时
    被动发现挂起。注意它不修 Shizuku 连接下的闪烁,那条仍在排查。

v1.4.1(2026-10-12)

开机自愈修好了,而且是靠真机导出日志定位到的

  • 开机广播不再被「常驻通知」开关拦住:BootReceiver 以前只做 StatusService.autoStart(),
    而它内部的 needRestart 第一项就是常驻通知开关 —— 关掉它就等于把开机兜底一起关掉,
    说明里没提、路径上一行日志都没有。现在广播一旦送达就无条件补一次运行时同步,
    补开无障碍不再依赖常驻通知。
  • 自动开无障碍改认「真的连上了」:以前看的是 isRunning(服务 onCreate 就置 true),
    而实例要到 onServiceConnected 才赋值;服务被创建但绑定失败时,应用会认为"已经在运行",
    于是不再重开、你也关不掉。现在统一用 isReady = isRunning && instance != null。
  • 导出日志现在能直接判定开机问题:补上触发来源(sync(boot) / sync(privilege connected) /
    回前台),并在"已经就绪、无需写入"这个唯一的静默分支也打一条。这次就是靠这两条日志
    区分出「没跑」和「跑了但没事」。
  • 返回上一页时清掉输入焦点:前进不算,编辑页的自动聚焦保持原样。
  • 设置文件解析失败不再无声丢档:先把坏文件改名成 store.json.corrupt-<时间戳> 留档再回落默认值,
    否则下一次写入就直接覆盖掉用户原来的配置。
  • 单元测试第一次进了构建门禁:仓库里 32 个测试文件、136 个用例从来没被 CI 跑过,
    接上之后第一轮就抓出一处移植改动引入的 4 个回归(该改动随后已回退)。

顺带记录一条这次查清但不是本应用问题的现象:ColorOS 的无障碍开关可能显示为「关」,
而框架侧服务其实已经 Bound 且正常收到窗口事件 —— 我们写的是标准的
enabled_accessibility_services + accessibility_enabled,那个 UI 读的是它自己的记录。
以应用内显示的状态为准。

v1.4.0(2026-10-07)

界面层完全跟随 miuix 上游 0.9.4

  • 依赖从 0.9.3 升到 0.9.4。上游在这个版本删掉了 miuix-navigation3-ui,换成自带运行时的
    miuix-nav:NavKey / NavBackStack / NavDisplay / entry DSL 全部归 Miuix,SavedState 与
    ViewModelStore 的 entry 装饰由库接管,因此 navigation3-runtime 与
    lifecycle-viewmodel-navigation3 两个 AndroidX 依赖一并移除。
  • 页面转场改由库提供:删掉自写的 transitionSpec / popTransitionSpec / predictivePopTransitionSpec
    三段,默认走 NavTransitions.MiuixDefault(带连续栈深度,下层页面随返回进度连续缩放与压暗),
    编辑器类页面(触发提示、通知文案、禁用应用列表、规则组/分类编辑等)走 NavTransitions.Modal。
    预测式返回现在是库实现,支持拖拽中途松手回弹。
  • 底栏(液态玻璃)重新同步上游:命中判定换成按按下位置直接算 tab,并补上可聚焦、键盘方向键/回车
    操作与 TalkBack 选中态语义;拖拽动画区分「被取消」与「正常停手」。
  • 14 个镜像自上游 example 的文件全部标注 同步自 miuix@39c40f9 (v0.9.4) <上游路径>,
    以后同步可以直接 diff,不用再靠肉眼比对。

修复:深色/浅色下大量内容看不清

  • MIUIX→Material3 的颜色桥接原本漏了 10 个槽位(surfaceContainerLow/Lowest、surfaceBright/Dim、
    inverse*、surfaceTint、outlineVariant、scrim),一直保留 Material3 基线值。MIUIX 深色的
    surface 是纯黑、background 是 #242424,明度阶梯方向和 Material3 默认相反,于是没被桥接的
    面板色会和内容色对冲。现在按 MIUIX 自己的明度补齐(深浅分开取)。
  • 主题原本只提供 MIUIX 的内容色,没提供 Material3 的同名 Local:没被 M3 Surface 包住的
    M3 Text / Icon 取不到色就退到平台默认(黑),深色下表现为「内容不显示」。现在两个都提供。
  • 批量修掉 23 处颜色槽位误用。根因是 MIUIX 的 secondary 是容器色(浅色 #E6E6E6、
    深色 #505050,配套前景恒为白),不是 Material3 那个「次要强调色」,而代码里把它当文字色用了 11 处
    (订阅名、作者、版本号、更新链接、白名单提示、活动名等),浅色下等于白底画白字;同类问题还有
    下拉菜单选中项背景用恒为纯白的前景槽位、黑色遮罩上的提示文字用线条色、以及在 60% 文字色上再乘一次
    alpha 只剩 24%~36% 等。.background(secondary) 那类正确用法保持不变。

修复:几个会静默失效的逻辑洞

  • updateSystemDefaultAppId 在没有可解析 HOME(或包可见性受限)的设备上会抛空指针,而它是运行时
    状态同步的第一步,一抛就把「给自己授权 → 刷新权限 → 修无障碍 → 自动开无障碍」整条链带走,
    表现正是「拿到 root 了但无障碍没自动开」。改为空值走兜底,并把同步链改成逐步隔离,
    失败步骤名写进日志。
  • 切换工作模式后只关掉了旧通道、没有任何一次状态同步,新模式的服务没人起,必须退出重进界面。
  • 悬浮窗/截图服务的 onDestroyed 无条件清空全局实例:系统重建服务时旧实例的销毁会清掉新实例的引用,
    之后永久静默失效。照无障碍服务的写法加上「只清自己」的判断。
  • 规则匹配的并发标志位在协程内部才置位,拦不住同一帧内连发的无障碍事件,导致并发查询与重复点击。
    占位提前到入口。

清理

  • 删掉 9 个全仓零引用的文件(1955 行):自绘三态开关、整页死代码的旧首页、旧版订阅卡片等。
    它们是 v1.3.2「界面回退到 1.2.7 观感」时把旧副本一起捞回来的,其中旧订阅卡片还带着
    v1.3.1 已经修掉的「按压露尖角」写法。纯删除,行为与外观不变。

v1.3.3(2026-10-06)

修复:ColorOS 等 ROM 关机后无障碍不会自动恢复

  • 原因不是时序也不是权限,而是代码自锁:fixRestartAutomatorService() 要求 enableAutomator 为真才会写无障碍,
    而该标志位只有无障碍已经启动之后才为真 —— 冷启动时必然是假,于是永远轮不到去开
    (自动化模式不受影响,它的连接是无条件走的,所以表现成「自动化能自己起、无障碍不能」)
  • 新增 armA11yService():以「工作模式 = 无障碍」作为用户意图,自己复核 WRITE_SECURE_SETTINGS,
    写入无障碍总开关与服务列表,并在 2/5/10 秒内最多 4 次复验重试(应对刚拉起来又被系统解绑的那几秒)
  • 触发点接在运行时状态同步上:开机自启、拿到 root(特权通道就绪)、回到前台各补一次,root 迟到也能补开
  • 不和手动操作对着干:通过开关或下拉磁贴主动关闭无障碍后 30 分钟内不自动打开,主动再开立即撤销抑制;
    前台应用命中「禁用无障碍列表」时不打开
  • 每个拦截分支都写运行日志,再遇到没自动开时导出日志即可直接定位是被哪一条拦住

开机自启兜底(恢复自本地构建)

  • 新增 BootReceiver(BOOT_COMPLETED)与 StatusServiceJobService(persisted Job,开机 +10 秒兜底):
    常驻通知/服务状态不再需要开机后手动打开
  • AIDL 接口抽成独立模块 gkd-aidl(包名 li.gkd.aidl)并补齐 R8 keep 规则
  • 新增特权能力探测与权限常量集中定义

构建防护

  • APK 内新增 assets/working-tree.txt,自证构建时的工作区状态:干净时只有 commit 行;
    存在未提交改动时列出文件路径,并在构建目录留下 dirty.patch 与文件快照,
    避免再次出现「本机构建源码丢失、只能从 APK 反推」

v1.3.2(2026-10-03)

界面层整体回退到 v1.2.7 观感

  • 底座与业务能力保持 v1.3.1 不变,界面层整体恢复为 v1.2.7 那套 MIUIX 渲染层(即 v1.3.0 移植到新底座后的版本):
    • 恢复自研液态玻璃悬浮底栏(ui/liquid 整包)与配套设置开关
    • 恢复 GkTriStateSwitch、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup 等自绘组件
    • 恢复旧版设置分组 / 卡片 / 对话框 / 输入框样式(撤销 1.3.1 的 GkRowDefaults 排版统一与 M3→miuix 组件替换)
    • 恢复应用配置页「本地订阅」分组入口与订阅分组标题
  • 保留 v1.3.1 的全部修复(在恢复后的界面上重新应用):
    • 首页「应用」数量与「应用」Tab 同源(AppInfoRepository.visibleAppInfosFlow)
    • 应用列表点击闪退(TextStyle placeholder 的 lineHeight/width 兜底)
    • 订阅卡片按压高亮露出尖角
    • 二级页顶栏(多选顶栏)上方大片留白(改用 SmallTopAppBar)
  • 补齐 1.3.0 翻译版遗漏的 1.2.7 界面元素:
    • 悬浮按钮恢复液态玻璃(vibrancy + 折射 + 高光,无 RuntimeShader 时回退实色),涉及 8 个页面
    • 关于页整页恢复 1.2.7 版式:滚动视差 Logo(渐变收起/标题淡入)、背景特效(BgEffect 组件包整体移植)、
      顶栏滚动模糊落定转实色;功能保持新底座实现(更新渠道/检查更新/反馈/导出日志/分享 APK)
  • 恢复「触发提示 → 实时通知(流体云/超级岛)」完整功能(1.3.0 换底座时丢失,表现为选项点击无反应):
    • 设置项恢复三选一样式(悬浮窗 / 系统 Toast / 实时通知)与选中态正确回显
    • 移植 ActionTipNotif 渲染器:同一条 ongoing 通知同时适配 ColorOS 流体云(Google Live Update,
      反射调用避免 ROM 缺方法崩溃)与 HyperOS 超级岛(miui.focus 模板);通知权限缺失/无 Live Update
      API 时给出结果提示
    • 恢复「存在时间」快选与自定义秒数(2-120 秒,到期自动取消)、「实时更新系统开关」直达入口、
      「发送测试通知」按当前样式分发并在需要时先请求通知权限
    • store 新增 actionTipStyle / actionTipLiveDurationSec(带默认值,旧配置兼容);
      resolveActionTipStyle 兼容旧版 useSystemToast 开关
  • 修复 AI 服务商三个页面(列表 / 详情 / 使用说明)顶栏与页签底色异常:
    1.3.0 移植时这三个页面用了 material3 Scaffold + GkTopAppBar(顶栏恒为实色 surface、
    页面体为 background 色,与 1.2.7 毛玻璃壳的 surface 容器形成色差)。现统一换回
    GkPageScaffold 毛玻璃二级页壳(顶栏滚动透出毛玻璃、落定转实色),与 1.2.7 一致
  • 全 App 二级页壳统一:其余 20 处仍使用 material3 Scaffold 的页面全部换回
    GkPageScaffold 毛玻璃壳,彻底消除顶栏/页面体的 surface–background 色差:
    • 订阅流 6 页(应用列表、应用规则组、分类、分类规则组、全局规则组、全局排除,
      多选顶栏接壳的 externalScrollBehavior + barColor)
    • 日志 3 页(活动记录、触发记录、无障碍事件)
    • 编辑器壳 GkEditorScaffold(覆盖规则组/分类/规则排除/屏蔽列表编辑、
      触发提示文案、通知文案 6 个编辑页)
    • 应用作用域 2 页、快照页、快照设置页、局部关闭引导页、崩溃报告页(新增 bottomBar 槽)、
      内置浏览器(关闭内容采样避免重绘闪烁)、规则源查看与规则控制关系全屏弹窗

v1.3.1(2026-10-03)

全 App 统一分组与行排版

  • 新增 GkRowDefaults 作为全 App 唯一的排版规格来源:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、
    行内边距 16/12、行首图标 24 + 间距 16、分组小标题 14 Bold(缩进 32)、分割线 0.33dp@10%

  • 设置分组现在会真正渲染「常规 / 无障碍 / 外观 / 其他」这类小标题(此前该参数被忽略)

  • 设置项与开关项改为统一的「标题 16 Medium + 摘要 14」两行结构,行尾箭头改为细箭头

  • 按压反馈统一为「按住整行叠 6% 前景色」(去掉涟漪),与 MIUIX 组件行为一致

  • 组内分割线自动生成(miuix 组件本身不画行间分割线):非首行自动画一条 0.33dp 细线

  • 首页 / 订阅 / 应用 / 设置四个主 Tab、应用配置页规则卡、应用列表卡、订阅卡全部统一到该规格

  • Material3 组件继续替换为官方 miuix:单选按钮、下拉刷新、Tooltip、复选框、底部操作条、
    普通按钮、对话框(17 处调用点零改动)、Scaffold(22 个文件)、输入框(新增 GkTextField 封装,
    删除从 material3 手工拷贝的 GkOutlinedTextField)

AI 配置界面重排

  • 服务商列表:顶部圆角搜索框,「添加服务商」入口改为「标题 + 摘要 + 右箭头」行,已配置项改为
    名称 / 地址 / 元信息三段式,行尾圆点即选即切当前服务商,删除由长按触发并走统一弹窗
  • 服务商详情(配置):输入项改为「label 当占位」的紧凑写法,端点模式改为行尾值 + 箭头,
    测试连接为标准行;自定义请求头可展开;启用开关 + 系统提示词 + 生成参数分组;
    底部是全宽主按钮 + 状态文字,危险操作为居中红字卡片
  • 模型页签:容器与行样式同步到同一套排版规格
  • 排版规格统一:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、行内边距 16/12、
    行首图标 24 + 间距 16、分割线 0.33dp@10%(有图标时左缩进 56)、
    主按钮 44 高/圆角 22、弹窗内外边距 24/16、分组小标题 14 Bold 缩进 32

修复 + 界面回归原版 miuix

  • 修复首页「应用」数量不准确:该卡片误用订阅快照表的 size(等于订阅条数),改为与「应用」Tab 同源的已安装应用列表
  • 修复应用列表点击后闪退:miuix 的 TextStyle(body1 / body2 …)默认只声明 fontSize,lineHeight 为 TextUnit.Unspecified,而 Compose 的 Placeholder 不接受 Unspecified。含全局规则组的应用、以及系统应用,进入应用配置页必崩;现已在标题/规则组名称的内联图标占位符处统一兜底
  • 修复订阅卡片点按后按压高亮露出四个尖角:点击反馈曾挂在卡片外层的 combinedClickable 上,涟漪绘制在卡片背景之下且不受 squircle 裁剪,只从四个圆角溢出;现已移入卡片内部
  • 修复二级页顶栏上方大片留白:MIUIX 的 TopAppBar 是大标题栏,标题传空串时仍会占掉一整行大标题高度(CollapsedHeight + 一行 title1 + LargeTitleBottomPadding),再把 bottomContent 顶到更下面。应用配置页、订阅应用列表页这类「标题自带渲染(应用名内联图标 / 已选 N 项)」的顶栏现改用 SmallTopAppBar,标题紧贴图标行下方,约省掉 34dp 空白
  • 弃用早期移植自 gkd-miuix 的界面方案,改为直接使用原版 miuix 组件:
    • 首页外壳简化为「一个 Scaffold + 一个 LayerBackdrop」,模糊统一走 miuix 官方 Modifier.textureBlur
    • 删除自研液态玻璃底栏(ui/liquid 整包)与配套的分页采样互斥、离屏栅格化 hack,设置页同步移除「液态玻璃」开关
    • 删除 GkTriStateSwitch(691 行自绘开关)、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup、EmptyText 等无人引用的残留组件
  • 界面层继续把残留的 Material3 组件换成原版 miuix:
    • 对话框/操作按钮:TextButton 39 处(19 个文件)改用 miuix TextButton,确认类按钮统一为 textButtonColorsPrimary(),破坏性操作沿用红色
    • 图标按钮配色来源统一(LocalContentColor 20 个文件改读 miuix 主题值,与 miuix Card / BasicComponent 的内容色对齐)
    • 加载指示:CircularProgressIndicator / LinearProgressIndicator 改用 miuix 版本
    • 容器与分割线:Surface、HorizontalDivider 改用 miuix 版本
    • 应用配置页顶栏标题改为居中显示
    • 图标按钮:GkIconButton / GkSizedIconButton / GkBlockCloseIconButton / GkSearchCloseIconButton 与三处直用的 IconButton 全部改用 miuix IconButton(miuix 无 colors 参数,配色改为 backgroundColor + 图标 tint);自绘的 CustomIconButton(Box + Material ripple)删除
  • 应用配置页整理:
    • 去掉「本地订阅 >」分组入口(它指向的二级订阅页功能与本页重复);单订阅时整行不再显示,仅当同一应用被多份订阅覆盖时才保留一个不可点的分组标签以便区分来源
    • 规则卡片之间补 4dp 垂直间距,不再首尾相连糊成一整块

v1.3.0(重构版)

架构重构 + 全界面回归 MIUIX

  • 编译底座换成上游 GKD 新模块化架构(包名 li.gkd.app.*、Navigation3、Room、Ktor),业务逻辑全部使用新底座实现
  • 界面层不采用上游 UI,而是把旧版 MIUIX 渲染层原样「翻译」到新底座:四个 Tab 页 + 二级页面(高级设置、工作模式、关于、AI 服务商、订阅详情、快照等)全部按旧版观感重排
  • 应用更名为 GKD-XA
  • 补回底座缺失的毛玻璃二级页壳 GkPageScaffold(等价旧版 AppPageScaffold):顶栏滚动透出毛玻璃、落定转实色
  • 二级页返回按钮统一为 MIUIX 无边框图标按钮,消除顶栏风格割裂

新增 / 增强

  • AI 规则改为多服务商:新增「AI 服务商」列表页,可同时保存多套协议/地址/密钥/模型池,勾选圆点即切换当前服务商
  • 服务商详情拆成「配置 / 模型」两个页签;配置页含 Base URL、API Key(可显隐)、端点模式(Chat Completions / Responses)、anthropic-version、自定义请求头、系统提示词与生成参数
  • 模型页支持远端拉取并按 Model ID 合并、关键字搜索、多选批量删除、逐个编辑上下文长度与思考标记
  • 「测试连接」直接读取远端 /models 并把返回的模型并入列表,结果在行内即时反馈
  • 首次启动自动把旧的单份 AI 配置迁移成一个服务商,无需重填
  • 通知文案可自定义...
Read more

Release v1.4.1

Choose a tag to compare

@github-actions github-actions released this 12 Oct 08:17

更新内容

v1.4.1(2026-10-12)

开机自愈修好了,而且是靠真机导出日志定位到的

  • 开机广播不再被「常驻通知」开关拦住:BootReceiver 以前只做 StatusService.autoStart(),
    而它内部的 needRestart 第一项就是常驻通知开关 —— 关掉它就等于把开机兜底一起关掉,
    说明里没提、路径上一行日志都没有。现在广播一旦送达就无条件补一次运行时同步,
    补开无障碍不再依赖常驻通知。
  • 自动开无障碍改认「真的连上了」:以前看的是 isRunning(服务 onCreate 就置 true),
    而实例要到 onServiceConnected 才赋值;服务被创建但绑定失败时,应用会认为"已经在运行",
    于是不再重开、你也关不掉。现在统一用 isReady = isRunning && instance != null。
  • 导出日志现在能直接判定开机问题:补上触发来源(sync(boot) / sync(privilege connected) /
    回前台),并在"已经就绪、无需写入"这个唯一的静默分支也打一条。这次就是靠这两条日志
    区分出「没跑」和「跑了但没事」。
  • 返回上一页时清掉输入焦点:前进不算,编辑页的自动聚焦保持原样。
  • 设置文件解析失败不再无声丢档:先把坏文件改名成 store.json.corrupt-<时间戳> 留档再回落默认值,
    否则下一次写入就直接覆盖掉用户原来的配置。
  • 单元测试第一次进了构建门禁:仓库里 32 个测试文件、136 个用例从来没被 CI 跑过,
    接上之后第一轮就抓出一处移植改动引入的 4 个回归(该改动随后已回退)。

顺带记录一条这次查清但不是本应用问题的现象:ColorOS 的无障碍开关可能显示为「关」,
而框架侧服务其实已经 Bound 且正常收到窗口事件 —— 我们写的是标准的
enabled_accessibility_services + accessibility_enabled,那个 UI 读的是它自己的记录。
以应用内显示的状态为准。

v1.4.0(2026-10-07)

界面层完全跟随 miuix 上游 0.9.4

  • 依赖从 0.9.3 升到 0.9.4。上游在这个版本删掉了 miuix-navigation3-ui,换成自带运行时的
    miuix-nav:NavKey / NavBackStack / NavDisplay / entry DSL 全部归 Miuix,SavedState 与
    ViewModelStore 的 entry 装饰由库接管,因此 navigation3-runtime 与
    lifecycle-viewmodel-navigation3 两个 AndroidX 依赖一并移除。
  • 页面转场改由库提供:删掉自写的 transitionSpec / popTransitionSpec / predictivePopTransitionSpec
    三段,默认走 NavTransitions.MiuixDefault(带连续栈深度,下层页面随返回进度连续缩放与压暗),
    编辑器类页面(触发提示、通知文案、禁用应用列表、规则组/分类编辑等)走 NavTransitions.Modal。
    预测式返回现在是库实现,支持拖拽中途松手回弹。
  • 底栏(液态玻璃)重新同步上游:命中判定换成按按下位置直接算 tab,并补上可聚焦、键盘方向键/回车
    操作与 TalkBack 选中态语义;拖拽动画区分「被取消」与「正常停手」。
  • 14 个镜像自上游 example 的文件全部标注 同步自 miuix@39c40f9 (v0.9.4) <上游路径>,
    以后同步可以直接 diff,不用再靠肉眼比对。

修复:深色/浅色下大量内容看不清

  • MIUIX→Material3 的颜色桥接原本漏了 10 个槽位(surfaceContainerLow/Lowest、surfaceBright/Dim、
    inverse*、surfaceTint、outlineVariant、scrim),一直保留 Material3 基线值。MIUIX 深色的
    surface 是纯黑、background 是 #242424,明度阶梯方向和 Material3 默认相反,于是没被桥接的
    面板色会和内容色对冲。现在按 MIUIX 自己的明度补齐(深浅分开取)。
  • 主题原本只提供 MIUIX 的内容色,没提供 Material3 的同名 Local:没被 M3 Surface 包住的
    M3 Text / Icon 取不到色就退到平台默认(黑),深色下表现为「内容不显示」。现在两个都提供。
  • 批量修掉 23 处颜色槽位误用。根因是 MIUIX 的 secondary 是容器色(浅色 #E6E6E6、
    深色 #505050,配套前景恒为白),不是 Material3 那个「次要强调色」,而代码里把它当文字色用了 11 处
    (订阅名、作者、版本号、更新链接、白名单提示、活动名等),浅色下等于白底画白字;同类问题还有
    下拉菜单选中项背景用恒为纯白的前景槽位、黑色遮罩上的提示文字用线条色、以及在 60% 文字色上再乘一次
    alpha 只剩 24%~36% 等。.background(secondary) 那类正确用法保持不变。

修复:几个会静默失效的逻辑洞

  • updateSystemDefaultAppId 在没有可解析 HOME(或包可见性受限)的设备上会抛空指针,而它是运行时
    状态同步的第一步,一抛就把「给自己授权 → 刷新权限 → 修无障碍 → 自动开无障碍」整条链带走,
    表现正是「拿到 root 了但无障碍没自动开」。改为空值走兜底,并把同步链改成逐步隔离,
    失败步骤名写进日志。
  • 切换工作模式后只关掉了旧通道、没有任何一次状态同步,新模式的服务没人起,必须退出重进界面。
  • 悬浮窗/截图服务的 onDestroyed 无条件清空全局实例:系统重建服务时旧实例的销毁会清掉新实例的引用,
    之后永久静默失效。照无障碍服务的写法加上「只清自己」的判断。
  • 规则匹配的并发标志位在协程内部才置位,拦不住同一帧内连发的无障碍事件,导致并发查询与重复点击。
    占位提前到入口。

清理

  • 删掉 9 个全仓零引用的文件(1955 行):自绘三态开关、整页死代码的旧首页、旧版订阅卡片等。
    它们是 v1.3.2「界面回退到 1.2.7 观感」时把旧副本一起捞回来的,其中旧订阅卡片还带着
    v1.3.1 已经修掉的「按压露尖角」写法。纯删除,行为与外观不变。

v1.3.3(2026-10-06)

修复:ColorOS 等 ROM 关机后无障碍不会自动恢复

  • 原因不是时序也不是权限,而是代码自锁:fixRestartAutomatorService() 要求 enableAutomator 为真才会写无障碍,
    而该标志位只有无障碍已经启动之后才为真 —— 冷启动时必然是假,于是永远轮不到去开
    (自动化模式不受影响,它的连接是无条件走的,所以表现成「自动化能自己起、无障碍不能」)
  • 新增 armA11yService():以「工作模式 = 无障碍」作为用户意图,自己复核 WRITE_SECURE_SETTINGS,
    写入无障碍总开关与服务列表,并在 2/5/10 秒内最多 4 次复验重试(应对刚拉起来又被系统解绑的那几秒)
  • 触发点接在运行时状态同步上:开机自启、拿到 root(特权通道就绪)、回到前台各补一次,root 迟到也能补开
  • 不和手动操作对着干:通过开关或下拉磁贴主动关闭无障碍后 30 分钟内不自动打开,主动再开立即撤销抑制;
    前台应用命中「禁用无障碍列表」时不打开
  • 每个拦截分支都写运行日志,再遇到没自动开时导出日志即可直接定位是被哪一条拦住

开机自启兜底(恢复自本地构建)

  • 新增 BootReceiver(BOOT_COMPLETED)与 StatusServiceJobService(persisted Job,开机 +10 秒兜底):
    常驻通知/服务状态不再需要开机后手动打开
  • AIDL 接口抽成独立模块 gkd-aidl(包名 li.gkd.aidl)并补齐 R8 keep 规则
  • 新增特权能力探测与权限常量集中定义

构建防护

  • APK 内新增 assets/working-tree.txt,自证构建时的工作区状态:干净时只有 commit 行;
    存在未提交改动时列出文件路径,并在构建目录留下 dirty.patch 与文件快照,
    避免再次出现「本机构建源码丢失、只能从 APK 反推」

v1.3.2(2026-10-03)

界面层整体回退到 v1.2.7 观感

  • 底座与业务能力保持 v1.3.1 不变,界面层整体恢复为 v1.2.7 那套 MIUIX 渲染层(即 v1.3.0 移植到新底座后的版本):
    • 恢复自研液态玻璃悬浮底栏(ui/liquid 整包)与配套设置开关
    • 恢复 GkTriStateSwitch、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup 等自绘组件
    • 恢复旧版设置分组 / 卡片 / 对话框 / 输入框样式(撤销 1.3.1 的 GkRowDefaults 排版统一与 M3→miuix 组件替换)
    • 恢复应用配置页「本地订阅」分组入口与订阅分组标题
  • 保留 v1.3.1 的全部修复(在恢复后的界面上重新应用):
    • 首页「应用」数量与「应用」Tab 同源(AppInfoRepository.visibleAppInfosFlow)
    • 应用列表点击闪退(TextStyle placeholder 的 lineHeight/width 兜底)
    • 订阅卡片按压高亮露出尖角
    • 二级页顶栏(多选顶栏)上方大片留白(改用 SmallTopAppBar)
  • 补齐 1.3.0 翻译版遗漏的 1.2.7 界面元素:
    • 悬浮按钮恢复液态玻璃(vibrancy + 折射 + 高光,无 RuntimeShader 时回退实色),涉及 8 个页面
    • 关于页整页恢复 1.2.7 版式:滚动视差 Logo(渐变收起/标题淡入)、背景特效(BgEffect 组件包整体移植)、
      顶栏滚动模糊落定转实色;功能保持新底座实现(更新渠道/检查更新/反馈/导出日志/分享 APK)
  • 恢复「触发提示 → 实时通知(流体云/超级岛)」完整功能(1.3.0 换底座时丢失,表现为选项点击无反应):
    • 设置项恢复三选一样式(悬浮窗 / 系统 Toast / 实时通知)与选中态正确回显
    • 移植 ActionTipNotif 渲染器:同一条 ongoing 通知同时适配 ColorOS 流体云(Google Live Update,
      反射调用避免 ROM 缺方法崩溃)与 HyperOS 超级岛(miui.focus 模板);通知权限缺失/无 Live Update
      API 时给出结果提示
    • 恢复「存在时间」快选与自定义秒数(2-120 秒,到期自动取消)、「实时更新系统开关」直达入口、
      「发送测试通知」按当前样式分发并在需要时先请求通知权限
    • store 新增 actionTipStyle / actionTipLiveDurationSec(带默认值,旧配置兼容);
      resolveActionTipStyle 兼容旧版 useSystemToast 开关
  • 修复 AI 服务商三个页面(列表 / 详情 / 使用说明)顶栏与页签底色异常:
    1.3.0 移植时这三个页面用了 material3 Scaffold + GkTopAppBar(顶栏恒为实色 surface、
    页面体为 background 色,与 1.2.7 毛玻璃壳的 surface 容器形成色差)。现统一换回
    GkPageScaffold 毛玻璃二级页壳(顶栏滚动透出毛玻璃、落定转实色),与 1.2.7 一致
  • 全 App 二级页壳统一:其余 20 处仍使用 material3 Scaffold 的页面全部换回
    GkPageScaffold 毛玻璃壳,彻底消除顶栏/页面体的 surface–background 色差:
    • 订阅流 6 页(应用列表、应用规则组、分类、分类规则组、全局规则组、全局排除,
      多选顶栏接壳的 externalScrollBehavior + barColor)
    • 日志 3 页(活动记录、触发记录、无障碍事件)
    • 编辑器壳 GkEditorScaffold(覆盖规则组/分类/规则排除/屏蔽列表编辑、
      触发提示文案、通知文案 6 个编辑页)
    • 应用作用域 2 页、快照页、快照设置页、局部关闭引导页、崩溃报告页(新增 bottomBar 槽)、
      内置浏览器(关闭内容采样避免重绘闪烁)、规则源查看与规则控制关系全屏弹窗

v1.3.1(2026-10-03)

全 App 统一分组与行排版

  • 新增 GkRowDefaults 作为全 App 唯一的排版规格来源:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、
    行内边距 16/12、行首图标 24 + 间距 16、分组小标题 14 Bold(缩进 32)、分割线 0.33dp@10%

  • 设置分组现在会真正渲染「常规 / 无障碍 / 外观 / 其他」这类小标题(此前该参数被忽略)

  • 设置项与开关项改为统一的「标题 16 Medium + 摘要 14」两行结构,行尾箭头改为细箭头

  • 按压反馈统一为「按住整行叠 6% 前景色」(去掉涟漪),与 MIUIX 组件行为一致

  • 组内分割线自动生成(miuix 组件本身不画行间分割线):非首行自动画一条 0.33dp 细线

  • 首页 / 订阅 / 应用 / 设置四个主 Tab、应用配置页规则卡、应用列表卡、订阅卡全部统一到该规格

  • Material3 组件继续替换为官方 miuix:单选按钮、下拉刷新、Tooltip、复选框、底部操作条、
    普通按钮、对话框(17 处调用点零改动)、Scaffold(22 个文件)、输入框(新增 GkTextField 封装,
    删除从 material3 手工拷贝的 GkOutlinedTextField)

AI 配置界面重排

  • 服务商列表:顶部圆角搜索框,「添加服务商」入口改为「标题 + 摘要 + 右箭头」行,已配置项改为
    名称 / 地址 / 元信息三段式,行尾圆点即选即切当前服务商,删除由长按触发并走统一弹窗
  • 服务商详情(配置):输入项改为「label 当占位」的紧凑写法,端点模式改为行尾值 + 箭头,
    测试连接为标准行;自定义请求头可展开;启用开关 + 系统提示词 + 生成参数分组;
    底部是全宽主按钮 + 状态文字,危险操作为居中红字卡片
  • 模型页签:容器与行样式同步到同一套排版规格
  • 排版规格统一:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、行内边距 16/12、
    行首图标 24 + 间距 16、分割线 0.33dp@10%(有图标时左缩进 56)、
    主按钮 44 高/圆角 22、弹窗内外边距 24/16、分组小标题 14 Bold 缩进 32

修复 + 界面回归原版 miuix

  • 修复首页「应用」数量不准确:该卡片误用订阅快照表的 size(等于订阅条数),改为与「应用」Tab 同源的已安装应用列表
  • 修复应用列表点击后闪退:miuix 的 TextStyle(body1 / body2 …)默认只声明 fontSize,lineHeight 为 TextUnit.Unspecified,而 Compose 的 Placeholder 不接受 Unspecified。含全局规则组的应用、以及系统应用,进入应用配置页必崩;现已在标题/规则组名称的内联图标占位符处统一兜底
  • 修复订阅卡片点按后按压高亮露出四个尖角:点击反馈曾挂在卡片外层的 combinedClickable 上,涟漪绘制在卡片背景之下且不受 squircle 裁剪,只从四个圆角溢出;现已移入卡片内部
  • 修复二级页顶栏上方大片留白:MIUIX 的 TopAppBar 是大标题栏,标题传空串时仍会占掉一整行大标题高度(CollapsedHeight + 一行 title1 + LargeTitleBottomPadding),再把 bottomContent 顶到更下面。应用配置页、订阅应用列表页这类「标题自带渲染(应用名内联图标 / 已选 N 项)」的顶栏现改用 SmallTopAppBar,标题紧贴图标行下方,约省掉 34dp 空白
  • 弃用早期移植自 gkd-miuix 的界面方案,改为直接使用原版 miuix 组件:
    • 首页外壳简化为「一个 Scaffold + 一个 LayerBackdrop」,模糊统一走 miuix 官方 Modifier.textureBlur
    • 删除自研液态玻璃底栏(ui/liquid 整包)与配套的分页采样互斥、离屏栅格化 hack,设置页同步移除「液态玻璃」开关
    • 删除 GkTriStateSwitch(691 行自绘开关)、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup、EmptyText 等无人引用的残留组件
  • 界面层继续把残留的 Material3 组件换成原版 miuix:
    • 对话框/操作按钮:TextButton 39 处(19 个文件)改用 miuix TextButton,确认类按钮统一为 textButtonColorsPrimary(),破坏性操作沿用红色
    • 图标按钮配色来源统一(LocalContentColor 20 个文件改读 miuix 主题值,与 miuix Card / BasicComponent 的内容色对齐)
    • 加载指示:CircularProgressIndicator / LinearProgressIndicator 改用 miuix 版本
    • 容器与分割线:Surface、HorizontalDivider 改用 miuix 版本
    • 应用配置页顶栏标题改为居中显示
    • 图标按钮:GkIconButton / GkSizedIconButton / GkBlockCloseIconButton / GkSearchCloseIconButton 与三处直用的 IconButton 全部改用 miuix IconButton(miuix 无 colors 参数,配色改为 backgroundColor + 图标 tint);自绘的 CustomIconButton(Box + Material ripple)删除
  • 应用配置页整理:
    • 去掉「本地订阅 >」分组入口(它指向的二级订阅页功能与本页重复);单订阅时整行不再显示,仅当同一应用被多份订阅覆盖时才保留一个不可点的分组标签以便区分来源
    • 规则卡片之间补 4dp 垂直间距,不再首尾相连糊成一整块

v1.3.0(重构版)

架构重构 + 全界面回归 MIUIX

  • 编译底座换成上游 GKD 新模块化架构(包名 li.gkd.app.*、Navigation3、Room、Ktor),业务逻辑全部使用新底座实现
  • 界面层不采用上游 UI,而是把旧版 MIUIX 渲染层原样「翻译」到新底座:四个 Tab 页 + 二级页面(高级设置、工作模式、关于、AI 服务商、订阅详情、快照等)全部按旧版观感重排
  • 应用更名为 GKD-XA
  • 补回底座缺失的毛玻璃二级页壳 GkPageScaffold(等价旧版 AppPageScaffold):顶栏滚动透出毛玻璃、落定转实色
  • 二级页返回按钮统一为 MIUIX 无边框图标按钮,消除顶栏风格割裂

新增 / 增强

  • AI 规则改为多服务商:新增「AI 服务商」列表页,可同时保存多套协议/地址/密钥/模型池,勾选圆点即切换当前服务商
  • 服务商详情拆成「配置 / 模型」两个页签;配置页含 Base URL、API Key(可显隐)、端点模式(Chat Completions / Responses)、anthropic-version、自定义请求头、系统提示词与生成参数
  • 模型页支持远端拉取并按 Model ID 合并、关键字搜索、多选批量删除、逐个编辑上下文长度与思考标记
  • 「测试连接」直接读取远端 /models 并把返回的模型并入列表,结果在行内即时反馈
  • 首次启动自动把旧的单份 AI 配置迁移成一个服务商,无需重填
  • 通知文案可自定义主标题 / 副标题 / 正文,支持模板变量与实时预览
  • 规则类别:前缀匹配、跟随订阅或规则组默认值、批量设置与冲突检测
  • 控制关系图:可视化规则组开关来源(订阅 / 类别 / 应用 / 自身设置)

修复

  • 修复首页右上角「工作模式」按钮点按闪退:MIUIX 部分 TextStyle 的 lineHeight / fontSize 不是 Sp 单位,直接 toDp() 会抛 IllegalStateException: Only Sp can convert to Px;新增安全工具 toSpDpOr() / lineHeightDp() 兜底,并全局修掉 3 处同类隐患
  • 修复订阅卡片无障碍语义与长按误取消(长按改为 select 而非 toggle)
  • 修复订阅页丢失全选 / 反选入口
  • 修复「局部关闭」引导内「继续」按钮点击无响应
  • 修复通知文案弹窗在切换开关时改变 composable 调用点数量的问题
  • 应用详情页(应用列表点入):规则卡片、订阅分组标题、排序/筛选菜单与返回按钮恢复旧版 MIUIX 的间距和组件观感;保留新版批量选择、规则可用性说明、控制关系等业务能力

v1.2.7

  • 更新弹窗的确认按钮改为「更新」,四个字不再折成两行
  • 下载失败时弹窗新增「复制链接 / 浏览器打开」,GitHub 直连不通可交给带代理的浏览器下载

v1.2.6

  • AI 规则改为多服务商:新增「AI 服务商」列表页,可同时保存多套协议/地址/密钥/模型池,勾选圆点即切换当前服务商
  • 服务商详情拆成「配置 / 模型」两个页签;配置页含 Base URL、API Key(可显隐)、端点模式(Chat Completions / Responses)、anthropic-version、自定义请求头、系统提示词与生成参数
  • 模型页支持远端拉取并按 Model ID 合...
Read more

Release v1.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Oct 06:54

更新内容

v1.4.0(2026-10-07)

界面层完全跟随 miuix 上游 0.9.4

  • 依赖从 0.9.3 升到 0.9.4。上游在这个版本删掉了 miuix-navigation3-ui,换成自带运行时的
    miuix-nav:NavKey / NavBackStack / NavDisplay / entry DSL 全部归 Miuix,SavedState 与
    ViewModelStore 的 entry 装饰由库接管,因此 navigation3-runtime 与
    lifecycle-viewmodel-navigation3 两个 AndroidX 依赖一并移除。
  • 页面转场改由库提供:删掉自写的 transitionSpec / popTransitionSpec / predictivePopTransitionSpec
    三段,默认走 NavTransitions.MiuixDefault(带连续栈深度,下层页面随返回进度连续缩放与压暗),
    编辑器类页面(触发提示、通知文案、禁用应用列表、规则组/分类编辑等)走 NavTransitions.Modal。
    预测式返回现在是库实现,支持拖拽中途松手回弹。
  • 底栏(液态玻璃)重新同步上游:命中判定换成按按下位置直接算 tab,并补上可聚焦、键盘方向键/回车
    操作与 TalkBack 选中态语义;拖拽动画区分「被取消」与「正常停手」。
  • 14 个镜像自上游 example 的文件全部标注 同步自 miuix@39c40f9 (v0.9.4) <上游路径>,
    以后同步可以直接 diff,不用再靠肉眼比对。

修复:深色/浅色下大量内容看不清

  • MIUIX→Material3 的颜色桥接原本漏了 10 个槽位(surfaceContainerLow/Lowest、surfaceBright/Dim、
    inverse*、surfaceTint、outlineVariant、scrim),一直保留 Material3 基线值。MIUIX 深色的
    surface 是纯黑、background 是 #242424,明度阶梯方向和 Material3 默认相反,于是没被桥接的
    面板色会和内容色对冲。现在按 MIUIX 自己的明度补齐(深浅分开取)。
  • 主题原本只提供 MIUIX 的内容色,没提供 Material3 的同名 Local:没被 M3 Surface 包住的
    M3 Text / Icon 取不到色就退到平台默认(黑),深色下表现为「内容不显示」。现在两个都提供。
  • 批量修掉 23 处颜色槽位误用。根因是 MIUIX 的 secondary 是容器色(浅色 #E6E6E6、
    深色 #505050,配套前景恒为白),不是 Material3 那个「次要强调色」,而代码里把它当文字色用了 11 处
    (订阅名、作者、版本号、更新链接、白名单提示、活动名等),浅色下等于白底画白字;同类问题还有
    下拉菜单选中项背景用恒为纯白的前景槽位、黑色遮罩上的提示文字用线条色、以及在 60% 文字色上再乘一次
    alpha 只剩 24%~36% 等。.background(secondary) 那类正确用法保持不变。

修复:几个会静默失效的逻辑洞

  • updateSystemDefaultAppId 在没有可解析 HOME(或包可见性受限)的设备上会抛空指针,而它是运行时
    状态同步的第一步,一抛就把「给自己授权 → 刷新权限 → 修无障碍 → 自动开无障碍」整条链带走,
    表现正是「拿到 root 了但无障碍没自动开」。改为空值走兜底,并把同步链改成逐步隔离,
    失败步骤名写进日志。
  • 切换工作模式后只关掉了旧通道、没有任何一次状态同步,新模式的服务没人起,必须退出重进界面。
  • 悬浮窗/截图服务的 onDestroyed 无条件清空全局实例:系统重建服务时旧实例的销毁会清掉新实例的引用,
    之后永久静默失效。照无障碍服务的写法加上「只清自己」的判断。
  • 规则匹配的并发标志位在协程内部才置位,拦不住同一帧内连发的无障碍事件,导致并发查询与重复点击。
    占位提前到入口。

清理

  • 删掉 9 个全仓零引用的文件(1955 行):自绘三态开关、整页死代码的旧首页、旧版订阅卡片等。
    它们是 v1.3.2「界面回退到 1.2.7 观感」时把旧副本一起捞回来的,其中旧订阅卡片还带着
    v1.3.1 已经修掉的「按压露尖角」写法。纯删除,行为与外观不变。

v1.3.3(2026-10-06)

修复:ColorOS 等 ROM 关机后无障碍不会自动恢复

  • 原因不是时序也不是权限,而是代码自锁:fixRestartAutomatorService() 要求 enableAutomator 为真才会写无障碍,
    而该标志位只有无障碍已经启动之后才为真 —— 冷启动时必然是假,于是永远轮不到去开
    (自动化模式不受影响,它的连接是无条件走的,所以表现成「自动化能自己起、无障碍不能」)
  • 新增 armA11yService():以「工作模式 = 无障碍」作为用户意图,自己复核 WRITE_SECURE_SETTINGS,
    写入无障碍总开关与服务列表,并在 2/5/10 秒内最多 4 次复验重试(应对刚拉起来又被系统解绑的那几秒)
  • 触发点接在运行时状态同步上:开机自启、拿到 root(特权通道就绪)、回到前台各补一次,root 迟到也能补开
  • 不和手动操作对着干:通过开关或下拉磁贴主动关闭无障碍后 30 分钟内不自动打开,主动再开立即撤销抑制;
    前台应用命中「禁用无障碍列表」时不打开
  • 每个拦截分支都写运行日志,再遇到没自动开时导出日志即可直接定位是被哪一条拦住

开机自启兜底(恢复自本地构建)

  • 新增 BootReceiver(BOOT_COMPLETED)与 StatusServiceJobService(persisted Job,开机 +10 秒兜底):
    常驻通知/服务状态不再需要开机后手动打开
  • AIDL 接口抽成独立模块 gkd-aidl(包名 li.gkd.aidl)并补齐 R8 keep 规则
  • 新增特权能力探测与权限常量集中定义

构建防护

  • APK 内新增 assets/working-tree.txt,自证构建时的工作区状态:干净时只有 commit 行;
    存在未提交改动时列出文件路径,并在构建目录留下 dirty.patch 与文件快照,
    避免再次出现「本机构建源码丢失、只能从 APK 反推」

v1.3.2(2026-10-03)

界面层整体回退到 v1.2.7 观感

  • 底座与业务能力保持 v1.3.1 不变,界面层整体恢复为 v1.2.7 那套 MIUIX 渲染层(即 v1.3.0 移植到新底座后的版本):
    • 恢复自研液态玻璃悬浮底栏(ui/liquid 整包)与配套设置开关
    • 恢复 GkTriStateSwitch、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup 等自绘组件
    • 恢复旧版设置分组 / 卡片 / 对话框 / 输入框样式(撤销 1.3.1 的 GkRowDefaults 排版统一与 M3→miuix 组件替换)
    • 恢复应用配置页「本地订阅」分组入口与订阅分组标题
  • 保留 v1.3.1 的全部修复(在恢复后的界面上重新应用):
    • 首页「应用」数量与「应用」Tab 同源(AppInfoRepository.visibleAppInfosFlow)
    • 应用列表点击闪退(TextStyle placeholder 的 lineHeight/width 兜底)
    • 订阅卡片按压高亮露出尖角
    • 二级页顶栏(多选顶栏)上方大片留白(改用 SmallTopAppBar)
  • 补齐 1.3.0 翻译版遗漏的 1.2.7 界面元素:
    • 悬浮按钮恢复液态玻璃(vibrancy + 折射 + 高光,无 RuntimeShader 时回退实色),涉及 8 个页面
    • 关于页整页恢复 1.2.7 版式:滚动视差 Logo(渐变收起/标题淡入)、背景特效(BgEffect 组件包整体移植)、
      顶栏滚动模糊落定转实色;功能保持新底座实现(更新渠道/检查更新/反馈/导出日志/分享 APK)
  • 恢复「触发提示 → 实时通知(流体云/超级岛)」完整功能(1.3.0 换底座时丢失,表现为选项点击无反应):
    • 设置项恢复三选一样式(悬浮窗 / 系统 Toast / 实时通知)与选中态正确回显
    • 移植 ActionTipNotif 渲染器:同一条 ongoing 通知同时适配 ColorOS 流体云(Google Live Update,
      反射调用避免 ROM 缺方法崩溃)与 HyperOS 超级岛(miui.focus 模板);通知权限缺失/无 Live Update
      API 时给出结果提示
    • 恢复「存在时间」快选与自定义秒数(2-120 秒,到期自动取消)、「实时更新系统开关」直达入口、
      「发送测试通知」按当前样式分发并在需要时先请求通知权限
    • store 新增 actionTipStyle / actionTipLiveDurationSec(带默认值,旧配置兼容);
      resolveActionTipStyle 兼容旧版 useSystemToast 开关
  • 修复 AI 服务商三个页面(列表 / 详情 / 使用说明)顶栏与页签底色异常:
    1.3.0 移植时这三个页面用了 material3 Scaffold + GkTopAppBar(顶栏恒为实色 surface、
    页面体为 background 色,与 1.2.7 毛玻璃壳的 surface 容器形成色差)。现统一换回
    GkPageScaffold 毛玻璃二级页壳(顶栏滚动透出毛玻璃、落定转实色),与 1.2.7 一致
  • 全 App 二级页壳统一:其余 20 处仍使用 material3 Scaffold 的页面全部换回
    GkPageScaffold 毛玻璃壳,彻底消除顶栏/页面体的 surface–background 色差:
    • 订阅流 6 页(应用列表、应用规则组、分类、分类规则组、全局规则组、全局排除,
      多选顶栏接壳的 externalScrollBehavior + barColor)
    • 日志 3 页(活动记录、触发记录、无障碍事件)
    • 编辑器壳 GkEditorScaffold(覆盖规则组/分类/规则排除/屏蔽列表编辑、
      触发提示文案、通知文案 6 个编辑页)
    • 应用作用域 2 页、快照页、快照设置页、局部关闭引导页、崩溃报告页(新增 bottomBar 槽)、
      内置浏览器(关闭内容采样避免重绘闪烁)、规则源查看与规则控制关系全屏弹窗

v1.3.1(2026-10-03)

全 App 统一分组与行排版

  • 新增 GkRowDefaults 作为全 App 唯一的排版规格来源:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、
    行内边距 16/12、行首图标 24 + 间距 16、分组小标题 14 Bold(缩进 32)、分割线 0.33dp@10%

  • 设置分组现在会真正渲染「常规 / 无障碍 / 外观 / 其他」这类小标题(此前该参数被忽略)

  • 设置项与开关项改为统一的「标题 16 Medium + 摘要 14」两行结构,行尾箭头改为细箭头

  • 按压反馈统一为「按住整行叠 6% 前景色」(去掉涟漪),与 MIUIX 组件行为一致

  • 组内分割线自动生成(miuix 组件本身不画行间分割线):非首行自动画一条 0.33dp 细线

  • 首页 / 订阅 / 应用 / 设置四个主 Tab、应用配置页规则卡、应用列表卡、订阅卡全部统一到该规格

  • Material3 组件继续替换为官方 miuix:单选按钮、下拉刷新、Tooltip、复选框、底部操作条、
    普通按钮、对话框(17 处调用点零改动)、Scaffold(22 个文件)、输入框(新增 GkTextField 封装,
    删除从 material3 手工拷贝的 GkOutlinedTextField)

AI 配置界面重排

  • 服务商列表:顶部圆角搜索框,「添加服务商」入口改为「标题 + 摘要 + 右箭头」行,已配置项改为
    名称 / 地址 / 元信息三段式,行尾圆点即选即切当前服务商,删除由长按触发并走统一弹窗
  • 服务商详情(配置):输入项改为「label 当占位」的紧凑写法,端点模式改为行尾值 + 箭头,
    测试连接为标准行;自定义请求头可展开;启用开关 + 系统提示词 + 生成参数分组;
    底部是全宽主按钮 + 状态文字,危险操作为居中红字卡片
  • 模型页签:容器与行样式同步到同一套排版规格
  • 排版规格统一:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、行内边距 16/12、
    行首图标 24 + 间距 16、分割线 0.33dp@10%(有图标时左缩进 56)、
    主按钮 44 高/圆角 22、弹窗内外边距 24/16、分组小标题 14 Bold 缩进 32

修复 + 界面回归原版 miuix

  • 修复首页「应用」数量不准确:该卡片误用订阅快照表的 size(等于订阅条数),改为与「应用」Tab 同源的已安装应用列表
  • 修复应用列表点击后闪退:miuix 的 TextStyle(body1 / body2 …)默认只声明 fontSize,lineHeight 为 TextUnit.Unspecified,而 Compose 的 Placeholder 不接受 Unspecified。含全局规则组的应用、以及系统应用,进入应用配置页必崩;现已在标题/规则组名称的内联图标占位符处统一兜底
  • 修复订阅卡片点按后按压高亮露出四个尖角:点击反馈曾挂在卡片外层的 combinedClickable 上,涟漪绘制在卡片背景之下且不受 squircle 裁剪,只从四个圆角溢出;现已移入卡片内部
  • 修复二级页顶栏上方大片留白:MIUIX 的 TopAppBar 是大标题栏,标题传空串时仍会占掉一整行大标题高度(CollapsedHeight + 一行 title1 + LargeTitleBottomPadding),再把 bottomContent 顶到更下面。应用配置页、订阅应用列表页这类「标题自带渲染(应用名内联图标 / 已选 N 项)」的顶栏现改用 SmallTopAppBar,标题紧贴图标行下方,约省掉 34dp 空白
  • 弃用早期移植自 gkd-miuix 的界面方案,改为直接使用原版 miuix 组件:
    • 首页外壳简化为「一个 Scaffold + 一个 LayerBackdrop」,模糊统一走 miuix 官方 Modifier.textureBlur
    • 删除自研液态玻璃底栏(ui/liquid 整包)与配套的分页采样互斥、离屏栅格化 hack,设置页同步移除「液态玻璃」开关
    • 删除 GkTriStateSwitch(691 行自绘开关)、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup、EmptyText 等无人引用的残留组件
  • 界面层继续把残留的 Material3 组件换成原版 miuix:
    • 对话框/操作按钮:TextButton 39 处(19 个文件)改用 miuix TextButton,确认类按钮统一为 textButtonColorsPrimary(),破坏性操作沿用红色
    • 图标按钮配色来源统一(LocalContentColor 20 个文件改读 miuix 主题值,与 miuix Card / BasicComponent 的内容色对齐)
    • 加载指示:CircularProgressIndicator / LinearProgressIndicator 改用 miuix 版本
    • 容器与分割线:Surface、HorizontalDivider 改用 miuix 版本
    • 应用配置页顶栏标题改为居中显示
    • 图标按钮:GkIconButton / GkSizedIconButton / GkBlockCloseIconButton / GkSearchCloseIconButton 与三处直用的 IconButton 全部改用 miuix IconButton(miuix 无 colors 参数,配色改为 backgroundColor + 图标 tint);自绘的 CustomIconButton(Box + Material ripple)删除
  • 应用配置页整理:
    • 去掉「本地订阅 >」分组入口(它指向的二级订阅页功能与本页重复);单订阅时整行不再显示,仅当同一应用被多份订阅覆盖时才保留一个不可点的分组标签以便区分来源
    • 规则卡片之间补 4dp 垂直间距,不再首尾相连糊成一整块

v1.3.0(重构版)

架构重构 + 全界面回归 MIUIX

  • 编译底座换成上游 GKD 新模块化架构(包名 li.gkd.app.*、Navigation3、Room、Ktor),业务逻辑全部使用新底座实现
  • 界面层不采用上游 UI,而是把旧版 MIUIX 渲染层原样「翻译」到新底座:四个 Tab 页 + 二级页面(高级设置、工作模式、关于、AI 服务商、订阅详情、快照等)全部按旧版观感重排
  • 应用更名为 GKD-XA
  • 补回底座缺失的毛玻璃二级页壳 GkPageScaffold(等价旧版 AppPageScaffold):顶栏滚动透出毛玻璃、落定转实色
  • 二级页返回按钮统一为 MIUIX 无边框图标按钮,消除顶栏风格割裂

新增 / 增强

  • AI 规则改为多服务商:新增「AI 服务商」列表页,可同时保存多套协议/地址/密钥/模型池,勾选圆点即切换当前服务商
  • 服务商详情拆成「配置 / 模型」两个页签;配置页含 Base URL、API Key(可显隐)、端点模式(Chat Completions / Responses)、anthropic-version、自定义请求头、系统提示词与生成参数
  • 模型页支持远端拉取并按 Model ID 合并、关键字搜索、多选批量删除、逐个编辑上下文长度与思考标记
  • 「测试连接」直接读取远端 /models 并把返回的模型并入列表,结果在行内即时反馈
  • 首次启动自动把旧的单份 AI 配置迁移成一个服务商,无需重填
  • 通知文案可自定义主标题 / 副标题 / 正文,支持模板变量与实时预览
  • 规则类别:前缀匹配、跟随订阅或规则组默认值、批量设置与冲突检测
  • 控制关系图:可视化规则组开关来源(订阅 / 类别 / 应用 / 自身设置)

修复

  • 修复首页右上角「工作模式」按钮点按闪退:MIUIX 部分 TextStyle 的 lineHeight / fontSize 不是 Sp 单位,直接 toDp() 会抛 IllegalStateException: Only Sp can convert to Px;新增安全工具 toSpDpOr() / lineHeightDp() 兜底,并全局修掉 3 处同类隐患
  • 修复订阅卡片无障碍语义与长按误取消(长按改为 select 而非 toggle)
  • 修复订阅页丢失全选 / 反选入口
  • 修复「局部关闭」引导内「继续」按钮点击无响应
  • 修复通知文案弹窗在切换开关时改变 composable 调用点数量的问题
  • 应用详情页(应用列表点入):规则卡片、订阅分组标题、排序/筛选菜单与返回按钮恢复旧版 MIUIX 的间距和组件观感;保留新版批量选择、规则可用性说明、控制关系等业务能力

v1.2.7

  • 更新弹窗的确认按钮改为「更新」,四个字不再折成两行
  • 下载失败时弹窗新增「复制链接 / 浏览器打开」,GitHub 直连不通可交给带代理的浏览器下载

v1.2.6

  • AI 规则改为多服务商:新增「AI 服务商」列表页,可同时保存多套协议/地址/密钥/模型池,勾选圆点即切换当前服务商
  • 服务商详情拆成「配置 / 模型」两个页签;配置页含 Base URL、API Key(可显隐)、端点模式(Chat Completions / Responses)、anthropic-version、自定义请求头、系统提示词与生成参数
  • 模型页支持远端拉取并按 Model ID 合并、关键字搜索、多选批量删除、逐个编辑上下文长度与思考标记
  • 「测试连接」直接读取远端 /models 并把返回的模型并入列表,结果在行内即时反馈
  • 首次启动自动把旧的单份 AI 配置迁移成一个服务商,无需重填

v1.2.5

  • 修复开机后需手动打开「服务状态」:系统杀掉无障碍时不再误清开启意图,自动修复会补写无障碍总开关
  • 修复无障碍进入 Crashed 后开关显示开启但跳广告失效、且关不掉:关闭时从安全设置移除,开启/修复时先摘再挂

v1.2.4

  • 修复悬浮底栏液态玻璃边缘折射/反射错位(padding 须在 blur 之前)
  • 更新检测优先 GitHub raw,多源比对最高 versionCode,避免 CDN 脏缓存挡住更新

v1.2.3

  • 按 MIUIX 规范收敛界面:二级页统一 AppPageScaffold 毛玻璃顶栏
  • 修复首页顶栏模糊不生效;底栏避免多 backdrop 抢采样变黑
  • 服务状态语义色、进度指示统一封装;卡片 12.dp 与可点色块 squircle

v1.2.2

  • 测试通知文案说明:应用内不会上岛,请在通知栏查看实时通知

v1.2.1

  • 实时通知同时适配 ColorOS 流体云与 HyperOS 超级岛
  • 超级岛参数改为官方摘要态模板(含 miui.focus.pics)

v1.2.0

  • 去掉设置分组外的分类小字标题(如「服务」「数据概览」「快捷入口」等),更贴合 MIUIX 观感

v1.1.0

  • 应用更名为 GKD-X,安装包名改为 li.songe.gkdx(可与原版 GKD 并存)
  • 触发记录、应用配置(含「最近触发」)改为独立 Activity,缓解进页转场掉帧

v1.0.0(首版)

  • 全量 MIUIX 界面(顶栏模糊、悬浮底栏、液态玻璃 FAB)
  • 预测式返回开关;动态取色默认关闭
  • 订阅添加/修改/刷新时显示加载进度
  • 触发提示支持流体云 / 灵动岛实时通知,并可自定义存在时间

MIUIX

  • 界面全面适配 MIUIX(顶栏、底栏、设置分组、对话框、图标等)
  • 触发记录页适配 MIUIX 样式与字体色
  • 订阅页取消...
Read more

Release v1.3.3

Choose a tag to compare

@github-actions github-actions released this 06 Oct 13:25

更新内容

v1.3.3(2026-10-06)

修复:ColorOS 等 ROM 关机后无障碍不会自动恢复

  • 原因不是时序也不是权限,而是代码自锁:fixRestartAutomatorService() 要求 enableAutomator 为真才会写无障碍,
    而该标志位只有无障碍已经启动之后才为真 —— 冷启动时必然是假,于是永远轮不到去开
    (自动化模式不受影响,它的连接是无条件走的,所以表现成「自动化能自己起、无障碍不能」)
  • 新增 armA11yService():以「工作模式 = 无障碍」作为用户意图,自己复核 WRITE_SECURE_SETTINGS,
    写入无障碍总开关与服务列表,并在 2/5/10 秒内最多 4 次复验重试(应对刚拉起来又被系统解绑的那几秒)
  • 触发点接在运行时状态同步上:开机自启、拿到 root(特权通道就绪)、回到前台各补一次,root 迟到也能补开
  • 不和手动操作对着干:通过开关或下拉磁贴主动关闭无障碍后 30 分钟内不自动打开,主动再开立即撤销抑制;
    前台应用命中「禁用无障碍列表」时不打开
  • 每个拦截分支都写运行日志,再遇到没自动开时导出日志即可直接定位是被哪一条拦住

开机自启兜底(恢复自本地构建)

  • 新增 BootReceiver(BOOT_COMPLETED)与 StatusServiceJobService(persisted Job,开机 +10 秒兜底):
    常驻通知/服务状态不再需要开机后手动打开
  • AIDL 接口抽成独立模块 gkd-aidl(包名 li.gkd.aidl)并补齐 R8 keep 规则
  • 新增特权能力探测与权限常量集中定义

构建防护

  • APK 内新增 assets/working-tree.txt,自证构建时的工作区状态:干净时只有 commit 行;
    存在未提交改动时列出文件路径,并在构建目录留下 dirty.patch 与文件快照,
    避免再次出现「本机构建源码丢失、只能从 APK 反推」

v1.3.2(2026-10-03)

界面层整体回退到 v1.2.7 观感

  • 底座与业务能力保持 v1.3.1 不变,界面层整体恢复为 v1.2.7 那套 MIUIX 渲染层(即 v1.3.0 移植到新底座后的版本):
    • 恢复自研液态玻璃悬浮底栏(ui/liquid 整包)与配套设置开关
    • 恢复 GkTriStateSwitch、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup 等自绘组件
    • 恢复旧版设置分组 / 卡片 / 对话框 / 输入框样式(撤销 1.3.1 的 GkRowDefaults 排版统一与 M3→miuix 组件替换)
    • 恢复应用配置页「本地订阅」分组入口与订阅分组标题
  • 保留 v1.3.1 的全部修复(在恢复后的界面上重新应用):
    • 首页「应用」数量与「应用」Tab 同源(AppInfoRepository.visibleAppInfosFlow)
    • 应用列表点击闪退(TextStyle placeholder 的 lineHeight/width 兜底)
    • 订阅卡片按压高亮露出尖角
    • 二级页顶栏(多选顶栏)上方大片留白(改用 SmallTopAppBar)
  • 补齐 1.3.0 翻译版遗漏的 1.2.7 界面元素:
    • 悬浮按钮恢复液态玻璃(vibrancy + 折射 + 高光,无 RuntimeShader 时回退实色),涉及 8 个页面
    • 关于页整页恢复 1.2.7 版式:滚动视差 Logo(渐变收起/标题淡入)、背景特效(BgEffect 组件包整体移植)、
      顶栏滚动模糊落定转实色;功能保持新底座实现(更新渠道/检查更新/反馈/导出日志/分享 APK)
  • 恢复「触发提示 → 实时通知(流体云/超级岛)」完整功能(1.3.0 换底座时丢失,表现为选项点击无反应):
    • 设置项恢复三选一样式(悬浮窗 / 系统 Toast / 实时通知)与选中态正确回显
    • 移植 ActionTipNotif 渲染器:同一条 ongoing 通知同时适配 ColorOS 流体云(Google Live Update,
      反射调用避免 ROM 缺方法崩溃)与 HyperOS 超级岛(miui.focus 模板);通知权限缺失/无 Live Update
      API 时给出结果提示
    • 恢复「存在时间」快选与自定义秒数(2-120 秒,到期自动取消)、「实时更新系统开关」直达入口、
      「发送测试通知」按当前样式分发并在需要时先请求通知权限
    • store 新增 actionTipStyle / actionTipLiveDurationSec(带默认值,旧配置兼容);
      resolveActionTipStyle 兼容旧版 useSystemToast 开关
  • 修复 AI 服务商三个页面(列表 / 详情 / 使用说明)顶栏与页签底色异常:
    1.3.0 移植时这三个页面用了 material3 Scaffold + GkTopAppBar(顶栏恒为实色 surface、
    页面体为 background 色,与 1.2.7 毛玻璃壳的 surface 容器形成色差)。现统一换回
    GkPageScaffold 毛玻璃二级页壳(顶栏滚动透出毛玻璃、落定转实色),与 1.2.7 一致
  • 全 App 二级页壳统一:其余 20 处仍使用 material3 Scaffold 的页面全部换回
    GkPageScaffold 毛玻璃壳,彻底消除顶栏/页面体的 surface–background 色差:
    • 订阅流 6 页(应用列表、应用规则组、分类、分类规则组、全局规则组、全局排除,
      多选顶栏接壳的 externalScrollBehavior + barColor)
    • 日志 3 页(活动记录、触发记录、无障碍事件)
    • 编辑器壳 GkEditorScaffold(覆盖规则组/分类/规则排除/屏蔽列表编辑、
      触发提示文案、通知文案 6 个编辑页)
    • 应用作用域 2 页、快照页、快照设置页、局部关闭引导页、崩溃报告页(新增 bottomBar 槽)、
      内置浏览器(关闭内容采样避免重绘闪烁)、规则源查看与规则控制关系全屏弹窗

v1.3.1(2026-10-03)

全 App 统一分组与行排版

  • 新增 GkRowDefaults 作为全 App 唯一的排版规格来源:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、
    行内边距 16/12、行首图标 24 + 间距 16、分组小标题 14 Bold(缩进 32)、分割线 0.33dp@10%

  • 设置分组现在会真正渲染「常规 / 无障碍 / 外观 / 其他」这类小标题(此前该参数被忽略)

  • 设置项与开关项改为统一的「标题 16 Medium + 摘要 14」两行结构,行尾箭头改为细箭头

  • 按压反馈统一为「按住整行叠 6% 前景色」(去掉涟漪),与 MIUIX 组件行为一致

  • 组内分割线自动生成(miuix 组件本身不画行间分割线):非首行自动画一条 0.33dp 细线

  • 首页 / 订阅 / 应用 / 设置四个主 Tab、应用配置页规则卡、应用列表卡、订阅卡全部统一到该规格

  • Material3 组件继续替换为官方 miuix:单选按钮、下拉刷新、Tooltip、复选框、底部操作条、
    普通按钮、对话框(17 处调用点零改动)、Scaffold(22 个文件)、输入框(新增 GkTextField 封装,
    删除从 material3 手工拷贝的 GkOutlinedTextField)

AI 配置界面重排

  • 服务商列表:顶部圆角搜索框,「添加服务商」入口改为「标题 + 摘要 + 右箭头」行,已配置项改为
    名称 / 地址 / 元信息三段式,行尾圆点即选即切当前服务商,删除由长按触发并走统一弹窗
  • 服务商详情(配置):输入项改为「label 当占位」的紧凑写法,端点模式改为行尾值 + 箭头,
    测试连接为标准行;自定义请求头可展开;启用开关 + 系统提示词 + 生成参数分组;
    底部是全宽主按钮 + 状态文字,危险操作为居中红字卡片
  • 模型页签:容器与行样式同步到同一套排版规格
  • 排版规格统一:卡片圆角 24、左右外边距 16、分组间距 16、行高 ≥52、行内边距 16/12、
    行首图标 24 + 间距 16、分割线 0.33dp@10%(有图标时左缩进 56)、
    主按钮 44 高/圆角 22、弹窗内外边距 24/16、分组小标题 14 Bold 缩进 32

修复 + 界面回归原版 miuix

  • 修复首页「应用」数量不准确:该卡片误用订阅快照表的 size(等于订阅条数),改为与「应用」Tab 同源的已安装应用列表
  • 修复应用列表点击后闪退:miuix 的 TextStyle(body1 / body2 …)默认只声明 fontSize,lineHeight 为 TextUnit.Unspecified,而 Compose 的 Placeholder 不接受 Unspecified。含全局规则组的应用、以及系统应用,进入应用配置页必崩;现已在标题/规则组名称的内联图标占位符处统一兜底
  • 修复订阅卡片点按后按压高亮露出四个尖角:点击反馈曾挂在卡片外层的 combinedClickable 上,涟漪绘制在卡片背景之下且不受 squircle 裁剪,只从四个圆角溢出;现已移入卡片内部
  • 修复二级页顶栏上方大片留白:MIUIX 的 TopAppBar 是大标题栏,标题传空串时仍会占掉一整行大标题高度(CollapsedHeight + 一行 title1 + LargeTitleBottomPadding),再把 bottomContent 顶到更下面。应用配置页、订阅应用列表页这类「标题自带渲染(应用名内联图标 / 已选 N 项)」的顶栏现改用 SmallTopAppBar,标题紧贴图标行下方,约省掉 34dp 空白
  • 弃用早期移植自 gkd-miuix 的界面方案,改为直接使用原版 miuix 组件:
    • 首页外壳简化为「一个 Scaffold + 一个 LayerBackdrop」,模糊统一走 miuix 官方 Modifier.textureBlur
    • 删除自研液态玻璃底栏(ui/liquid 整包)与配套的分页采样互斥、离屏栅格化 hack,设置页同步移除「液态玻璃」开关
    • 删除 GkTriStateSwitch(691 行自绘开关)、GkSubsItemCard、GkAuthCard、GkAuthButtonGroup、EmptyText 等无人引用的残留组件
  • 界面层继续把残留的 Material3 组件换成原版 miuix:
    • 对话框/操作按钮:TextButton 39 处(19 个文件)改用 miuix TextButton,确认类按钮统一为 textButtonColorsPrimary(),破坏性操作沿用红色
    • 图标按钮配色来源统一(LocalContentColor 20 个文件改读 miuix 主题值,与 miuix Card / BasicComponent 的内容色对齐)
    • 加载指示:CircularProgressIndicator / LinearProgressIndicator 改用 miuix 版本
    • 容器与分割线:Surface、HorizontalDivider 改用 miuix 版本
    • 应用配置页顶栏标题改为居中显示
    • 图标按钮:GkIconButton / GkSizedIconButton / GkBlockCloseIconButton / GkSearchCloseIconButton 与三处直用的 IconButton 全部改用 miuix IconButton(miuix 无 colors 参数,配色改为 backgroundColor + 图标 tint);自绘的 CustomIconButton(Box + Material ripple)删除
  • 应用配置页整理:
    • 去掉「本地订阅 >」分组入口(它指向的二级订阅页功能与本页重复);单订阅时整行不再显示,仅当同一应用被多份订阅覆盖时才保留一个不可点的分组标签以便区分来源
    • 规则卡片之间补 4dp 垂直间距,不再首尾相连糊成一整块

v1.3.0(重构版)

架构重构 + 全界面回归 MIUIX

  • 编译底座换成上游 GKD 新模块化架构(包名 li.gkd.app.*、Navigation3、Room、Ktor),业务逻辑全部使用新底座实现
  • 界面层不采用上游 UI,而是把旧版 MIUIX 渲染层原样「翻译」到新底座:四个 Tab 页 + 二级页面(高级设置、工作模式、关于、AI 服务商、订阅详情、快照等)全部按旧版观感重排
  • 应用更名为 GKD-XA
  • 补回底座缺失的毛玻璃二级页壳 GkPageScaffold(等价旧版 AppPageScaffold):顶栏滚动透出毛玻璃、落定转实色
  • 二级页返回按钮统一为 MIUIX 无边框图标按钮,消除顶栏风格割裂

新增 / 增强

  • AI 规则改为多服务商:新增「AI 服务商」列表页,可同时保存多套协议/地址/密钥/模型池,勾选圆点即切换当前服务商
  • 服务商详情拆成「配置 / 模型」两个页签;配置页含 Base URL、API Key(可显隐)、端点模式(Chat Completions / Responses)、anthropic-version、自定义请求头、系统提示词与生成参数
  • 模型页支持远端拉取并按 Model ID 合并、关键字搜索、多选批量删除、逐个编辑上下文长度与思考标记
  • 「测试连接」直接读取远端 /models 并把返回的模型并入列表,结果在行内即时反馈
  • 首次启动自动把旧的单份 AI 配置迁移成一个服务商,无需重填
  • 通知文案可自定义主标题 / 副标题 / 正文,支持模板变量与实时预览
  • 规则类别:前缀匹配、跟随订阅或规则组默认值、批量设置与冲突检测
  • 控制关系图:可视化规则组开关来源(订阅 / 类别 / 应用 / 自身设置)

修复

  • 修复首页右上角「工作模式」按钮点按闪退:MIUIX 部分 TextStyle 的 lineHeight / fontSize 不是 Sp 单位,直接 toDp() 会抛 IllegalStateException: Only Sp can convert to Px;新增安全工具 toSpDpOr() / lineHeightDp() 兜底,并全局修掉 3 处同类隐患
  • 修复订阅卡片无障碍语义与长按误取消(长按改为 select 而非 toggle)
  • 修复订阅页丢失全选 / 反选入口
  • 修复「局部关闭」引导内「继续」按钮点击无响应
  • 修复通知文案弹窗在切换开关时改变 composable 调用点数量的问题
  • 应用详情页(应用列表点入):规则卡片、订阅分组标题、排序/筛选菜单与返回按钮恢复旧版 MIUIX 的间距和组件观感;保留新版批量选择、规则可用性说明、控制关系等业务能力

v1.2.7

  • 更新弹窗的确认按钮改为「更新」,四个字不再折成两行
  • 下载失败时弹窗新增「复制链接 / 浏览器打开」,GitHub 直连不通可交给带代理的浏览器下载

v1.2.6

  • AI 规则改为多服务商:新增「AI 服务商」列表页,可同时保存多套协议/地址/密钥/模型池,勾选圆点即切换当前服务商
  • 服务商详情拆成「配置 / 模型」两个页签;配置页含 Base URL、API Key(可显隐)、端点模式(Chat Completions / Responses)、anthropic-version、自定义请求头、系统提示词与生成参数
  • 模型页支持远端拉取并按 Model ID 合并、关键字搜索、多选批量删除、逐个编辑上下文长度与思考标记
  • 「测试连接」直接读取远端 /models 并把返回的模型并入列表,结果在行内即时反馈
  • 首次启动自动把旧的单份 AI 配置迁移成一个服务商,无需重填

v1.2.5

  • 修复开机后需手动打开「服务状态」:系统杀掉无障碍时不再误清开启意图,自动修复会补写无障碍总开关
  • 修复无障碍进入 Crashed 后开关显示开启但跳广告失效、且关不掉:关闭时从安全设置移除,开启/修复时先摘再挂

v1.2.4

  • 修复悬浮底栏液态玻璃边缘折射/反射错位(padding 须在 blur 之前)
  • 更新检测优先 GitHub raw,多源比对最高 versionCode,避免 CDN 脏缓存挡住更新

v1.2.3

  • 按 MIUIX 规范收敛界面:二级页统一 AppPageScaffold 毛玻璃顶栏
  • 修复首页顶栏模糊不生效;底栏避免多 backdrop 抢采样变黑
  • 服务状态语义色、进度指示统一封装;卡片 12.dp 与可点色块 squircle

v1.2.2

  • 测试通知文案说明:应用内不会上岛,请在通知栏查看实时通知

v1.2.1

  • 实时通知同时适配 ColorOS 流体云与 HyperOS 超级岛
  • 超级岛参数改为官方摘要态模板(含 miui.focus.pics)

v1.2.0

  • 去掉设置分组外的分类小字标题(如「服务」「数据概览」「快捷入口」等),更贴合 MIUIX 观感

v1.1.0

  • 应用更名为 GKD-X,安装包名改为 li.songe.gkdx(可与原版 GKD 并存)
  • 触发记录、应用配置(含「最近触发」)改为独立 Activity,缓解进页转场掉帧

v1.0.0(首版)

  • 全量 MIUIX 界面(顶栏模糊、悬浮底栏、液态玻璃 FAB)
  • 预测式返回开关;动态取色默认关闭
  • 订阅添加/修改/刷新时显示加载进度
  • 触发提示支持流体云 / 灵动岛实时通知,并可自定义存在时间

MIUIX

  • 界面全面适配 MIUIX(顶栏、底栏、设置分组、对话框、图标等)
  • 触发记录页适配 MIUIX 样式与字体色
  • 订阅页取消下拉刷新,顶栏增加刷新按钮

开源致谢

本分支基于 GKD 与 hanchuan8/gkd-miuix,界面依托 compose-miuix-ui(MIUIX UI / Preference / Icons / Blur)等开源项目,详见仓库 README。

更新方式

测试包 1.3.2-9c8aaa6:开机 root 就绪自动补开无障碍

Choose a tag to compare

@84593320z 84593320z released this 06 Oct 10:35

这是什么

测试包,不是正式版。由分支 integration/boot-restore(commit 9c8aaa6)经仓库 CI 构建,是下面三条分支的合并,文件互不重叠、无冲突:

来源分支 内容
restore-5d3b322-code 从丢失的本地构建产物里回捞出来的代码:CompatServiceBinder(服务 binder 缓存 + 断连重取)、PrivilegeCapabilities(服务端能力探测)、开机自启兜底(BootReceiver + persisted StatusServiceJobService,开机 10 秒后补拉一次)、AndroidPermissions 常量、AIDL 移入独立模块 :gkd-aidl(包名 li.gkd.aidl)、manifest 补 RECEIVE_BOOT_COMPLETED / DUMP / BIND_JOB_SERVICE
build-forensics-guard 构建产物自带 assets/working-tree.txt:把未提交的源码文件(状态 + 内容哈希 + 路径)记进 APK,防止"代码丢了无从查证"再次发生
boot-a11y-on-privilege 拿到 root 的那一刻自动补开无障碍(修 ColorOS 开机关无障碍 + 临时 root/LSPosed 迟到导致"自启成功但无障碍没开")

版本与签名

  • versionName = 1.3.2-9c8aaa6,versionCode = 132(与官方 v1.3.2 相同)
  • 签名 = 官方 release keystore(证书 CN=GKD-X),与已安装的正式版一致 ⇒ 可在官方 v1.3.2 上直接覆盖安装,不用卸载、不掉数据
  • 构建来源:GitHub Actions run 37449490790(Build-Apk),产物已校验包含上述全部改动

重点测什么(OPPO / ColorOS + 临时 root 的机器)

  1. 开机后不要打开 GKD 界面,等 1–3 分钟,看两件事:
    • 常驻通知(服务状态)是否自己出现;
    • 无障碍是否被自动打开(这是本次的核心修复)。
  2. 如果 root 比无障碍慢到,日志里应能看到一次 privilege connected 触发的同步。抓日志:
    adb logcat | grep -E "privilege connected|grantSelf|accessibility|GKD"
    
  3. 对照组:如果这台机器上"官方 v1.3.2 + 手动打开一次 GKD 界面"才能开无障碍,那这个包就应该不需要打开界面。

这个包里没有的东西(避免误判)

  • 界面层那几处未推送的改动还没回来:PrivilegeDiagnosticDialog(特权服务诊断弹窗)、PrivilegeApi 的诊断流、PrivilegeContext 的 guarded 降级包裹、Theme.miuixMaterialTypography、以及新"主题设置"页 DesignPage。这些只从产物里定位到了位置和文案,代码需要重写,所以本包不含。
  • 因此"特权服务诊断"这个入口在包里是看不到的,本次测试不需要找它。

已知风险

  • 只验证过"能编译、产物里改动都在",行为没有在真机上测过(这正是请人测的原因)。
  • 若测试机 root 完全不可用(未授权 / LSPosed 未起),无障碍不会被自动打开,这是预期行为:grantSelf() 在特权端权限受限时会直接返回。

测试包 1.3.3-4882bdf:全量跟随 miuix 0.9.4(独立包名 li.songe.gkdx.t)

Choose a tag to compare

@84593320z 84593320z released this 07 Oct 05:18

这个包是什么

把 GKD-XA 的界面层完全跟随 miuix 上游最新提交(0.9.4 + miuix-nav + 重新同步 example 镜像代码)后的测试包,
用来验证升级本身,不是正式版通道。

包名是 li.songe.gkdx.t,和正式版 li.songe.gkdx 是两个独立应用:可以并存安装、互不覆盖、数据各自一份。
关于页显示 1.3.3-4882bdf(带 commit 后缀是因为这个包不是从 tag 构建的,正式版才不带后缀)。
包体 5,812,828 字节,比 1.3.3 正式包的 5,759,776 大 53KB,来自 miuix-nav 这个自带运行时的模块。

⚠️ 两个前提:

  1. 测试期间请把正式版的无障碍关掉。两个包的无障碍服务在系统里是两条独立条目,
    同时开着会互相抢着跳广告、互相看到对方的事件,现象会没法解释。
  2. 这个包的更新渠道仍指向正式版 version/stable.json(versionCode 相同,所以不会提示更新)。
    别在这个包上点"检查更新"之外的升级操作。

这一版包含的改动

1. 依赖升级:miuix 0.9.3 → 0.9.4,导航换成 miuix-nav

上游在 0.9.4 删掉了 miuix-navigation3-ui 这个 artifact(Maven Central 上 0.9.4 直接 404),
换成自带运行时的 miuix-nav:NavKey / NavBackStack / NavDisplay / entry DSL 全部归 Miuix,
SavedState 与 ViewModelStore 的 entry 装饰由库自己接管,navigation3-runtime 和
lifecycle-viewmodel-navigation3 两个 AndroidX 依赖因此一并去掉。

2. 页面转场改由库提供(这是你最容易感觉到的部分)

  • 自写的 transitionSpec / popTransitionSpec / predictivePopTransitionSpec 三段删了,
    默认用 NavTransitions.MiuixDefault:带连续栈深度(animatedTop)—— 下层页面会随返回进度
    连续缩放和压暗,而不是只在动画两端切换;
  • 编辑器类页面(触发提示、通知文案、禁用应用列表、规则组/分类编辑等 9 个)改用 NavTransitions.Modal;
  • 预测式返回现在是库实现的,支持拖拽中途松手回弹;另外 miuix-nav 的 swipe-to-dismiss 是
    按路由 opt-in 的(entry(swipeDismiss = …)),这一版没有给任何页面开启,
    所以只有系统返回手势/预测式返回,没有侧滑删除页面。
  • ContentReady 改用 LocalNavTransitionScope.current.isRunning:首页分页在转场未落定前
    仍然只组当前 Tab。

3. 深色模式两处修复(和升级无关,是独立问题)

  • Theme.kt 的 MIUIX→Material3 桥接原本漏了 10 个颜色槽位,保留的是 Material3 基线值。
    MIUIX 深色的 surface 是纯黑、background 是 #242424,明度阶梯方向和 Material3 默认相反,
    所以未桥接的槽位会给出对冲的面板色。现在按 MIUIX 自己的明度补齐(分深浅模式取)。
  • AppTheme 原本只 provides 了 miuix 的 LocalContentColor,没 provides Material3 的同名 Local。
    没被 M3 Surface 包住的 M3 Text / Icon 读的是 M3 那个,取不到色就退到平台默认(黑)——
    深色下就是"内容看不见"。现在两个都提供。

4. 清掉 1955 行零引用代码

GkTriStateSwitch(691) / DashboardPage(635) / GkSubsItemCard(231) 等 9 个文件全仓零引用,
是 v1.3.2「界面回退到 1.2.7 观感」时把旧副本一起捞回来的。其中 GkSubsItemCard 还带着
1.3.1 已经修掉的"按压露尖角"写法。纯删除,不动在跑的东西。

5. 底栏/液态玻璃重新同步上游

  • 底栏命中判定换成上游的 indexAt(positionX)(按下位置直接算 tab,替代原来的 holder + 闭包写法);
  • 底栏现在可聚焦、支持键盘方向键与回车、TalkBack 能读到选中态(上游新增的
    focusable / onKeyEvent / semantics onClick);
  • DampedDragAnimation 补上 onDragCancelled(拖拽被取消与正常停手分开);
  • 原先为 0.9.3 缺兜底而手写的「padding 必须先于 blur()」补偿随上游重写消失。
  • 14 个镜像自上游 example 的文件都标了 同步自 miuix@39c40f9 + 上游路径,下次同步可以直接 diff。

请重点看这几处

  1. 页面进出转场:进二级页、返回、以及按住系统返回手势拖到一半松手是否回弹自然;
    下层页面有没有跟着连续缩放/压暗。
  2. 深色模式:之前反馈的"很多内容不显示",现在具体看 对话框 / 底部面板 / Tooltip /
    输入框标签 / Snackbar 这几处(它们吃的正是这次补齐的槽位)。
    如果还有不显示的地方,麻烦说清是哪个页面哪一块。
  3. 开机自动开无障碍:这次带着上版那个修复一起,确认没被升级弄坏。
  4. 底栏:四个 Tab 点击与拖拽指示器;如果你用 TalkBack 或外接键盘,试试能不能操作。
  5. 编辑器页面(触发提示、通知文案、规则组编辑等)的进出动画现在是 Modal 形态
    (竖直方向 + 下层压暗),和之前的自写版观感会有差别,看看是否接受。

已知没做的

  • 图标集仍是 material-icons-extended(上游 miuix-icons 已声明但全仓没用)。
    换图标集会改变几乎所有图标的样子,这是换皮不是重构,需要你单独决定。
  • miuix 的 Slider / SegmentedControl / SearchBar / ListItem / Dialog 仍未使用。
  • 设置分组的小标题依旧不显示 —— 那是 v1.2.0 有意去掉的,代码里 PreferenceGroup 的
    title 参数被显式忽略,而 SettingsPage 还在传值。要么删参数、要么恢复标题,二选一。
  • 侧滑返回关闭页面(swipe-to-dismiss)没给任何路由开启。

签名:release key(CN=GKD-X),但包名不同,所以不会覆盖正式版、也不会被正式版覆盖安装。