版本更新记录
「上课」的迭代节奏很密:修复、性能、交互与外观细节几乎每周都在推进。 这里保留每一次发版的改动明细,方便你判断某个问题是否已经解决。
- v4.83.0 · 发布说明
- v4.82.3 · 发布说明
- v4.82.2 · 发布说明
- v4.82.1 · 发布说明
- v4.82.0 · 发布说明
- v4.81.3 · 发布说明
- v4.81.2 · 发布说明
- v4.81.1 · 发布说明
- v4.81.0 · 发布说明
- v4.80.3 · 发布说明
- v4.80.1 · 发布说明
- v4.80.0 · 发布说明
- v4.79.2 · 界面质感打磨
- v4.79.1 · 发布说明
- v4.79.0 · 发布说明
- v4.78.15 · 发布说明
- v4.78.14 · 发布说明
- v4.78.13 · 修复「同步到日历里的图标没换成新图标」+ 应用商店图标刷新
- v4.78.12 · 今日课程卡严格等高 + 官网资源体积减半(WebP / WOFF2)
- v4.78.11 · 修复遗留单测假红,全量测试转绿
- v4.78.10 · 组件层字重彻底归零,主题门禁与发版工具加固
- v4.78.9 · 字重收口全站完成(组件层 SemiBold / Medium 清零)
- v4.78.8 · 同页卡片等高(固定槽位),字重收口扩至日程与设置页
- v4.78.7 · 字重语义 token 收口,今日页硬编码字重清零
- v4.78.6 · 图标尺寸归档三档 token,其他页面细节一轮过
- v4.78.5 · 修复主题门禁 C2 失效,去重三主题设置页色调撞色
- v4.78.4 · 修复深色档主题注入缺陷,三主题色板与字阶重塑
- v4.78.3 · 日程页课程卡片与今日页统一尺寸
- v4.78.2 · 三主题深色重点卡配色收口,去除卡片重复节数
- v4.78.1 · 日程页瘦身与课表卡片收敛,界面细节一轮过
- v4.78.0 · 新增「AI 图片导入」:复制固定提示词,用你自己的 AI 把课表图片变成可导入文本
- v4.77.4 · 导入成绩时也顺带导入学业情况(双向联动)
- v4.77.3 · 导入学业情况时顺带导入成绩,不再需要跑两遍
- v4.77.2 · 学业情况页的导入操作收进右上角菜单
- v4.77.1 · 壁纸自适应扩展到整页(顶栏、胶囊、表头、网格线)
- v4.77.0 · 侧边时间会看背景图脸色,自动换黑/白
- v4.76.23 · 成绩页空状态提示改为指明入口位置
- v4.76.22 · 成绩页的导入操作收进右上角菜单
- v4.76.21 · 学业情况页新增「查看成绩与绩点」入口
- v4.76.20 · 补考通过的课程正确判定为及格
- v4.76.19 · 成绩页的「培养方案完成度」入口改为常驻显示
- v4.76.18 · 导入后返回不再跳回教务页;成绩页与学业情况页互通
- v4.76.17 · 补考通过的课程不再被判定为不及格
- v4.76.16 · 学业情况:各类别已获学分不再显示为 0
- v4.76.15 · 南通大学学业情况:修好学分要求并补上培养方案课程清单
- v4.76.14 · 教务导入:撤掉会误伤正常校园流程的来源限制
- v4.76.13 · 修复南通大学课表导入必然超时
- v4.76.12 · 手指按在滑块上也能上下滚动页面
- v4.76.10 · 上下滑动不再误触发全屏预览
- v4.76.9 · 改为左右拖动时才进入全屏预览
- v4.76.8 · 滑块不再带着整页上下滑动
- v4.76.7 · 滑块按下后不再闪一下、滑块本身也能正常拖动
- v4.76.6 · 拖动滑块后能正常退出全屏预览
- v4.76.0 · 调滑块时全屏预览课表,只留当前这一个滑块
- v4.75.14 · 教务导入回退到 4.74 版行为(撤掉桥接来源门禁)
- v4.75.13 · 修复「点击执行导入后一直没有反应」
- v4.75.12 · 正方教务导入恢复可用(修复「适配脚本未在限定时间内启动」)
- v4.75.11 · 滑块与深蓝轨无缝衔接,滑到两端不探出也不留白
- v4.75.6 · 滑轨两端不再露白、刻度点不再挤成一片
- v4.75.5 · 滑块不再滑出滑轨
- v4.75.4 · 已在学业页时不再自己把自己点走
- v4.75.3 · 学业情况导入现在能自己找到那个页面
- v4.75.2 · 教务导入不再原地不动
- v4.75.1 · 绩点对齐学校口径,学业情况能算「还差哪几门课」
- v4.74.23 · 学期进度的百分号不再多出一个
- v4.74.22 · 重修成绩重新计入绩点,笔记配图不再「假保存」
- v4.74.21 · 提醒不再丢、通知不再赖着不走,导入不再少最后几周
- v4.74.20 · 恢复设置不再「一半新一半旧」,备份恢复顺序不再靠运气
- v4.74.19 · 云端备份不再半新半旧,恢复与自动同步不再互相踩
- v4.74.18 · 备份恢复不再悄悄丢空课表,回滚失败也不再被悄悄吞掉
- v4.74.17 · 从教务导入一次课表,你的作息方案不再被悄悄改掉
- v4.74.16 · 学校索引构建脚本不再「判定失败却已改坏产物」
- v4.74.15 · 教务导入页里的第三方内容不再能直接改你的课表
- v4.74.14 · 官网「检查更新」的版本源不再可能悄悄过期,官网发布也真正上线
- v4.74.13 · 官网不再自相矛盾:页面里写死的版本号与站点其它位置保持一致
- v4.74.12 · 适配脚本的线上更新更稳:不再可能写入半截脚本,也不再被一个坏文件卡死
- v4.74.11 · 导入课表时的提示语现在是你的语言,不再是固定的简体中文
- v4.74.10 · 课表导入更准确:长课程名不再被截断,日历文件不再丢字段
- v4.74.9 · 云备份下载不再「截断了还说成功」,长传输不再必然超时
- v4.74.8 · 云备份不再在临时目录留下明文副本,失败原因不再无迹可寻
- v4.74.7 · 适配网关更可靠的报错与更抗刷的限流
- v4.74.6 · 提交门禁更诚实:没跑就说没跑,不再让「未校验」冒充「通过」
- v4.74.5 · 强化教务适配脚本门禁:编码损坏不再被掩盖、注释不再误报
- v4.74.4 · 浅色主题次级文字对比度提升至无障碍标准
- v4.74.3 · 修复「检查更新」失效、统一夸克口令、补齐隐私披露
- v4.74.1 · 修复两处质量门禁的「假通过」
- v4.74.0 · 湖北医药学院成绩与绩点适配
- v4.73.0 · 成绩 / 空教室 / 学业可挂学校级适配 + 正方适配标准
- v4.72.0 · 教务系统合并 + 通用适配补齐「乘方」+ 地址可改
- v4.69.0 · 新增湖北医药学院教务适配
- v4.66.0 · 课表之外:成绩、考证、小组件与 AI 识别导入
- v4.64.25 · 插入课表不再静默清空该表全部课程
- v4.64.23 · 通知与导入链的一批实打实修复
- v4.64.5 · 弹窗按钮与图标按压也跟主题了
- v4.64.4 · 点击反馈不再闪出直角方块
- v4.64.3 · 修复湖北师范大学课表无法导入
- v4.64.2 · 修复湖北师范大学 ehall 登录报密码错误
- v4.64.1 · 不打开 App 切深浅,背景也跟上
- v4.64.0 · 新增学校:湖北师范大学
- v4.63.6 · 深浅切换小组件即时跟随
- v4.63.5 · Android 10:课表不再被系统导航栏遮住
- v4.63.4 · 升级后小组件即时刷新
- v4.63.2 · 桌面小组件配色:统一固定色板、可读性修复
- v4.63.0 · 课程编辑界面新增「只删本次」
- v4.62.0 · 课表内课程弹窗:先预览,再就地编辑
- v4.61.0 · 桌面小组件字号放大与排版收敛
- v4.60.0 · 全应用界面间距与布局统一接入主题 token
- v3.74.0 · 学期管理补齐「复制学期」+ 计数 / 折叠 / 标题行修复
- v3.73.0 · 课程提醒设置页改版 + 跳过日期可自行设定
- v3.72.3 · 通知子系统整体重写:每日早八闹钟、按课次稳定排程、可测试化
- v3.71.2 · 体积专项二:Release APK 再减 458 KB,安装包累计下降 8.8%
- v3.71.0 · 体积与性能专项:APK 瘦身约 542 KB,解析提速
- v3.70.5 · 全局 UI/交互视觉优化
- v3.70.1 · 导入提示不再重复、不再互相顶掉
- v3.70.0 · 教务适配的可观测性与弹窗接管
- v3.69.6 · WebView 响应体内存防护
- v3.69.5 · 日志治理、桌面端密钥口令与小组件去重
- v3.69.4 · 时间解析逻辑收敛
- v3.69.3 · 稳定性、权限引导与安全加固
- v3.69.2 · 无障碍语义补齐 + 稳定性与安全修复
- v3.69.1 · 主题系统收口完工
- v3.68.1 · 修复青岛理工大学课表周次解析
- v3.68.0 · 新增河南科技学院、南开大学研究生课表导入
- v3.67.0 · 新增大连理工大学课表导入
- v3.66.5 · 桌面小组件可读性修复
- v3.66.4 · 桌面小组件全量优化
- v3.66.2 · 界面细节修复与瘦身
- v3.66.0 · WebDAV 自动同步
- v3.65.8 · 课表表头与小组件字号优化
- v3.65.6 · 桌面小组件显示优化
- v3.65.4 · 修复添加课表背景后课程色彩块变透明
- v3.65.2 · 课程实例卡片接入不透明度
- v3.65.1 · 统一课程块取色链路
- v3.65.0 · 新增学校适配:广西生态工程职业技术学院
- v3.64.8 · 全库审计修复批次(二):数据安全 / 教务适配 / UI 正确性
- v3.64.7 · 全库审计后修复批次(数据安全 / 发布安全 / 教务适配)
- v3.64.4 · 湖北职业技术学院教务内容区乱码根治(协议归一)
- v3.64.2 · 湖北职业技术学院教务入口统一为 https
- v3.63.1 · 湖北职业技术学院入口改为统一认证(CAS)
- v3.63.0 · 湖北职业技术学院适配完全重开发(参照汕头大学架构)
- v3.62.0 · 湖北职业技术学院适配重做(新入口 jwc.hbvtc.edu.cn)
- v3.61.3 · 湖北职院登录后教务显示优化
- v3.61.2 · 太原师范学院教务入口更新
- v3.61.1 · 湖北职院登录页中文乱码修复
- v3.61.0 · 新增广州番禺职业技术学院适配
- v3.60.0 · 新增湖北职业技术学院适配
- v3.59.1 · 南昌大学入口调整与适配网关上线
- v3.59.0 · 教务适配增强与主题精简
- v3.57.5 · 课程备注可多行编辑
- v3.57.4 · 课程详情弹窗观感修复
- v3.57.3 · 课程详情弹窗样式统一
- v3.57.2 · 添加自定义课程保存闪退修复
- v3.57.1 · 灵动岛重复弹出修复
- v3.57.0 · 自动同步教务系统按钮
- v3.56.7 · 我的信息持久化修复
- v3.56.6 · 适配更新服务切换自建域名(大陆可直连)
- v3.56.5 · 今日待办恢复显示 + 通知图标修复
- v3.56.4 · 分段控件点击反馈修正
- v3.56.3 · 图标比例修正
- v3.56.0 · 玻璃渲染缓存 + 屏幕刷新率设置
- v3.55.0 · 每个 Tab 独立导航栈
- v3.54.0 · 全库体检五批次优化
- v3.53.0 · 时段顺延 + 每日自愈 + 学期管理重写
- v3.52.0 · 情侣课表独立化
- v3.51.2 · 根治课表切周闪退与卡顿
- v3.51.0 · 日程页与今日课表联动
桌面小组件
- 「今日课程」与「周课程」课程多时可滑动:两个列表组件此前按桌面高度算出可容纳条数(上限 12 行),超出的课程直接截断不可见;现在列表容器改为可滚动列表,全部课程交给后台数据源按需渲染,组件内上下滑动即可看到当天/本周的每一节课。头部的「还有 N 节课」计数不变,点击组件仍直达对应页面。
- 空态、假期、无课等状态显示与此前一致;单行课程不引入列表机制,行为与外观不变。
构建
- versionCode 578,versionName 4.83.0;支持 arm64-v8a、armeabi-v7a、x86_64 三种 ABI。
桌面小组件
- 修复「闹钟和提醒」权限变更后跨天翻页失效:撤销该权限时系统会静默取消全部精确闹钟,其中包含小组件每天 00:00:20 的跨天翻页锚点;此前重排只补回课程边界闹钟,锚点不再重挂,导致零点后桌面停留在昨天的课表、只能等不定时的兜底刷新。现在锚点重挂并入统一重排流程,任何触发重排的场景(打开应用、课表变更、时间/时区变更、权限恢复等)都会自动补回。
构建
- versionCode 577,versionName 4.82.3;支持 arm64-v8a、armeabi-v7a、x86_64 三种 ABI。
修复修复同步到系统日历失败
- 修正旧版日历账户的迁移方式,保留已有日历和事件;避免同一时间的手工事件被误删或影响课程同步。
修复优化桌面小组件刷新
- 修复长课程结束或两节课程间隔较长时,部分课程刷新时刻被误删的问题,使组件能够在课程状态变化时及时更新。
- 修复湖北师范大学课表导入:兼容教务页面对数组方法的修改,避免课程被误过滤或导入时出现周次解析错误。
保存与草稿保护作息保存后仍提示未保存
- 修复自定义作息方案中节次草稿与保存基线的方案标识不一致;保存成功后回填统一快照,真实的新修改继续保留退出保护。
- 切换方案不再直接丢稿:返回、切换、新建和删除当前作息方案前,统一提供「保存后继续 / 放弃修改 / 继续编辑」;保存失败时保留草稿并停留原操作。
- 区分应用与保存:节次弹窗的「保存更改」改为「应用到列表」,页面持续提示待保存状态;顶部保存成功才提示已写入数据库。
- 课程保存防重复与部分提交:整门课的方案增删、课程内容与周次在同一事务中提交;保存入口防重入,成功后回填方案持久化 ID 和比较基线,失败时完整回滚并保留草稿。
- 保存期间的新修改不会丢失:课程与作息保存只提交点击时的快照;有新修改时保留编辑页面并提示仍待保存。
- 课堂笔记保护:保存中禁用重复提交,失败后可重试;正文、日期或图片有修改时,关闭编辑器需要确认放弃,图片处理期间暂缓保存,避免漏存附件。
- 方案设置写入失败保留编辑器:作息日期范围保存成功后才关闭弹窗;方案切换与其他设置写入共用在途保护,避免交叉覆盖。
界面与交互大字号下更易读
- 分段选择器允许标签换行并统一高度,页面标题与设置标题支持两行;设置行空间不足时,将当前值移到标题下方,减少标题和取值互相挤压。
- 开关整行可点:「我的」页的「显示非本周课程」「显示周末」支持点击文字或开关切换,辅助功能统一播报名称与开关状态,避免重复触发。
- 选择状态更明确:通用单选行补齐单选角色与已选状态;颜色选择补齐编号名称和单选分组,支持简体中文、繁体中文与英文。
- 辅助操作更好点:今日页「查看全部」等辅助按钮的点击区域至少 48dp,保留轻量外观;页面与分区标题支持辅助功能按标题导航。
- 布局方向一致:分段选中胶囊按实际布局方向定位,修复 RTL 下选中背景与选项错位的问题。
修复「另存为新课表」导入后不生效
- 新建的课表不会被设为当前课表,而导入成功后判断的是「当前课表」有没有开学日期 —— 于是新表永远停在未配置状态,用户去设置开学日期写的也是旧表,回去看到的还是原来那张课表,观感等同按钮失灵。现在导入完成会切换到刚导入的那张课表,再按需引导设置开学日期。
- 新课表名称输入框默认空白:粘贴来源没有文件名可用,输入框是空的,直接点「导入为新课表」只会弹一句「请输入课表名称」。现在默认填入「导入的课表」,留空也会自动使用该名称。
外观状态提示
- 空状态与错误提示统一为图标、文字和操作按钮组成的完整卡片,沿用通透、柔绘、书卷各自的材质和深浅配色。
- 分段选择器:扩大选项触控区域,统一文字留白,并补齐选中状态的无障碍语义。
- 设置列表:优化标题与说明之间的间距,限制右侧长取值的宽度并省略显示,避免长课表名挤掉功能标题。
修复系统日历账户图标
- 补齐本应用专属日历账户的图标关联,账户大小图标与桌面应用共用图标资源;日历标识颜色继续按原有白名单规则维护。
- 旧日历升级:同步时原位迁移本应用创建的旧本地日历,保留日历 ID、课程、手工事件、提醒及用户自定义设置;迁移失败时保留已有数据,不另建重复日历。
- 日历同步:继续通过应用内原有入口手动写入课表,账户登记不启用系统自动同步。
适配芜湖职业技术大学
- 新增融合门户课表导入,登录后按学期读取课程、周次、节次与教室,并同步学期起始日和学校作息;过滤个人日程与节假日。
适配湖北师范大学
- 优先读取带周次的整学期课表,避免页面缺周次导致当前版本拒绝导入;兼容同源内嵌页面,补全请求超时、登录失效与保存失败处理,保存成功后完成导入。
修复多平台工程配置
- 修复自定义 Android/JVM 共享源集导致 iOS 默认源集未接入目标的问题,保持平台实现分离。
重构仓库结构与维护流程
- 统一目录、代码放置与产物命名约定;静态检查采用统一入口,按实际改动选择检查,减少重复读取与无效验证。
- 桌面预览工具:将主题预览和诊断工具移入独立源集,正式桌面 JAR 不再包含这些工具;统一桌面产品名称,保留既有预览命令兼容入口。
- Windows 启动脚本:使用有效的 JAVA_HOME 或 Android Studio 自带 JBR,取消固定机器路径,支持参数透传。
修复WebDAV 备份与恢复
- 修复恢复时重复持锁导致卡住的问题;上传采用独立快照并在全部模块成功后一次提交,避免新旧数据混合。远端文件替换失败时保留已有备份。
- 课堂笔记与图片:重新导入课程时保留课程身份与关联笔记;备份包含笔记图片,恢复时写入当前设备目录。图片写入失败会中止保存并清理本次临时文件,文件读取、删除限制在笔记目录内。
- 作息方案与课表:切换、编辑不同作息方案时保持节次编号,避免课程被错误重编号;已被课程使用的节次不能删除,课表布局、高亮与拖动正确处理编号空隙。
- 成绩编辑:修改分数且未提供新绩点时清除过时绩点;仅调整数字格式时保留已有绩点。
- 课程导入与假期:修复 CSV 周次列与星期列混淆、大连海事大学多课程教师字段解析,以及假期接口地址不完整的问题。
- 后台同步与提醒:日程、考试变更及时刷新通知和小组件;成绩、笔记、培养方案等数据变更可触发自动备份。
- 适配脚本更新:原子替换失败时保留原有脚本,避免更新失败后丢失适配器。
修复同步到系统日历后,那条「上课」日历的图标/颜色仍是旧的
- 系统日历里这条日历是本应用的本地日历(
ACCOUNT_TYPE_LOCAL,没有账号认证器),系统不会给它画 App 图标——它在系统日历列表中的唯一视觉标识就是那个色块(Calendars.CALENDAR_COLOR)。此前这个颜色只在日历首次创建时写一次,换过品牌色之后老用户那条日历永不刷新,因此一直显示创建时的旧色(与品牌无关的 Google 蓝#4285F4);而且重装应用也不会自愈——日历行活在系统数据库里,不属于应用数据。现在每次同步都会检查一次,把我方历史版本写下的旧色迁移到当前品牌色(#73CAF8,即应用图标底色)。 - 应用商店图标仍是旧图:
ic_launcher-playstore.png自项目初始提交起从未更新,一直是换图标之前的旧图(举书男孩),与手机桌面图标 / 应用内设置页图标 / iOS 图标 / 官网图标四处早已换成的新图不一致。本版已用同一套美术重新生成 512×512。
v4.78.122026-10-14
外观今日课程卡同页严格等高
- 此前 v4.78.8 只做了「固定槽位」,标题换行、空字段的字体缩放与像素取整仍会让同屏四张卡高度不同(1.5 倍字号实测 129 / 175 / 145 / 145 px)。本次把标题、两行副信息、事实行的行盒统一由主题字体实测测量得出,再逐项取整相加得到卡片总高——高度不再随课程内容、系统字号或主题字体变化。
- 官网字体与图片改用现代格式,首屏传输体积约减半:四个西文字体新增 WOFF2 主源(TTF 保留兜底,同族同字重,浏览器只下载支持的那一份),20 张截图新增 WebP(quality 82)并以
升级 37 处图片引用、保留原图回退,同时补decoding="async"。实测用户下载 2286 KB → 1095 KB(-52.1%)。
修复教务适配「双落点」不一致(NTU)
- 主仓库的
NTU/ntu.js在 v4.77.4 改过(成绩取「补考 / 最大成绩」、培养方案分类正则放宽)却未同步到私有适配仓库,App 启动时的 OTA 热更新会用线上旧版覆盖包内新脚本——症状是「原有功能正常、本次新增能力失效」。本版已把主仓脚本同步至.adapter_private、重建index.json并推送,线上adapter.shangke.asia远端 sha256 与本地逐字节一致,正文含新特征串。
v4.78.112026-10-13
修复
AdapterScanWatchdogTest「超时后必须退出运行态」长期失败(自7391d76起存在,历轮均记为「既存缺陷、待单独排期」)。根因是测试自身的固定字符窗口而非实现缺陷:该用例用screenSrc.substringAfter("onAdapterScanTimeoutState").take(600)取代码块再断言含studyScanRunning = false,而 v4.77.4 在onAdapterScanTimeoutState里为「成绩带出学业」「学业带出成绩」补了收尾分支与大段注释后,STUDY 分支的复位语句被推出 600 字符窗口 ⇒ 实现正确、测试假红。- 结果:
:shared:testAndroidHostTest全量通过(此前 342 例 1 失败)。
v4.78.102026-10-13
外观
- 组件层硬编码字重彻底归零(设计规范 R9 收尾):新增
AppTypeTokens.emphasisWeight角色(三主题显式赋值Bold,遵循 R2「每个 token 必须由每套主题显式给出」),并把剩余 58 处FontWeight.Bold与 6 处FontWeight.Normal一并改为 token 读取(emphasisWeight/bodyWeight)。至此ui/(排除ui/theme/)再无任何FontWeight字面量,全部经appType()语义角色供给。 - 零回归证据:三主题今日页离屏渲染与改动前逐字节一致(
emphasisWeight = Bold、bodyWeight = Normal与原硬编码同值,属恒等迁移)。
修复发版工具 `tools/update_website.py` 兜底同步失效**(每次发版都会踩的缺陷):该脚本第 4 步同步 `website/*.html` 的「兜底文本」(`data-version` / `data-version-code` / `data-asset-name`),但它跑在 `changelog.html` 写盘**之前** —— 刚同步好的兜底文本随即被第 5 步的 `write_text(new_html)` 整篇覆盖,脚本自报「待同步 N 处」却实际未生效,紧接着 `check_version_sync.py` 报同样几处 FAIL。现把该步**移到所有写盘之后**,并新增**写盘后复核
- 再跑一次
--check,非 0 即显式exit 1,不静默放行。 - 清理 5 处重复 import(
StyleComponents.kt2 处、DeveloperAndIconComponents.kt2 处、CourseNameListScreen.kt1 处)—— 属既存瑕疵(HEAD 版即存在),全仓重复 import 现为 0。
v4.78.92026-10-13
外观组件层硬编码字重收口完成**(设计规范 R9:组件层不得硬编码 `FontWeight`,须读 `appType()` 语义角色)。本轮把剩余 **16 处 `FontWeight.SemiBold` 与 18 处 `FontWeight.Medium`** 全部改为 `appType().titleWeight` / `appType().captionWeight`,涉及 **18 个文件
- 收口后的组件层字重现状:
SemiBold与Medium均为 0 处;仅剩FontWeight.Bold58 处与FontWeight.Normal6 处。两者按设计保留: - 条件式同步改为角色对:
if (isSelected) Bold else Medium一类写法中的Medium分支改读captionWeight,保留选中态语义(Bold分支不动)。 - 三主题身份一致生效:通透 / 书卷
titleWeight = SemiBold(与迁移前同值,视觉零变化),柔绘titleWeight = Medium(其「轻字重」身份)。
v4.78.82026-10-13
修复同一页内课程卡片高低参差
- 今日页时间轴卡此前按数据有无条件渲染副行——课程无地点则地点行消失、无教师则教师行消失,导致同一屏内「字段齐全的卡」比「缺字段的卡」高一整行,列表参差不齐。现改为固定槽位(新增
TodayMetaSlot):槽位恒定占位,无数据时留同高空白(不画图标、不写字),使同页每张卡高度一致。 - 日程页同类问题:日程条目的「分类 · 地点 · 教师」行与备注行同为条件渲染,无内容即整行消失。现两个副行槽位恒定占位,同页卡片等高。
- 卡片圆角「巧合式一致」:今日页非 hero 分支硬编码
RoundedCornerShape(20.dp),恰好等于书卷heroCard = 20dp而看似一致——属巧合:若将来调整书卷圆角,今日页不会跟随,两页卡片大小即静默分裂。现统一读appShapes().heroCard,使一致性成为结构性保证(三主题实测等值:通透 22 / 柔绘 28 / 书卷 20)。
外观
- 字重收口扩展至三个高频页面(设计规范 R9:组件层不得硬编码
FontWeight):
v4.78.72026-10-13
外观
- 今日页字重全部改由主题 token 供给(设计规范 R9:组件层不得硬编码
FontWeight,须读appType().titleWeight/bodyWeight/captionWeight)。今日页原散落 28 处硬编码字重(27 处SemiBold/Medium,另有 3 处Bold为强调位保留),现按语义收口: - 三主题身份由此真正生效:通透 / 书卷
titleWeight = SemiBold(视觉零变化),柔绘titleWeight = Medium—— 柔绘「轻字重」的既定身份此前被硬编码SemiBold抹平,现回到该主题自己的字重语言。
v4.78.62026-10-13
外观
- 图标尺寸统一到三档 token(设计规范 R9:图标尺寸仅 16 / 20 / 24dp 三档,与 48dp 命中区解耦)。此前散落在各页的 19 处非标尺寸(18dp / 22dp)逐处归档为
appIconSize().small/.medium,涉及页面: - 保留 4 处非图标控件尺寸不改(
22dp的 Radio / Checkbox 控件、18dp的课程色点、22dp的头像圆形徽章)——R9 约束的是图标,控件与装饰几何尺寸不受此限。
v4.78.52026-10-13
修复主题泄漏门禁 C2 检测器失效(空集假绿)
scripts/check_theme_leak.py的 C2「色调映射单射性」检测器,其正则仍按旧代码形态匹配fun SettingsEntryTone.toClaudeTone(): ClaudeCellTone = when (this) { … },而该代码早已重构为「按主题取色对」形态fun claudeSettingsToneColors(tone: SettingsEntryTone): SettingsToneColors { … }。正则恒不命中 ⇒ 映射函数集合为空 ⇒c2_collapse恒为 0,报告表格空白却计入「硬指标违规合计」并显示 0。门禁输出与「真扫干净」逐字节相同,把「根本没比」报成「全部一致」。现按真实形态重写检测器(花括号配对取函数体、逐when (tone)分档、档位由isDark判定、映射右侧整段表达式归一化并剥离行尾注释),并消除脚本内一处SyntaxWarning。- 三主题设置页色调撞色 4 处(R3 单射性,同一主题档内两个语义角色映射到同一外观 ⇒ 入口身份信息丢失,此前被上述空集掩盖):
外观
- 去重后三主题 × 深浅档共 6 组均为 10 个角色 / 10 种外观(原通透 8、柔绘 9)。
- 去重后可区分性(CIEDE2000 ΔE):通透浅色最小 10.3、深色 11.0(
RED/PINK),达「明显可区分」;柔绘最紧为ORANGE/BROWN6.7 / 5.3(原有分布,非本次引入)。 - 柔绘新「苔绿 MOSS」档图标色 / 自身薄涂底实测 2.52(浅)/ 4.56(深),与原 SAGE 的 2.23 / 4.66 基本持平。
v4.78.42026-10-13
修复深色模式下「同一屏深浅分裂」
- 核心主题实现
ShangKeScheduleTheme(darkTheme, themeMode, themePreset, content)提供了 20 余个 CompositionLocal,唯独漏注入LocalIsDarkTheme——该事实此前只由外层 settings 重载注入,掩盖了缺口。凡绕过 settings 重载直接调用核心重载的调用方,一律读到默认值false,于是深色档下「页面底 / 课程卡(读 token)已是深色,而读LocalIsDarkTheme的今日页『下一节课』卡仍走浅色分支」。现由核心重载自证深浅档事实。该缺陷同时导致此前所有深色档离屏预览截图实际渲染的是浅色(同一主题的*_night与*_light产物逐字节相同),深色档视觉回归长期失真。 - 书卷深色档「下一节课」卡色调跳脱:渐变原为冷蓝紫
#3A2F5C → #2E2749,在书卷深色暖炭页面底(#262624)上像从别的主题借来。现收为暖炭紫#3A2C4E → #2B2338,紫色身份保留、与页面同族;卡上圆点由浅色档色值改为深色 token 主色(原值在该渐变上仅 2.89:1,不达图标级 3:1)。
外观三主题色板对比度收口
- 通透浅色绿
#248A3D → #217A38(3.97 → 4.86)、橙#C66900 → #A85A00(3.51 → 4.61);柔绘浅色危险色#B45353 → #AD5050(4.25 → 4.67);书卷浅色图表紫、琥珀色与深色档品牌色 / 图表色 / 错误色逐项校准。全部按 WCAG 2.2 AA(正文 ≥ 4.5:1)实测达标。 - 柔绘浅色身份提纯:页面底、卡片底、抬起层与输入底四档重新取值,页面与卡片间形成可辨的「暖雾」层次,与通透的系统灰拉开身份差异。
- 同心圆角规则:新增
AppShapeTokens.heroCardInner,按「外圆角 − 内边距」折算(通透 8dp / 柔绘 14dp / 书卷 6dp),保证 hero 卡内嵌元素的嵌套圆角视觉同心。 - 时间数字等宽:新增
AppTypeTokens.timeFeature(三主题统一tnum),今日页时间轴时刻与卡片时间徽标在位数变化(8:00 → 10:00)时不再引起宽度跳变。
v4.78.32026-10-13
外观两页时间轴卡片尺寸不一致
- 今日页与日程页的课程条目卡此前各用一套尺寸 —— 圆角(22/28/20 vs 16/24/16)、内边距(14/14/14/12 vs 10/8)、标题(16sp SemiBold vs 15sp Bold)、元信息(12sp vs 13sp)、时间轴列宽(16dp vs 26dp)。后者使日程页卡片可用宽度比今日页窄 10dp、左右边缘对不齐、切页时卡片观感「跳一下」。现以今日页(首页)为准统一:圆角一并走
heroCard、内边距 14/14/14/12、标题 16sp SemiBold、元信息 12sp、时间轴列宽 16dp,两页卡片同高同宽、边缘对齐。 - 日程页时间列时间文本同步为今日页字阶(13sp SemiBold / 17sp 行高;结束时间 12sp)。
v4.78.22026-10-13
修复深色模式下「下节课卡」三主题串色
- 该卡此前在深色档硬编码一组书卷紫(标题
#EBE5FF/ 渐变#3A2F5C → #2E2749/ 描边#9C87F5),与所选主题无关 ⇒ 通透、柔绘、书卷在深色模式下共用同一张紫色卡,主题身份色在该卡上完全丢失。现提升为TodayCardStyle.nextCardDarktoken 角色,由各主题显式提供:通透回到系统蓝#0A84FF、柔绘保留雾蓝紫#9AA3DC、书卷维持原暖紫观感。 - 课程时间轴卡重复展示节数:卡面右上角徽章已给出节数,底部事实行又印了一遍「学时」。同一信息出现两次,属冗余信息噪音。底部改为展示学分(课程无学分时该行自动隐藏,不占位)。
外观
- 深色档下节课卡配色改由主题 token 供给,卡上文字与卡片实际渐变底逐级合成后实测,三主题正文对比度全部 ≥ 4.5:1(WCAG 2.2 AA)。
v4.78.12026-10-12
修复明日区标题显示的日期不对
- 三个主题的「明天 M 月 d 日」此前取的都是今天的日期,等于把今天的日期标在明日课表上。现在改取
today + 1 天的独立字段,标题与内容对得上。 - 学业进度条 0% 时右端多一个实心圆点:Material3 的 stop indicator 是无条件下笔绘制的,进度为 0 时轨道右端仍会画出一个主色圆点,容易被误读成「已满格」。现在把它染成与轨道同色,0% 时即不可见。
- 课程详情弹窗「课堂笔记」入口行图标贴边:该行是全库唯一不放在
SectionCard内的SettingItem,拿不到卡片统一提供的横向内边距,44dp 图标 chip 直接顶到卡片左边框、被圆角与描边切到。现为该调用点补上与上方各行一致的 16dp 内边距(组件新增可选参数,其余 115 处调用点行为不变)。
外观日程页头部瘦身
- 页面标题与月份/翻月控件并入同一行,压缩日期栏、农历行与把手高度,减少固定头部占用的纵向空间。
- 课程卡收敛:时间轴课程条改为「课程 · 地点 · 教师」单行元信息,收敛卡片内边距、标题字号与条目间距。
- 空态/错误态状态卡改为整宽并强制居中,底色与描边收敛到语义色 token。
- 底部导航选中态识别度提升:LiquidGlass 底栏补上选中态主题强调色文字,未选中态用柔和二级文字。
- 深色模式可读性:课程条填充透明度 0.38 → 0.44,地点/教师元信息透明度 0.82 → 0.88。
v4.78.02026-10-12
v4.77.42026-10-10
v4.77.32026-10-10
v4.77.22026-10-10
v4.77.12026-10-10
修复
- 上一版只让侧边时间跟随背景图明暗,其余浅色元素仍固定跟主题,于是壁纸上出现「一半跟上了、一半没跟上」:
- 现在整页统一:深色图配白字、浅色图配黑字,覆盖顶栏标题与图标、周次胶囊、年份与周次、日期表头(含今天列)、侧边时间(含当前节次)、网格线、列表视图表头。
- 周次胶囊底色改为跟随文字色反向:白字配半透明黑底、黑字配半透明白底,保证任何壁纸上都有对比。
- 「今天」与「当前节次」的高亮改由淡底 + 字重承担,颜色不再承担区分职责(否则会与自适应文字色冲突)。
v4.77.02026-10-10
v4.76.232026-10-10
v4.76.222026-10-10
v4.76.212026-10-10
v4.76.202026-10-10
v4.76.192026-10-10
v4.76.182026-10-10
修复
- 成绩 / 学业导入成功后,按返回键不再又跳回教务页面。 此前只有课表导入在成功后会把教务页从返回栈里摘掉,成绩识别与学业导入漏了这一步——页面虽然已经跳到成绩/学业页,但教务页仍留在栈上,返回时又回到那个"已经导完"的网页(WebView 还连带保活整页网页与 JS 上下文)。现已统一,三种导入(课表 / 成绩 / 学业)成功后都会正常摘页;成绩识别在钩子不可用时走的"通用回落"路径也一并补上。
v4.76.172026-10-10
v4.76.162026-10-10
v4.76.152026-10-10
修复
- 培养方案共多少门、已修多少门、未修多少门(并列出未修课程名)
- 每门课建议在哪一学年 / 学期修读
v4.76.142026-10-09
修复
- 南通大学等大批学校导入课表时提示「导入无响应:适配脚本未在限定时间内启动」,现已修复。
- 点「执行导入」后一直停在「正在执行导入脚本…」,既不出结果也没有任何提示。
- 周次信息缺失的课程不再入库。 此前这类课程会被写进课表,但因拿不到周次而任何一周都不显示(提示「导入成功 N 门课」,课表上却找不到)。现在改为跳过并如实告知跳过了几门;落库侧也加了同样保护。
v4.76.132026-10-09
v4.76.122026-10-09
v4.76.102026-10-09
v4.76.92026-10-09
v4.76.82026-10-09
v4.76.72026-10-09
修复
- 毛玻璃底衬此前写成「聚焦时用卡片组件、否则用普通容器」的二选一,按下瞬间在两种组件之间切换,整条滑块被销毁重建,手势随之取消;
- 页面滚动此前会在预览态被关闭,这个开关同样在按下瞬间翻转,重建了滚动容器的手势节点。
v4.76.62026-10-09
修复
- 拖动滑块松手后不再卡在全屏预览。此前只有"按住不动再松开"能正常退出,一旦真正拖动就退不出、也无法再次调节。原因是退出所依赖的滑块结束回调只在点击路径下触发,拖动路径下不触发;现在改为由手势监听负责退出——它在点击与拖动两条路径下都能可靠捕获;结束回调仅保留为冗余,两路都只会复位状态,互不影响。
v4.76.02026-10-09
功能
- 拖动滑块时,课表预览直接铺满整屏。在「自定义课表页」按住任意一个滑块(节次高度 / 时间列宽 / 日期头高 / 文字缩放比例 / 圆角半径 / 内部填充 / 外部间距 / 不透明度),页面会立刻切换成整屏的真实课表,样式改动所见即所得,不用再盯着顶部那条窄预览去猜效果。
- 同一时刻只保留当前这一个滑块,其余滑块与设置项全部淡出,屏幕只剩下「全屏课表 + 你正在调的那一个滑块」,注意力不被干扰。
- 松手即恢复:抬起手指后自动回到原样——顶部小窗预览回来、全部设置项回来。
- 淡入淡出动效沿用项目既有的动效令牌(与预览卡缩放同一套时长 / 缓动),不额外引入魔法数字。
v4.75.142026-10-09
修复教务导入恢复到 4.74 版(v4.74.1)的行为
- 撤掉 v4.74.15 引入的「桥接来源门禁」。
- 周次信息缺失的课程不再入库(正方 / 湖北工程学院适配脚本)。此前这类课程的周次为空数组,
v4.75.132026-10-09
修复
- 点「执行导入」后一直停在「正在执行导入脚本...」,既不出结果也没有任何提示。原因是导入的「无响应兜底」写错了语义:它本应是空闲超时(多久没消息就报错),却被实现成「收到任意一条消息就永久取消」。而绝大多数学校适配脚本在页面加载时就会先发一条与导入无关的提示(正方教务实测为「检测到正方教务系统,点击导入按钮抓取课表」),这一条就把兜底永久废掉了。此后如果页面里的课表表格解析不出课程、程序转而去调教务接口,而接口又卡住不返回(登录过期、校外 WebVPN 挂起、接口本身慢),就再也没有任何消息、也没有任何超时,界面只能永远转下去。
v4.75.122026-10-09
修复
- 部分学校(含正方教务在内的大批学校)导入课表时提示「导入无响应:适配脚本未在限定时间内启动」,其实脚本已经跑起来了。原因是上一版为导入页加了「只允许本校页面调用」的来源校验:它只比对索引里登记的那个入口地址,而这些学校登记的入口是统一认证 / 门户地址,登录后会被服务端跳到另一个域名的教务系统 —— 于是 App 把自己学校的正常回传整条丢掉了,脚本明明成功解析出课程,却一条都送不进来,30 秒后弹出上面那句提示,让人误以为是「没登录 / 没打开课表页」。
- 导入被拦时不再只有一句含糊的超时提示。此前被拦只在系统日志里留一行,用户侧毫无线索。现在会明确告知「教务页面已加载,但本机没有收到脚本回传」,并给出可执行处置:用「⋯ → 使用当前地址」把地址栏改成你登录后实际所在的教务地址再重试;若仍失败,请反馈学校名。
v4.75.112026-10-09
修复
- 滑块与深蓝已选段之间的残留空隙彻底消除。此前 v4.75.5~v4.75.10 反复调整几何坐标,连续多版出现「已选段止于滑块左缘、露出底色」的缝隙。最终改为:滑块、轨道、已选段三者由同一个纯函数算出坐标并自绘,深蓝段的右端圆角与滑块右半圆完全重合,视觉上无缝。
- 滑到最左 / 最右时,滑块恰好贴齐轨道端点,既不探出也不留多余空轨道。
- 滑块与轨道严格等高。
- 适用于全部共用该组件的滑轨(外观与样式页的节次高度 / 侧边栏宽度 / 顶部表头高度 / 文字缩放比例 / 圆角半径 / 内部填充 / 外部间距 / 不透明度,以及玻璃模糊页)。
v4.75.62026-10-08
v4.75.52026-10-08
v4.75.42026-10-08
v4.75.32026-10-08
v4.75.22026-10-08
v4.75.12026-10-07
v4.74.232026-10-07
v4.74.222026-10-07
v4.74.212026-10-07
v4.74.202026-10-06
v4.74.192026-10-06
v4.74.182026-10-06
v4.74.172026-10-06
v4.74.162026-10-06
v4.74.152026-10-06
v4.74.142026-10-05
v4.74.132026-10-05
v4.74.122026-10-05
v4.74.112026-10-05
v4.74.102026-10-05
v4.74.92026-10-05
v4.74.82026-10-05
v4.74.72026-10-05
v4.74.62026-10-05
v4.74.52026-10-05
v4.74.42026-10-05
外观浅色主题次级文字对比度提升至无障碍标准
「通透」与「柔绘 / 书卷」两个主题的浅色档次级文字(说明文字、时间戳、字段提示等)此前对比度仅约 2.8~3.3:1,未达 WCAG 2.2 AA 要求的 4.5:1,浅色背景上偏淡、弱光环境下不易辨认。现统一加深至 5.2:1 以上。深色档次级文字亦微调至 4.6:1 以上。
主色(通透蓝)与其余配色保持不变:该色是「通透」主题刻意锁定的 Apple 系统色,且作为配色种子派生全站色板,改动会影响整体观感。影响范围为所有使用次级文字色的界面与小组件。
修复文档脱敏
对标分析文档中此前逐字记录了第三方 App 的明文密钥取值,现改为只保留「形态」描述(如「32 位十六进制」),分析结论与对照价值完整保留。
v4.74.32026-10-05
修复App「检查更新」长期失效
官网版本源长期停留在旧版本,且经过 60 多次版本迭代从未同步:版本号更高的用户永远收到「已是最新」,版本号更低的用户被提示去下载一个落后十余个版本的包。现已修正,并把该文件纳入版本一致性校验与提交前检查(此前三道防线都不覆盖它)。
修复夸克网盘口令不可用
同一个口令在官网页面与 App 内「复制分享口令」两处写法不同,至少一处粘贴后无法识别。现全站统一。
隐私补齐隐私披露
App 内隐私政策与官网隐私页此前均未提及「AI 识别导入」会把用户选中的课表截图或文字上传到用户自己填写的接口;亦未披露公开节假日数据接口、以及官网权限表漏列的 3 项已声明权限,并补充了系统级自动备份的范围说明。用户协议与两份隐私政策的版本口径同步更新。
工程多处发布流程与质量门禁修复
- 版本迭代脚本的
--help此前会真的重建索引并改写官网,现已修正。 - 「部署」此前被硬编码跳过,导致线上整站冻结;现改为可选并在失败时明确报错。
- 完整构建路径此前会因调用一个已废弃的打包脚本而必然中途失败,现已改用正确的构建任务。
- 若干质量检查此前「报了问题但不拦截提交」,现已改为真正可拦截。
- 提交前新增密钥内容扫描(只报告位置,不显示密钥原文)。
v4.74.12026-10-04
修复两处发布自检「什么都没检查却报通过」
本版 App 行为无任何变化:改动全部位于发布用的自检脚本,不涉及 App 代码、资源、数据库或学校适配。 之所以仍然发版,是因为这类脚本决定「发布前的绿灯是否可信」。
- 无障碍检查与字体缩放检查两道脚本,此前用「当前工作目录」去找源码(其余四道用脚本自身位置)。 一旦从非仓库目录运行(CI、其他工具链、在别处手工执行),二者会扫描到 0 个文件却仍然输出「通过」。
- 实测:字体缩放检查在该情况下报「横向溢出候选 0 处」(真实为 7 处),无障碍检查报「合计 0」而实际未读取任何文件 —— 两者退出码都是 0。
- 为什么这比报错更危险:字体缩放的候选计数被当作跨版本回归信号。 一旦空扫,计数变成 0,会被读成「候选减少了、改善了」,等于把门禁失效伪装成质量提升。
- 现改为用脚本自身位置定位,并加上「扫描到 0 个文件即判失败」的硬保护:会以非零码退出、 打印它实际查找的路径,明确写出「门禁未生效,不得视为通过」。报告里的文件路径也不再随运行目录漂移。
若你遇到的是具体功能问题,请反馈具体现象 —— 本版不会改变界面或功能表现。
v4.74.02026-10-04
功能湖北医药学院新增「成绩与绩点」适配
- 在该校教务系统登录后进入成绩页点「从教务导入」,即可一次取回全部学期成绩(含学分与真实学期),不必再靠内置通用脚本按表头猜列、逐条手改学期。
适配本校只声明成绩适配
- 该校教务系统内没有空教室模块;培养方案查询与学习计划模块虽在,但查询结果恒为空、取不到各类别要求学分。因此不做空教室与学业情况适配 —— 应用会明确提示「本校暂未适配」,而不是给出猜出来的数字。
- 成绩接口经登录会话确认存在并返回合法数据结构;本次未在真机端到端走查(如实标注,未做掩盖)。
v4.73.02026-10-04
功能成绩、空教室、学业情况三个功能,现在能按学校适配了
- 此前适配脚本只在「导入课表」时被执行,成绩和空教室只能靠应用内置的通用脚本按表头猜列 —— 学校层完全没有地方能表达「我们学校该怎么查」。现在适配脚本可以接管这三个功能,直接调用本校接口。
- 适配是可选的:没有适配的学校行为完全不变,成绩与空教室会自动回落到原有的通用识别。
功能成绩导入会带上真实学期与课程性质
- 以前成绩一律落在「未标注学期」,需要逐条手改。现在适配过的学校能取回真实学期(如 2025-2026-1)与课程性质(必修 / 选修 / 通识教育选修…),学业情况页据此分类统计学分。
功能学业情况页新增「从教务导入培养方案」
- 一键读取培养方案里各类别的应修学分,不必再逐个手填。学校培养方案里已有的类别以学校为准,其余保留你手工填写的设置。
适配正方教务适配标准落地,覆盖 1022 所学校
- 正方是站内最大的教务平台(索引中 1024 所学校)。本次以南通大学的实现作为基准件,并把三个功能的通用实现写进正方平台脚本 —— 其余 1022 所没有专用脚本的正方学校零改动即可用;学校有定制时,专用脚本优先于平台脚本。
- 新增南通大学成绩 / 空教室 / 学业情况适配:接口地址与字段均经真实登录会话实测取得,非按教务系统惯例推测。成绩按学期直接取回(含学分、绩点、课程性质);空教室按校区 + 楼栋 + 座位数直接查询,不必先自己在该校教务页查一遍。
修复正方学业情况解析在两处会失效
- 按「课程平台」字样识别类别 —— 该字样只在部分学校出现(如江苏科技大学全页没有这四个字),照此实现会在整类学校产出 0 条,用户点「读取培养方案」只会看到「未读取到」。
- 父行判定会让同一条要求被记录两次,总学分翻倍(实测南通大学 172 被算成 344)。
- 两处均已在两所真实学校上核对修复。已知局限(如实呈现):江苏科技大学「外语类」下英语 / 日语各 10 学分为二选一,页面未提供结构化表达,该类别的要求学分会被算成 20 而非 10,可在学业情况页手动修正。
v4.72.02026-10-04
功能研究生与本科教务系统合并为同一入口
- 学校列表的分类由「本科/专科 · 研究生 · 通用工具」三段改为「教务系统 · 通用工具」两段。合并后搜索一次即可覆盖两类学校 —— 此前在「本科/专科」下搜不到只提供研究生适配的学校,同一所学校也会按分类在列表里出现两次。
- 点进某所学校后,该校本科与研究生的适配器同页列出,由用户自行选择。
功能新增「乘方教务系统(通用)」适配
- 广州乘方科技教务此前已有 4 所学校各写了一份专用适配脚本(湖北医药学院、济宁医学院走老版;广州中医药大学、右江民族医学院走新版),却一直没有通用入口,其余使用乘方系统的学校无法按「输入教务网址即可导入」的通用方式使用。现已补齐,同时覆盖乘方的两条产品线(老版 Struts2 与新版 /new/)。
- 学校索引由 1791 所增至 1792 所,通用适配器由 7 类增至 8 类。
功能教务导入页的地址可自行修改
- 顶部地址栏的编辑按钮此前只在「通用平台入口」或开发者模式下可见,选具体学校后按钮直接消失 —— 而同一所学校常有校内直连、校外 WebVPN、统一认证等多个入口,索引只能记录其中一个。现所有教务导入页(课表 / 成绩 / 空教室)均可自行修正入口地址。
修复四个通用适配器会整门丢掉「多段周次」的课程
- URP、青果、金智、南软四个通用适配器的周次解析要求数字后紧跟「周」字,导致
2,4,8,10,12,14周上这类多段周次只识别出最后一段。这些课程因周次解析不出而被整门跳过,且没有任何报错。现已修复,涉及约 570 所学校。 - 教务导入页三处交互缺陷:进入地址编辑时预填的是网页当前地址(教务登录后常已被框架页接管,用户容易照着改坏地址),现改为预填学校注册地址并新增「使用当前地址」一键带入;取消编辑会静默清空已输入的内容;提交按钮未拦住只有协议头、没有主机名的地址。
v4.69.02026-10-03
功能新增湖北医药学院(湖医药,`jw.hbmu.edu.cn`)课表导入
- 在该校教务系统登录后选择学期,即可一次导入整学期课表,并同时写入本校作息(第 1–12 节)。
- 学期列表直接读取教务系统自己的学期下拉框,不再让用户手算学年学期。
修复该校原有适配脚本取错接口,导入必然一门课都拿不到
- 脚本请求的是另一个查询,实测恒返回 0 条记录。现改用教务系统自身课表页所用的接口,实测覆盖第 5–17 周、与教务官网课表逐项一致。
v4.66.02026-10-01
功能课表之外:成绩、考证、小组件与 AI 识别导入
- 成绩与绩点:新增成绩管理,按学期记录课程、学分与分数(支持百分制 / 等级 / 两级记分),自动累计加权绩点与已修学分,绩点制式可在 4.0 制 / 5.0 制之间切换;「我的」页「学习」分组直达。
- 学业情况:一屏看清已修学分、GPA 与学分要求完成度,学分要求可在页内自定义。
- 考证查分:四六级、计算机等级考试、教师资格、普通话四类考试内置官方查分入口,姓名 / 证件号 / 准考证号只存本机、不上传;专升本按省分流到 31 个省级考试院的官方入口(专升本由各省自主组织,全国没有统一查分站)。
- 桌面小组件:新增「下一节课」「考试倒计时」「周课程列表」「日程清单」四类,与既有的超小课程 / 紧凑课程 / 近日课程 / 垂直列表课表共 8 类,可自由摆放。
- 课表分享:把整张课表生成分享串或二维码,对方扫码、粘贴即可导入(含时间段配置)。
- 找共同空闲:把本人与情侣两张课表按周次合并,列出双方都没课、且不少于 30 分钟的空档,按天分组并可一键复制发给对方。
- 主题分享:把当前配色与课表外观生成
SKT1:分享串,对方粘贴即套用同样外观;只含外观,不含课程、账号与本机壁纸。 - 空教室查询:在内置浏览器里打开本校教务的空教室页,可直接读取本页识别到的空教室并一键复制,发给同学。
- 课堂笔记:按课次记录笔记与图片,笔记随课程删除自动清理。
- 提醒增强:新增「下一节课常驻通知」(在状态栏常驻显示下一节课与剩余分钟)与「考试倒计时提醒」(考试前 7 天内提醒最近的考试),两项可单独开关;提醒设置页会显示本机是否支持状态栏胶囊(需 Android 16 及以上;小米「超级岛」由系统自行呈现)。
- 教务适配更透明:新增「教务适配状态」页(纯本地数据)、适配申请入口、检查更新(只在点击时读一次官网清单,平时不联网)。
- 反馈与协议:意见与建议表单(可附诊断信息与本机日志截图)、隐私政策、用户协议三处齐备;「更多」页新增给项目点个 Star 的温和引导与社群入口(小红书主页)。
- 小组件排障:开发者模式内可查看已放置小组件数量与快照状态,一键重建数据或请求系统重绘,并给出常见原因指引。
- 选中文本导入:在任意应用里选中一段课表文字,用系统「上课」条目即可带入导入页,核对后导入。
- AI 识别导入(默认关闭):可把课表截图或文字交给你自己的 AI 接口(OpenAI 兼容)识别成文本,预览核对后再导入;不内置任何服务商,也不代管你的 Key。首次开启前会明示「上传什么、发给谁、不含什么」,接口地址 / 模型名 / Key 只存本机、不参与备份;关闭时不会发出任何请求。
- 入口重排:「我的」页按课表 / 课程 / 学习 / 偏好 / 关于重新分组,新功能按语义归位,新功能不再堆在「更多」页。
v4.64.252026-10-01
修复极端情况下「新增/插入课表」会连带删光该课表的全部课程、周次与作息
- 课表根表
course_tables的插入用的是INSERT OR REPLACE冲突策略,而 SQLite 的 REPLACE 语义是「先 DELETE 再 INSERT」。该表下挂着课程、周次、作息、作息方案、课表配置五类以ON DELETE CASCADE关联的子表,因此一旦主键撞上,删除会级联把整张课表的内容一并抹掉——不抛异常、不打日志、界面照常提示成功。现改为冲突即中止(ABORT):真出现冲突会显式抛错,由调用点所在事务回滚并上报,不再静默丢数据。 - 现有建表 / 导入 / 备份恢复路径全部是「先查再写新 ID」或「先清空再写入」,不依赖 REPLACE 的覆盖语义,正常流程行为完全不变。
- 主数据库结构与版本(13)未变更,升级无需迁移,无外观与交互变化。
v4.64.232026-10-01
修复「早八闹钟」在部分手机上永远写不进系统时钟
- 检测时钟应用用的是包可见性查询,而清单里没有声明对应查询入口,部分机型上恒返回「没有时钟应用」→ 永远走应用内降级。现在补上声明。
- 一次重排里上课与下课是两个不同动作,但取消时只按其中一个动作去匹配,导致上一次的「下课」闹钟残留,新排程中途把勿扰提前关掉、卡在静音态。
- 闹钟时刻在排程时已固化成绝对时间,此前没有任何监听,只能等下次开机或零点自愈才纠正,最多偏一整天。现在时间/时区变更后立即重排。
- 把「课前提醒 10 分钟」改成 30 分钟后,提醒要等到下次开机或再次打开 App 才生效;「关闭灵动岛」也不会立刻停。现在这 7 个通知/自动化开关改动后立即重排闹钟。
- 用户原本用「仅振动」,下课被强制切成正常铃声。现在记录进入前的铃声模式并在结束时还原。
- 适配脚本算出 0 个时间段时,导入会清空该课表的全部作息并报「成功」。现在空列表直接拒绝。
- 课程 ID 是全局唯一,同一份文件导进两张表会撞唯一约束,只弹出看不懂的数据库错误。现在自动换用新 ID,同一张表重复导入仍保持幂等。
1-16(单)这类写法在表格、网页、纯文本四条导入路径下未被识别为单周,课程被静默按全周入库、预览页看不出任何异常。四条路径现已统一。- 若小组件数据库被系统回收或清理,内容比对会认为「本来就该是空的」而永远跳过重建。现在引入快照版本戳,数据库一旦丢失、下一轮同步立即重建。
- 条数计算漏算了行间分隔线的高度,组件拉高后余量恰好归零,系统字体一放大末条就看不见(与此前 3.66 版的症状相同)。现已计入并补齐单测。
- 今明双列规格的空态文案不区分「今天没课」与「今天已结课」;长列表规格的星期在非中英文系统上显示中文;长列表规格的头部字号不随组件尺寸放大。
- 自动嗅探时只保留最后一条错误,用户看到的是与真实原因无关的「无法识别文本格式」。
- 教务页面原文的前 200 字符曾写入系统日志,适配脚本报错也会连同页面地址一起记录。现在都不再记录。
- 推送兜底脚本曾在输出里打印令牌前 4 位,现已移除。
v4.64.52026-10-01
修复弹窗按钮与图标按压也跟主题了
- 弹窗按钮、顶栏图标、开关仍是系统灰涟漪:上一版只统一了列表行与菜单项,M3 自带组件走另一套按压实现。现在它们也按三套主题同一口径反馈,全位置统一。
v4.64.42026-09-30
修复点击反馈不再闪出直角方块
- 点击闪出直角长方形、感觉生硬:通透 / 书卷的按压层是整块直角绘制,无圆角的行与格子一点就闪方块,快击时还会滞留。现在按圆角绘制(圆钮按圆形、长条按卡片同语言圆角),抬手即淡出,按压首尾更缓。
- 柔绘本就是圆形渐变,仅同步享受抬手即淡出。
v4.64.32026-09-30
修复湖北师范大学课表无法导入
- 点导入没反应 / 导入失败:真机账号验证登录与接口都正常,根因是适配器把课程数据编码了两次。现在只编码一次,复验 19 门课全部合法入库。
- 接口兜底更稳:多候选地址逐个尝试,失败提示带状态码与 VPN 指引;页面无文本时重读最多 3 次。
v4.64.22026-09-30
修复湖北师范大学 ehall 登录报密码错误
- 密码正确却报"用户名或密码错误":该认证页密码提交时才加密,App 的表单拦截抢先快照了加密前的值。现在含密码框的登录表单一律走原生提交,不再劫持;课表查询不受影响。
- "同步教务系统"报"文件校验未通过":私有适配清单漏登记 HBNU,已补(服务端侧,用户无需操作)。
- 导入引导补充:统一认证密码与今日校园 APP 一致。
v4.64.12026-09-29
修复不打开 App 切深浅,背景也跟上
- 不再「只有文字变、背景不变」:此前背景是推送时刻选死的,进程已死时没人推新的,背景冻在旧模式。现在背景记为单个夜色感知资源,桌面每次重放都按当前系统深浅实时解析,与文字同一趟跟新。
- 无外观与交互变化;App 内强制主题仍不影响小组件。
v4.64.02026-09-29
功能新增学校:湖北师范大学
- 湖北师范大学(HBNU)课表导入:经 ehall 网上办事大厅统一身份认证进入正方教务 V-9.0,自动抓取「个人课表查询」全部课程。
- 优先解析页面渲染的 12 节 × 7 天网格,DOM 无数据时自动走正方数据接口(从当前周往回累积整学期)。
- 兼容周次单双周(如「6-16周(双)」)、课程名【理论】/【调】后缀清理、教师职称括号清理、教学班/学分备注。
- 已用真实账号实测:2026-2027 第一学期 19 门课全部正确解析。
v4.63.62026-09-29
功能深浅切换小组件即时跟随
- 深浅切换即刷新:手机切换深色 / 白天模式后立即刷新全部桌面小组件,不再出现「只有字体变色、背景不变色」的错配。
- 背景显式跟随系统:卡片背景渲染时按系统深浅直接指定;App 内强制主题不影响小组件。
- 新系统免打扰:Android 16 及以上桌面会自行重建跟随,只在旧版本监听补推。
v4.63.52026-09-29
修复课表不再被系统导航栏遮住
- 课表末节被系统导航栏压住、且再也滚不上来:在课表里向下滑动时底部导航栏会自动隐藏,此前它把系统导航栏的高度也一起收走了。于是内容的可滚动下限直接伸到系统导航栏底下,最后一节课被盖住,而且因为已经没有留白可以再滚,那一节再也回不到眼前。现在只有导航栏自身那一块会随隐藏收缩,系统导航栏的高度恒定保留在内容下方。在 Android 10 上尤其明显:该版本多为三键导航,系统导航栏是一条 48dp 的实心栏。
- 系统手势区被漏算:底部安全区此前只读系统的导航栏 inset;手势导航机型底部手势区由另一个来源上报,部分机型上会少报甚至报 0。现改为以导航栏 inset 为主、仅在它报 0 时才用手势区兜底。
- Android 10 的系统栏保护色:Android 10 在导航栏色为透明时会强制画一层保护性遮罩,正压在悬浮玻璃底栏的下缘;已在 Android 10 及以上关闭。
- 宽屏侧边栏布局、隐藏底部导航栏的形态(拖出课程时)此前底部留白恒为 0,同样会被系统导航栏压住;现在都会正常让开,课程挂起条也会抬到系统导航栏之上。
外观底栏贴住系统导航栏
- 底部导航栏与系统导航栏之间的空档由 12dp 收窄为 4dp:底栏不再像悬在半空,基本贴住系统导航栏上沿。
v4.63.42026-09-29
功能升级即刷新
- 应用升级完成后立即刷新全部桌面小组件,不再等 15 分钟周期或下次打开 App——此前升级后桌面会残留旧版显示,省电策略严格的手机上残留时间更久。
- 无外观与交互变化,仅补齐「升级」这一个刷新时机。
v4.63.22026-09-29
修复小组件配色统一与可读性
- 不再跟随主题变色:桌面小组件改用一套固定的 12 档课程色,切换 App 主题不再改变组件外观;同一课程在任何主题下都是同一色相。
- 字糊底修复:Tiny 小组件状态圆里的数字按圆底实际亮度自动选黑字/白字,此前部分课程色下数字糊在底上看不清。
- 色条可辨认:课程色条在浅色/深色卡底上对比度全部达标,不再出现越界变灰。
v4.63.02026-09-28
功能只删这一次
- 在周课表里点击课程后先看到预览,点「编辑课程」进入编辑界面,其右上角(课程名同一行)多了一个圆形删除按钮(垃圾桶图标)。点它并确认后,只删除这门课在当前这一周的这一次课,该课程在其它周次的排课照常保留。
- 若这门课只剩被删的这一周,删除后整条课程记录一并移除,不会留下看不见的残留数据。
- 课程若本周本就没有安排(周课表中被弱化显示的非本周课程),不显示该按钮;标记为「克星」的课程保持只读,同样不显示。
- 点按钮后先弹出确认框(写明课程名与周次),确认后才执行;删除结果以底部提示反馈。
v4.62.02026-09-28
功能先预览,再就地编辑
- 弹出即预览:在周课表里点击课程,弹窗保持原本的详情版式(只读);点「编辑课程」后,可在同一弹窗内直接修改课程名、上课时间、地点、教师、周次、学分、考核方式、实验课、备注、课程颜色与自定义时间,点「保存更改」即写回,不再跳转整页的课程编辑页。
- 改动可控:有未保存内容时取消或下滑关闭会先确认;退出编辑即释放该课程的编辑状态,下次打开重新从数据库读取。
- 版式收敛:实验课与自定义时间两行压到与普通行等高,弹窗高度随内容自适应(上限 620dp),消除窗口底部的大片留白。
- 克星课程保持只读:标记为「克星」的课程仍只显示原详情与「关闭」。
v4.61.02026-09-28
功能按空间放大字号
- 小组件按自身宽度分 S / M / L 三档,宽组件字号更大;同一组件内课程名、时间、地点字号统一,长名以省略号截断,不断行。
- 课程行不再显示教师,省出的空间用于放大课程名、时间与地点。
- 条目名统一 14sp,地点与时间统一 11sp;Compact 与双日栏头升级为 12sp 主文字;4×N 分隔线统一为一种实现。
v4.60.02026-09-28
全应用界面间距与布局统一接入主题 token。本版把界面里逐个页面硬编码的间距与内边距,统一收敛到主题自带的间距语义:同一个「标题与下一行内容之间的空隙」过去在不同页面写成 8 / 10 / 12 / 14 / 16 dp 都有,页与页之间的呼吸感不一致,现在改由主题统一决定。通透 / 柔绘 / 书卷三套主题的外观、配色、材质、字体、圆角全部维持原样,统管的只是「远近关系」。无数据库结构变更(数据库版本 13),设置存储键无增减,旧版本升级无需迁移。
外观留白与节奏统一
- 页面级留白统一:全应用页面的横向边距、顶部留白、底部内容留白改为读取主题 token,不再出现「这页比那页挤一点」的差异。
- 卡片与分区节奏统一:卡片内部留白、卡片与卡片之间、分区与分区之间的间距由主题统一给出,同一页里多处「卡片间距不一样」的问题一并消除。
- 标题与内容的关系统一:分区标题、说明文字与其下内容之间的空隙统一为「紧邻」语义(取值与原先多数页面一致,视觉上不变),此前少数写成 16 dp 的页面回归到与其他页面一致的紧凑关系。
- 列表与表单行距统一:列表项之间、表单各字段组之间的间距改为统一 token,长列表滚动的节奏更稳。
- 微调课表页(快捷操作)页边距对齐:该页原本是全应用唯一自带硬编码页面边距的页面(横向 16 dp / 顶部 16 dp / 底部 16 dp)。现与其余设置子页面共用同一套页面留白(横向 20 dp / 顶部 8 dp / 底部 32 dp),进出该页时不再有「另一套模板」的观感。
内部实现方式
- 界面源码共 51 个文件、319 处间距引用改读主题 token:sectionTitleGap / cardGap / cardInner / listGap / sectionGap / pageHorizontal / pageTop / contentBottom。
- 改动纯属布局层面:不改业务逻辑、不改数据与路由、不改动效时长,也不改主题配色与组件形状。
- 仅剩的少数 10 / 12 / 14 dp 硬编码是「图标与文字之间」「分隔线前后」这类行内紧凑间隙,主题 token 中无对应档位,强行替换会改变视觉,故按原样保留。
构建版本信息
- versionCode 384 / versionName 4.60.0;按 ABI 拆分:arm64-v8a / armeabi-v7a / x86_64。
v3.74.02026-09-28
学期管理补齐「复制学期」+ 计数 / 折叠 / 标题行修复。本版为单一迭代,改动集中在「我的课表(学期管理)」页:补齐设计稿里存在、而实现中整块缺失的「复制学期」能力,并修掉审计出的三处缺陷。无数据库结构变更(数据库版本 13),设置存储键无增减,旧版本升级无需迁移。
新功能复制学期
- 「学期管理 → 历史学期」卡片操作行由「查看 / 删除」补为「查看 / 复制 / 删除」:点「复制」即把该学期整份复制成一张新的独立学期,课程(教师、地点、节次 / 自定义时间、颜色、备注、学分、考核方式、实验课标记)、周次、作息时间段(含全部作息方案)、学期配置(开学日期 / 总周数 / 每周起始日)全部带过来,只需改日期和少数课程,不必从零新建。
- 复制出的学期默认叫「原学期名(副本)」,若该名称已存在则自动递增为「(副本2)」「(副本3)」……不会与现有学期撞名。
- 复制结果是独立的学期:不继承配对关系,与源学期、情侣课表互不影响;源学期没有课程、或没有作息数据时也能正常复制(作息回落出厂默认模板)。
- 复制全程在单个写事务内完成,中途失败不会留下「有课表没课程」的半成品。
修复学期管理页三处缺陷
- 页头「共 N 个学期」把情侣课表也算成了学期:情侣课表并非独立学期(它以并排卡片附挂在本人学期右侧),数字因此虚高。现已改为只统计本人学期。
- 「查看更早的学期」展开后无法收起:旧实现只在收起态渲染该按钮,点开后按钮整块消失,没有回头路。现展开态保留按钮,箭头翻转 180°、文案切为「收起更早的学期」,可反复展开 / 收起。
- 历史学期名过长时被提前截断:标题行原写法让标题最多只能占半宽,稍长的学期名(如「2024-2025学年 第一学期」+ 自定义后缀)就被省略号截断。现标题吃满剩余宽度、右侧状态徽标仍贴右,长名可用空间翻倍。
构建版本信息
- versionCode 298 / versionName 3.74.0;按 ABI 拆分:arm64-v8a / armeabi-v7a / x86_64。
v3.73.02026-09-28
课程提醒设置页改版 + 跳过日期可自行设定。本版合并发布 v3.72.4–v3.73.0。设置页由「13 项挤在一张卡」重组为五个分区并逐条重写文案;「跳过日期」从只读查看改为可自行增删。无数据库结构变更(数据库版本 13),设置存储键无增减,旧版本升级无需迁移。
新功能跳过日期可自行设定
- 「课程提醒设置 → 跳过日期 → 管理跳过日期」中可单个日期添加(日期选择器)、按区间批量添加(选起止日期)、点按任意日期即移除,每次操作都有即时提示。
- 放假、调休、临时停课都能自己维护,不再只能依赖联网更新节假日。
- 区间合法性校验:起止日期颠倒、或区间超过 366 天会被拒绝并提示,不会写入设置。
- 入口右侧角标随跳过日期数量实时变化,并与课前提醒排程、早八闹钟「下一个闹钟」预览、今日页「假期中」判断保持一致。
外观与文案设置页分区重排
- 「课程提醒设置」页由一张 13 项长卡重组为五个分区(课程提醒 / 通知显示 / 早八闹钟 / 权限与后台 / 跳过日期),每个分区有标题与一句话说明「这一组管什么」,并修掉卡内重复分割线。
- 逐条重写开关说明与权限状态文案;权限状态用绿色「已授权」直读,不再整行灰字。
修复两处设置写入问题
- 手动添加的节假日会被联网更新回滚:旧实现是「读设置快照 → 改一个字段 → 整模型写回(一次写 30+ 个键)」,联网更新节假日时会按旧快照把用户刚手动添加的日期覆盖回去。现改为在存储事务内做原子并集 / 差集,同时不再连带重写主题、动画、情侣课表等无关设置。
- 日期区间在 UTC 以西时区会偏一天:日期区间选择器改为按 UTC 折算选中日期,修掉「选 10-01 得到 09-30」的问题(快速删除页同步受益)。
构建版本信息
- versionCode 297 / versionName 3.73.0;按 ABI 拆分:arm64-v8a / armeabi-v7a / x86_64。
v3.72.32026-09-27
通知子系统整体重写:每日早八闹钟、按课次稳定排程、可测试化。本版合并发布 v3.72.0–v3.72.3(v3.72.0 为功能主体,v3.72.1–v3.72.3 为其后的「按作用分类」重构与测试补齐)。课程提醒 / 上课自动勿扰静音 / 穿戴同步三块通知能力,从三套各自为政的调度收敛为单一编排入口。无数据库结构变更(数据库版本 13);备份规范 v2 → v3(新增早八两字段,旧备份向前兼容)。
新功能每日早八闹钟
- 自动读取每天第一节课时间,按 0–180 分钟(默认 45)的提前量把闹钟写入系统时钟应用;写入后就是普通闹钟,可直接改时间 / 停用 / 删除,应用尊重你的改动。
- 设置页提供开关、提前量、下一闹钟预览(「周三 07:15 · 第一节 08:00 高等数学」)与「打开系统闹钟」直达入口。
- 系统无可用时钟应用时自动降级为应用内高优先级闹钟通知(闹钟铃声 + 震动),不会「开了开关却什么都收不到」。
- 真机实测(Xiaomi 22041216UC / MIUI V816 / Android 14):09-28 第一节 14:00 大学物理实验 → 系统闹钟 13:15 早八·09-28 13:15 大学物理实验(一);09-30 / 10-01 / 10-02 第一节均 07:50 → 07:05。
修复重写过程中逐项定位的实质缺陷
- 通知互相顶替:旧实现拿闹钟槽位号(50010–50110)当通知 ID,而槽位是按未来课程列表序号分配的——课表一变,同一槽位就换了另一门课,提醒被原地覆盖。现改为由「课程 ID + 日期 + 上课时刻」派生的稳定通知 ID,同一次课幂等更新、不同次课并存不顶替。
- 「关闭」按钮关错课:requestCode 与 identifier 现都绑到稳定通知 ID,「关闭」恒只关本条。
- 已投递通知永不清理:旧代码只做 AlarmManager.cancel()、从不调用 NotificationManager.cancel(),而提醒是常驻通知——课表越常改,状态栏堆积越多。现引入已投递通知登记簿,在重排 / 关总开关 / 课程消失三个时机统一回收。
- 提醒永久残留在状态栏:两种模式都用 setTimeoutAfter 在上课时刻自动消失;非兼容模式上课前不许误划掉,兼容模式为可划掉的一次性提醒。
- 纯静音被误要求勿扰权限:现在仅「勿扰」要求权限,静音直接放行。
- 自动模式状态卡死:旧实现算完「是否处于勿扰时段」只写日志、从不应用;下课闹钟因重启丢失后勿扰会一直卡着。现每次重排都按「当前是否在上课」校准实际状态。
- 调度混乱:自动勿扰原先借用课程提醒的 action 与请求码区间,现拆到专属接收器 + 专属 action + 独立命名空间。
- 早八闹钟「开关已开、系统时钟里却没有闹钟」(真机定位):拨开关只写设置库,写入交给后台任务,而写入依赖 startActivity(ACTION_SET_ALARM),受 Android 10+ 后台启动限制(BAL) 约束——被拦时 startActivity 不抛异常、只是什么也没发生,旧实现按「有没有抛异常」判成功,于是把静默失败登记成「已写入」,登记簿一旦被污染就再也不补写。最有力的证据:开关为开、提前量 45,但登记簿在把应用调到前台之前从未建立过(= 从未成功写入过一条);调到前台后系统时钟立即出现闹钟。现在:拨开关且应用在前台时就地内联重排(BAL 放行),后台仍交任务兜底;写入前还做前台门控,非前台一律不写、不登记,返回「延后」待下次前台时机补齐。
- 早八闹钟响错日期(真机定位):ACTION_SET_ALARM 只能表达「时:分」、没有日期语义,系统时钟按「下一次该时刻」建一次性闹钟。deleteAfterUse 下实测请求 09-28 13:15 / 09-29 09:45 / 09-30 07:05,三条全部落在 09-28,标签却写着 09-30 / 09-29。现改为只写「最近一次未过期」的早八闹钟、每日滚动补位,并校验该时刻确实是系统时钟能做到的那一次;登记簿升级到 v2(记录真实响铃时刻而非「intent 已发出」)。
- 早八闹钟删不掉(真机实测):ACTION_DISMISS_ALARM 在本机只把时钟界面调到前台、闹钟依然保留;且 ACTION_SET_ALARM 非幂等(同刻同标签连发两次会留下两条)。因此不做无法生效的删除动作,由设置页如实例提示到系统闹钟页手动管理;从旧版本升级时旧登记簿一律作废重写,系统里可能残留旧错闹钟,需手动清理一次。
- 另修复:早八开关曾被错误耦合在课程提醒开关上;登记簿无界增长与「禁用时清空会造重复」;读库异常会清空全部提醒;设置页每个开关「读全量设置 → 改一个字段 → 整写 30+ 键」的并发覆盖与无关设置连带重写(现为单字段原子更新)。
内部按作用分类重排 + 排程可测化
- 通知域 17 个文件按作用归入 10 个子包(alarm/ control/ migrate/ morning/ notify/ receiver/ reminder/ schedule/,共享层 identity/ plan/ registry/),AlarmManager 收敛为唯一出口 AlarmScheduler,编排入口 NotificationScheduler 从 403 行的「上帝类」瘦身到 112 行;课程提醒 / 自动模式 / 早八三个排程策略各自独立成类;顺带删除全仓零调用的死代码。纯结构调整、无行为变更(重构后真机日志与重构前逐字一致)。
- 把三个策略类里的「纯决策」抽到共享层(ReminderPlan / AutoModePlan),使原本零覆盖的排程分支获得单测。
- 测试覆盖从 0 到 95 项;测试过程中实际捕获并修复了「课间相邻课合并后残留冗余开启事件」的缺陷。权限仅新增 normal 级 com.android.alarm.permission.SET_ALARM。
- 正式包(R8 + 资源压缩)已真机冒烟:冷启正常、课表页完整渲染、无 FATAL。
versionCode 294 / versionName 3.72.3(arm64-v8a / armeabi-v7a / x86_64,签名 SHA-256 4ae49d8c…2475f)
v3.71.22026-09-27
体积专项二:Release APK(arm64-v8a)5,229,985 → 4,771,312 B,-458,673 B(-8.77%);相比体积专项前的 v3.70.5(5,784,716 B)累计减少 1,013,404 B(-17.5%)。本版为纯体积 / 构建卫生改进,不含数据库结构变更(数据库版本仍为 13)。
重构离线适配资源包改单流容器
- 内置的 1700+ 学校适配包此前是 197 个文件各自 deflate,适配脚本之间的大量公共模板代码无法复用压缩字典。改为单入口顺序流容器(zip 内仅
repo.skr,新增OfflineRepoArchive读取实现与单元测试),压缩率提升约 25%:932,330 → 723,664 B。 - 实测 GPOS(字距/特性)表占 Newsreader 58%、占 Lora 39%,其中大量特性本主题用不到;改为只保留字距表
kern,并丢弃 DSIG/STAT 与多余 name 记录,字形覆盖实测零变化。 - 默认
values与values-zh-rCN的 837 个 key 实测完全一致,合并为一份(同时修正默认语言包里残留的几处英文文案)。 - 小组件预览图与启动图标按「取最小且确实变小」重编码(体积约 -40%),并删除 2 个全仓无引用的图标资源。
- 删除
-keep class org.koin.** { *; }(单条规则即占 APK 170,590 B),Koin 的定义与注入全部由 koin-annotations 生成代码直接引用,无需整包保留。
versionCode 290 / versionName 3.71.2(v3.71.1 未单独发布,本版合并两批瘦身改动;已通过真机冒烟验证)
v3.71.02026-09-26
体积与性能专项:Release APK(arm64-v8a)从 5,784,716 B 降到 5,229,985 B,-554,731 B(约 -542 KB / -9.6%),解析与列表刷新同步提速。
- 字体子集化:6 个字体 1,296,060 → 280,644 B(-1,015,416 B)。Poppins 四档去除未用字形;Newsreader 固定 wght 600、Lora 固定 wght 400 后子集化(避免默认实例重解压放大);删除全仓零引用的 GeistMono。实际使用字符零丢失。
- R8 裁剪收敛:删除使整个 shared 模块免裁剪的 keep 规则,改为注解驱动的 Entity / DAO / Database 精准保留;合并重复的序列化与 Protobuf 规则。
- 解析器正则预编译:UniversalScheduleParser 30 处、ExcelScheduleParser 17 处函数内 Regex 上提为常量,消除逐行 / 逐格循环内的重复编译。
- 列表与生命周期:Room @Query Flow 补 distinctUntilChanged(课表列表 / 课程+周次 / 配对表);今日页改用 collectAsStateWithLifecycle。
- 网络层统一:新增统一 HttpClientFactory(超时集中可调、日志默认关闭),Android 引擎由 CIO 换为 OkHttp。
- 构建与维护:KSP 对齐 2.3.12 并修复 libs.versions.toml 结构损坏;tooling.preview 降为 debugImplementation;修复「删除 composeResources 文件不会随包移除」的既有隐患。
versionCode 288 / versionName 3.71.0(本版同时包含「单次课程调整」occurrence override 功能,数据库 13→14)
v3.70.52026-09-26
全局 UI/交互视觉优化:更轻盈、更简约、更舒适。只动「框架层」,课程颜色与功能、数据逻辑完全不变;三主题统骨架、留个性。
- 页头统一:今日 / 课表 / 日程 / 我的 四个主页面统一为内容区大标题页头,「我的」页在书卷、柔绘主题下首次出现标题;日程页月份标题降为常规区段层级。
- 留白与节奏:三主题间距统一到 4dp 网格(柔绘收窄、书卷放宽到同一组取值),新增页头 / 区块 / 页尾留白 token。
- 装饰减法:hairline 级分隔线 token 落地,删除设置行、管理课表、今日课程卡等处的外圈描边与硬边投影;课表斜向扫光减弱。
- 字体与图标:字重三角色 + 图标三档尺寸(16/20/24dp)全站归档。
- 交互反馈:单选、复选、可选中卡片的选中态从二值跳变改为渐变过渡,「减弱动态效果」下自动降级。
- 修复:设置行高 token 与渲染互相矛盾的缺陷(三主题统一 52dp)。
versionCode 287 / versionName 3.70.5(含未单独发布的 v3.70.2–v3.70.4 批次改动)
v3.70.12026-09-26
v3.70.02026-09-26
v3.69.62026-09-26
v3.69.52026-09-26
v3.69.42026-09-26
v3.69.32026-09-26
v3.69.22026-09-26
无障碍读屏语义补齐
- 修复 8 处读屏「读不出来」的操作控件:课程列表的返回 / 退出多选按钮此前只读「未加标签的按钮」;待办与日程的完成勾选框完全读不出可勾选与是否已勾选(现播报「复选框,已勾选 / 未勾选」);设置页与课程颜色页的色块此前读「未加标签,可点击」(现播报「单选按钮,已选中 / 未选中」)。
- 设置页分组标题、日程页「全天 / 上午 / 下午 / 晚间」标题现在支持读屏按标题跳转,长列表不再是一条平铺条目。
- 外观页毛玻璃预览区不再对读屏暴露 —— 它只是效果演示,此前会把里面的示例课程名当成真实内容读出来。
- 说明:界面上的装饰性图标(如与文字并列的图标)保持不播报,这是有意为之,避免读屏重复朗读同一内容。
修复稳定性与安全
- 修复压缩包解压的路径校验缺陷:原校验用前缀匹配判断目标路径是否在解压目录内,会把同级目录(如 repo_evil)误判为目录内部,恶意构造的压缩包条目可写到目录之外。
- 修复解压流程与 WebView 拦截的资源 / 句柄泄漏:压缩包句柄从不关闭会导致临时文件删不掉;响应流包装后不关闭会每次请求泄漏一个 HTTP 通道。
- 修复课程表(xlsx)导入可能崩溃:对超大的行列引用加上限,避免索引越界或一次性分配海量空行导致内存耗尽;并修正在列引用非法时会静默把数据写到错误列的问题。
- 修复 ICS 日历导入在 VALARM 块未闭合时的数组越界。
- 修复 iOS 上「导出备份」直接崩溃(该功能在 iOS 未实现,但异常类型无法被上层捕获)。
- 修复英文界面下「明日」日期只显示月份、丢失具体日期的问题。
当前版本 versionCode 277,支持 arm64-v8a / armeabi-v7a / x86_64。
v3.69.12026-09-26
重构主题系统收口完工
- 设置页三套近乎重复的界面实现(约 1071 行)合并为一份,三套主题的差异改由统一的设计变量描述,消除「改一处要改三遍」的隐患。
- 今日页卡片材质由两个主题开关改为「纸感 / 软投影 / 玻璃」三种材质描述,视觉无变化。
- 本次为纯内部重构,界面与交互与 v3.69.0 一致。
当前版本 versionCode 276,支持 arm64-v8a / armeabi-v7a / x86_64。
v3.68.12026-09-24
修复青岛理工大学课表周次解析
- 修复多段周次解析错误:教务返回形如「5-11周(单),12-19周」时,脚本误把整段按单周过滤,导致第二段整周丢失偶数周(如大学体育少 4 周)。现改为按逗号分段、每段独立判断单/双周。
- 已在真实账号下端到端实测:21 条原始课表 → 20 门课程,周次 / 节次 / 教师 / 地点逐条核对一致。
当前版本 versionCode 269,支持 arm64-v8a / armeabi-v7a / x86_64。
v3.68.02026-09-24
功能新增河南科技学院、南开大学研究生课表导入
- 新增河南科技学院课表导入:教学综合管理服务平台(青果 Kingosoft)需经
auth.hist.edu.cn统一身份认证登录,登录后一键导入本学期个人课表(含单双周、连堂合并)。适配器已在真实账号下全流程实测(35 条课程,与教务页面逐条核对一致)。 - 新增南开大学研究生课表导入:对接研究生信息管理系统(allogene 平台)「培养 → 我的课表」,提供校内直连与校外 WebVPN 两个入口;校外入口需先登录 WebVPN,再打开「研究生信息管理系统」。适配器已在真实账号下实测(校内 / 校外两条路径均通过)。
修复青岛理工大学课表导入失败
- 适配脚本把课表接口写成了
http://绝对地址,而入口页是https://,WebView 按混合内容拦截,请求根本发不出去,导入必然失败。现改为同源相对地址。 - 同时改为只挂载导入入口(不再注入即执行),并优先读取页面上的学年学期,避免重复导入与选错学期。
当前版本 versionCode 268,支持 arm64-v8a / armeabi-v7a / x86_64。
v3.67.02026-09-24
功能新增大连理工大学(DLUT)专属教务适配
- 内置学校索引中「大连理工大学」由通用解析切换为专用适配器,支持新版本科教务(
jxgl.dlut.edu.cn)学生端课表,统一身份认证登录后一键导入;适配器已在真实账号下全流程实测(23 条课程 / 12 节作息,与教务页面逐条核对一致)。 - 旧教务入口(
teach.dlut.edu.cn)现为教务处官网、不再提供课表,本版起直达新版学生端课表页。
工程学校索引版本标识防漂移
- 学校索引(
school_index.pb)的版本标识改为对源数据行尾归一化后哈希,消除不同开发机 / 检出设置下产生的假性版本漂移,内置与热更新两条渠道的索引一致性判断更可靠。
当前版本 versionCode 267,支持 arm64-v8a / armeabi-v7a / x86_64。
v3.66.52026-09-24
修复 · 桌面小组件
- 修复浅色模式下部分辅助文字在卡片上难以辨认的问题:原提示文字色实测对比度仅 3.30:1,低于无障碍标准要求的 4.5:1;现取消该层级、统一并入次要文字色(5.05:1),层级改由字号与字重表达。
- 修复课程颜色数据异常时左侧色条几乎不可见的问题:原兜底色与卡片底色的对比度仅 1.05:1(深色模式 1.64:1),现改取次要文字色(5.05:1 / 8.05:1)。
- 修复「垂直列表课表 4×N」被拉高后课程条数显示过多、最后一条被裁切看不全的问题;条数改为按组件实际可用高度与真实行高计算,并向下取整(宁可少显示一条,也不裁切)。
- 修复「垂直列表课表 4×N」课程左侧色条比文字块短一截、上下不对齐的问题。
- 「垂直列表课表 4×N」的最小可调高度由 70dp 调整为 88dp —— 70dp 时连一节课都放不下,必然裁切。
工程
- 新增小组件配色对比度自动校验(文本 ≥4.5:1、非文本 ≥3:1,深浅色资源成对、禁用已废弃色名),并接入提交门禁,防止此类问题再次引入。
- 为小组件条数推算补充 8 项自动化测试。
当前版本 versionCode 266,支持 arm64-v8a / armeabi-v7a / x86_64。
v3.66.42026-09-23
修复 · 桌面小组件
- 修复个别课表数据会让小组件整块停止刷新的问题:课程颜色索引异常时取值越界会中断渲染,现已改为安全取值并回落到主题兜底色。
- 修复「超小课程」组件剩余节数偏大:被跳过的课也被计入了剩余数(当天 4 节、第 3 节被跳过时显示 3,实际只剩 2)。
- 修复「超小课程」组件可能显示的不是下一节课:改为按上课时间排序后取最近一节,不再依赖数据表的固有顺序。
- 修复数据读取偶发变慢时组件误显示「假期中 / 期待新学期」:改为保留上一次的正确内容,不再跳成假期状态。
外观 · 适配
- 「垂直列表课表 4×N」改为按实际高度显示课程条数,不再固定最多 3 条——拉高组件即可显示更多节课。
- 小组件首次加载的「正在加载课程…」文案支持中英繁三语(此前只显示简体中文)。
性能 · 工程
- 消除同一时刻对全部小组件的重复刷新(系统广播与后台定时任务原先会叠加触发),降低耗电与桌面卡顿。
- 小组件刷新移出主线程,减少桌面滑动时的掉帧。
- 清理主题中三档长期零引用的透明度令牌与两处无用 import;为小组件的数据筛选与取色逻辑补充 11 项自动化测试,防止上述问题回归。
本版一并覆盖未单独发版的 v3.66.3(内部清理,不影响界面)。当前版本 versionCode 265,支持 arm64-v8a / armeabi-v7a / x86_64。
v3.66.22026-09-23
外观
- 今日页课程卡不再用描边胶囊显示「课程类型 / 学时」——描边胶囊与筛选按钮同形,容易被误读成可点控件;改为普通文字信息行。
- 设置页「学期设置」4 项与「更多设置 → 起始页」的当前值后面补上箭头,一眼能看出可以点。
- 设置行的高度与标题字号改由主题令牌驱动(书卷 48dp / 15sp,通透与柔绘 52dp / 17sp·16sp),三套主题观感与修复前完全一致。
瘦身
- 清理从未接入界面的「检查更新」脚手架、与 ICS 导出重复的导出器,以及一批无人引用的仓库 / DAO / UI 方法。
- 清理无引用字符串:Android 侧 470×4 条、共享侧 188 条(4 种语言统一为 847 键),并补上
touch_feedback_*只存在于默认语言的本地化缺口。 - 三套逐行同构的设置分组渲染器、两份重复的日期计算、三个约 90% 相同的预览宿主各收口为单一实现。
- 效果:arm64-v8a 安装包 5,784,492 B → 5,747,472 B(−36.2 KB,约 −0.64%)。
本版一并覆盖未单独发版的 v3.66.1。当前版本 versionCode 263,支持 arm64-v8a / armeabi-v7a / x86_64。
v3.66.02026-09-23
功能
- 备份与恢复页新增「WebDAV 自动同步」开关,配置 WebDAV 后可自由开启或关闭。
- 开启后,课表、样式、应用设置、待办与日程发生变更时会自动上传云端备份,并提供每天一次的网络约束后台兜底同步。
- 关闭开关或解除 WebDAV 绑定会立即取消自动同步任务;云端恢复仍保持手动确认,避免后台静默覆盖本机数据。
v3.65.82026-09-22
课表顶部周次/日期排版收紧,左侧节次轴更紧凑;四种桌面小组件整体字号上调一档,课程名、时间、地点、统计和状态文案更易读。
v3.65.62026-09-22
四种桌面小组件统一 goAsync 刷新,并响应组件尺寸变化;按组件高度自动显示 1–3 条课程,最小尺寸下不再过度裁切。compact 小组件的统计文案移到底部;小组件文字统一使用 sp,提升过小字号并收紧内边距。
v3.65.42026-09-22
v3.65.22026-09-22
v3.65.12026-09-22
v3.65.02026-09-22
v3.64.82026-09-20
v3.64.72026-09-19
修复导入课表时误报「未找到导入入口」
- 126 个自启动型适配器(顶层直接调用
runImportFlow等、入口名不符合探测规则)在流程其实已启动的情况下仍弹出该提示,用户误以为失败而放弃或重试。改为宽限期 1.5 秒后复查自启动标志,已启动则静默。 - 导入接口在空结果时直接拒绝并保留原有课表(此前会先删除再插入空列表,还提示「导入成功」)。
- 时间段覆盖改为「按方案替换」(此前按课表整表删除,用户配置的夏/冬令时方案时间段被一并清空且不可恢复)。
- 新增「全局用户数据」备份模块,换机/恢复不再丢失待办与日程。
- 昵称/学校/学院/专业/年级/签名/头像、动态岛、减少动效、动效速度、下节课卡片模式、刷新率模式现随备份迁移(旧备份缺字段时保留设备现值,不会被默认值静默清空)。
- 拒绝内容为空/被截断的备份(此前会删光所有课表却返回成功);恢复后的「当前课表」指针会校验有效性,不再指向不存在的课表。
- 任一模块导出失败即整体失败,避免「备份成功但课表模块缺失」。
- 远端
meta.json的模块 key 增加白名单校验(此前可直接用于拼接本地路径)。 - CORS 回显收窄为「同站(同一可注册域)」白名单,并移除
ACAO:*回退;同时修正可注册域判定(原实现只取末两段标签,把hbvtc.edu.cn与zjnu.edu.cn都算成edu.cn,使跨站保护形同虚设)。 - 此前进入编辑器会永久停在未加载态(空表单),保存时零写入却提示「保存成功」。
- 保存按钮增加「数据已加载且列表非空」前置条件。
coerceIn区间反转(结束时间为 00:00 时上界为负)导致IllegalArgumentException,已改为先夹端点。- 导致网格无法上下滚动、左右滑周失效。
- 滚轮显示值与确认值不一致,已修正。
- 情侣叠加模式下可能重复 key 导致整页崩溃。
- 改为按用户设置的每周首日。
- 均已加固。
- 华侨大学学年参数拼接错误;同济/广东技师「失败也报完成」;中国石油大学(两校区)跨域请求未带凭据;重庆大学失败分支引用未定义变量。
v3.64.42026-09-19
修复湖北职业技术学院教务内容区 JSON 乱码从根上修复
- 此前仅统一入口为 https(v3.64.2),但 WebView 对页面内相对路径的 iframe/fetch 子资源仍会自动升级为 https,与登录会话所在域(http)失配,内容区(个人中心 / 首页课表 / 学籍二维码 / 课表查询等)仍可能显示
{"flag1":2,"msgContent":"请先登录系统"}乱码。本次在 WebView 请求拦截层新增协议归一:对jwgl.hbvtc.edu.cn域的非主框架页面/接口类请求,自动改写为主文档(登录会话域)的协议后转发并携带对应 Cookie,iframe 与 fetch 与主文档同协议同会话,内容区恢复正常(真机实测通过:iframe 课表、学籍二维码、课表查询均正常渲染)。 - 静态资源(JS/CSS/图片等)无需会话,保持原生加载不受影响;改动仅限湖北职院教务域,不影响其它学校。
v3.64.22026-09-18
修复湖北职业技术学院登录后教务内容区 JSON 乱码问题修复
- 此前入口 CAS
service参数指向 http(jwgl.hbvtc.edu.cn/sso.jsp),登录会话绑定 http 域;而 WebView 会把页面内相对路径的 iframe 自动升级为 https 请求,https 域与 http 域会话不互通,内容区(个人中心 / 课表查询等)会显示{"flag1":2,"msgContent":"请先登录系统"}乱码 JSON。现将入口service统一改为 https,登录后会话与 iframe 请求同域,内容区恢复正常。 - 版本说明:学校索引(school_index.pb)已重建,湖北职院入口指向 https 版 CAS 单点登录。
v3.63.12026-09-17
修复
- 湖北职业技术学院导入入口由原教务域直连改为统一身份认证(CAS):
cas.hbvtc.edu.cn/authserver/login?service=…/jwgl.hbvtc.edu.cn/sso.jsp。用户先在统一认证页用校园账号登录,CAS 单点登录后再落地教务域(jwgl),适配器在其上正常解析课表,登录体验与其他采用统一认证的学校一致。 - 版本说明:学校索引(school_index.pb)已重建,湖北职院入口指向 CAS 登录页。
v3.63.02026-09-17
功能湖北职业技术学院适配器完全重开发
- 删除此前经官网跳转的抓取链路,改为与汕头大学一致的「直连强智教务域入口」架构——入口直接落在
jwgl.hbvtc.edu.cn/jsxsd/framework/xsMainV.htmlx,登录后在同一教务域内以同源 fetch 抓取课表(xskb_list.do),DOMParser 解析即得课表,一次点击完成导入。
修复登录/会话失效时 JSON 乱码整屏问题根治
- 此前未登录点导入会以
location.href裸跳到课表页,教务域会话未建立时强智直接返回{"flag1":2,"msgContent":"请先登录系统"}文本,UTF-8 被国产 ROM 回退 GBK 解成乱码占据整屏。新适配器绝不裸跳:停在任何页面点导入都只做同源 fetch;返回内容校验(JSON / 非 HTML / 无课表表格)一律判为未登录,明确提示用户先在教务域登录后再导入,绝不把原始响应当页面渲染。 - 新增
isLoginPage检测,停在强智登录表单(loginForm/userAccount/userPassword)时提示用户输入学号、密码与验证码登录后再执行导入;「一键导航到课表」精确跳转教务域课表页。 - 同一
div.kbcontent内多门课以----文本分隔线分隔,现在能完整拆分并分别导入,不再漏课。
外观
- 湖北职业技术学院继续列入「强制电脑版」名单,以其固定 1280px 桌面布局正常登录与展示课表。
v3.62.02026-09-16
功能湖北职业技术学院专属适配重做
- 清理旧版适配(旧 CAS 直登入口失效),改以教务处官网
jwc.hbvtc.edu.cn为入口,经服务大厅进入强智教务(jwgl.hbvtc.edu.cn/jsxsd)。新适配器按table#timetable+div.kbcontent+font[title]精确解析课程名、教师、周次节次与教室,支持多年多学期下拉选择与 POST 切换,当前学期与历史学期均验证可导入。
修复重新纳入湖北职院「强制电脑版」名单
- 其教务系统为固定宽度桌面布局,继续以桌面 UA + 1280px 视口进入,保证登录后课表完整可见。
v3.61.32026-09-16
修复湖北职业技术学院登录后教务页手机显示异常修复
- 该校统一身份认证(CAS)登录页在手机 UA 下会提示「暂不支持手机浏览器登录」,且登录后跳转的强智教务(
jwgl.hbvtc.edu.cn)为固定宽度桌面布局,手机视口下横向溢出、右侧内容被截断。现将该校纳入「强制电脑版」名单,以桌面 UA + 1280px 视口修正进入,登录后课表网格完整可见、可正常导入。 - 部分教务接口返回 UTF-8 字节但响应头未声明 charset(或标注为 GBK / ISO-8859-1 等非 UTF-8),国产 ROM WebView 会回退到系统默认 GBK,把「请先登录系统」一类提示解成乱码。现对「未声明 UTF-8」的响应做字节级 UTF-8 合法性校验,确认为 UTF-8 即强制按 UTF-8 解码并同步修正 Content-Type 头,本身使用 GBK 的学校不受影响。
v3.61.22026-09-16
修复太原师范学院教务入口改为学校统一身份认证
- 导入入口由
jwxk.tynu.edu.cn:50000正方教务直连地址改为学校统一身份认证平台iam.tynu.edu.cn,登录路径更贴合学校实际,并规避原域名失效风险。
v3.61.12026-09-16
修复湖北职业技术学院统一认证(CAS)登录页 App 内中文乱码修复
- 服务端返回的 HTML 响应体开头带双重 UTF-8 BOM(服务端缺陷),国产 ROM WebView 遇双 BOM 时编码检测会回退到系统默认 GBK,导致登录页占位符与按钮中文全部乱码。现由应用内请求代理接管主框架 HTML,剥离开头所有多余 BOM 后再交给 WebView 渲染。
v3.61.02026-09-16
功能新增广州番禺职业技术学院专属教务适配
- 识别强智经典课表 \#kbtable\,正确处理同一单元格内多门课程以分隔线隔开的布局,按「老师 / 周次(节次) / 教室」字段精确解析;支持学期切换选择。
v3.60.02026-09-16
功能新增湖北职业技术学院专属教务适配
- 经学校统一身份认证(CAS)登录后直达强智课表,按 \div.kbcontent\ 与 \
v3.59.12026-09-16
修复南昌大学入口改为统一身份认证平台
- 导入入口由原「本科教务服务平台」直连地址改为学校统一身份认证(CAS)登录页,账号密码在统一入口登录后即进入教务,凭据路径更符合学校实际。
- 网关取文件改走
raw.githubusercontent.com,避免二进制学校索引被按文本转码导致 APP 侧 sha256 校验失败。
功能学校索引 OTA 同步通道正式启用
- 适配网关已部署上线,白名单新增放行学校索引
index/school_index.pb;APP 侧适配同步器现可在同步适配脚本的同时下载学校索引,学校新增或调整无需等待新版本即可生效。
v3.59.02026-09-16
功能新增南昌大学(NCU)专属教务适配
- 支持解析强智新前端
qz-weeklyTable课表页面,导入课表更完整准确;随版本重建学校索引。 - 适配同步器除原有
adapters/**适配脚本外,现同时支持下载学校索引index/school_index.pb并写入本地repo/index/,学校新增或调整无需等待新版本即可生效。
修复适配网关二进制保真
- 网关取文件改走
raw.githubusercontent.com,避免二进制学校索引被按文本转码导致 APP 侧 sha256 校验失败;访问白名单同时放行index/school_index.pb。 - 同一课程配置多个时间段时,「后面的时间段」的上课周次文本不再被裁掉,全部周次完整显示。
- 备注输入区按内容自适应高度——有几行显示几行、最多 5 行,短备注不再固定占位。
外观移除「自定义主色调」与「动态取色」
- 三套主题预设(通透 / 柔绘 / 书卷)各自锁定身份主色后,这两项设置已无实际作用。本版删除对应设置项、数据字段与主题派生代码,主题设置页仅保留「主题风格」与「主题模式」,界面更简洁。
v3.57.52026-09-15
v3.57.42026-09-15
外观课表课程详情弹窗顶部圆角与底部底色修复
- v3.57.3 将课表详情弹窗改为玻璃透明分支(
hazeState透传)后,弹窗顶部圆角被内层方角蒙层盖住、底部在系统手势区露出透明色块,与今日日程弹窗观感不一致。本版移除该玻璃透传、统一走与「今日日程」一致的纯色分支——顶部两角圆滑过渡、底部以实色填满至屏幕底沿,两处观感缺陷均已消除,课程数据与编辑逻辑不变。 - 课表详情弹窗与「今日日程」详情弹层现在完全同源渲染。
v3.57.32026-09-15
外观课表界面的课程详情弹窗改为与「今日日程」弹窗一致的新样式
- 此前课表里点开课程是较为陈旧的「图标 + 文字」列表;本版统一为——顶部星期小节标题 + 大号加粗课程名标题、圆角容器内的「标签 + 值」分隔行(上课时间 / 地点 / 授课教师 / 上课周次 / 学分 / 考核方式 / 实验课 / 备注)、底部「关闭 + 编辑课程」双按钮。仅更新观感,课程数据与编辑逻辑完全不变。
v3.57.22026-09-15
修复添加自定义课程时点击右上角「保存」会闪退
- 新装或尚未选择课表时,
currentCourseTableId为空,保存课程会以空的课表 id 写入数据库,触发courses表对course_tables表的外键约束(FOREIGN KEY constraint failed)而崩溃。本版在保存时自动兜底解析到第一个有效的「本人」课表;若数据库尚无任何课表则拒绝落库而不再闪退,新增课程数据可正常保存。 - 兼容既有账号:已配置课表的用户行为不变,课程仍保存到当前选中的课表。
v3.57.12026-09-15
修复状态栏「灵动岛」每隔几秒自动连续弹出
- 灵动岛在显示窗口内会被系统闹钟反复触发窗口排程——已经过去的触发时刻会被系统立即投递,投递后接收器又重新排上同一时刻,形成自激循环,通知因此被反复重建刷新,状态栏实时胶囊(灵动岛)持续反复弹出,同时空转耗电。本版改为过期触发点不再排程、窗口内的启动由同步链路直接拉起,自激链彻底切断。
- 重复拉起前台服务不再投递「应用名」占位通知(此前会覆盖真实课程内容,并让胶囊先消失再出现);实时刷新循环改为幂等复用、不再重启;通知内容未变化时不再重复投递(倒计时/进度按分钟变化,最长 5 分钟保活重投一次);读取课表失败时保留服务等待重试,不再静默消失。
- 窗口开始闹钟若被系统重复派发、且灵动岛已在运行,重复投递会被忽略(服务未运行时绝不忽略,保证窗口开始那一次一定生效),杜绝再次出现「反复弹出」。
v3.57.02026-09-14
功能「更多」页新增「自动同步教务系统」
- 可手动一键拉取最新的教务适配脚本,让课表抓取保持可用,无需等待下次启动后台静默同步。点击后按结果提示「正在同步…」「已更新 N 个适配文件」「已是最新,无需更新」或失败回退内置适配。
外观
- 条目带校徽图标(school_24px),同步进行中实时反馈状态。
v3.56.72026-09-14
修复「我的信息」内容在返回页面 / 重启后丢失
- 个人资料(昵称、学校、学院、专业、年级、个性签名)此前依赖页面作用域内的 500ms 防抖落库,返回页面的瞬间该协程被取消、数据从未写入本地存储,导致下回进入一片空白。本版改为每次输入即时写入本地存储,并在写入时使用不可取消作用域,即使立即返回也能保证落盘,重启后依然保留、可反复修改。
- 头像(选择 / 裁剪 / 更换)与昵称等文本信息均持久保存,修改即时生效。
v3.56.62026-09-14
修复教务适配更新在部分网络下连不上
- 适配更新入口此前使用
*.workers.dev域名,该域名在中国大陆遭 DNS 污染(实测被解析到无关 IP),导致适配拉取失败。本版把入口切换到自建域名https://adapter.shangke.asia(Cloudflare Worker 自定义域,证书已签发),大陆可直连。 - 本次仅更换域名,鉴权方式(
X-App-Secret请求头)、路径白名单(仅index.json与adapters/**)、5 分钟缓存与单 IP 限流策略全部保持不变;私有仓库、适配脚本与密钥依旧不对外暴露。 - 旧域名作为排障对照仍保留在线,但新版本 APP 已不再引用它。
v3.56.52026-09-14
功能今日待办恢复显示
- 今日页「待办」区自 v3.42.0 起因主题分支提前返回而不再渲染(数据一直在、界面看不到),本版修复渲染链路,当天待办重新出现并支持勾选完成。
- 待办创建统一由「日程」页承载,这样创建的待办会直接出现在今日页;已完成待办也集中在该页管理。
- 今日课程、明日课程列表补充增删与结课时的位移动画(跟随「减弱动态效果」设置自动降级)。
修复通知图标与刷新率
- 修复课程提醒通知的应用大图标始终为空的问题(图标资源为自适应图标,原解码方式读不出来)。
- 屏幕刷新率「自动」档由「固定到机型最高档」改为交还系统按场景自适应,静止时自动降频更省电。
- 全站分段控件的点击反馈不再与选中胶囊动画错位(含宽屏侧边导航与玻璃底栏)。
v3.56.42026-09-14
修复分段控件点击反馈修正
- 修正分段控件(如「动画效果 → 屏幕刷新率」档位切换)点击时灰色按压块与白色选中胶囊错位、旧位置漏一块的问题。
- 按压反馈改由选中胶囊的滑行动画单独承载,不再叠加主题按压指示;同一修正覆盖宽屏侧边导航项与玻璃底栏兜底方案。
v3.56.32026-09-14
外观图标比例修正
- 实测兔子高度占图标约 67.5%、四周留白偏窄,桌面观感偏拥挤;本版将兔子缩放到 83%(高度占比降至约 56%),四周留白扩大到约 22%。
- 学士帽、耳朵、腮红等细节随整体等比缩放,小尺寸(48px)核验清晰度无损失。
v3.56.22026-09-14
外观图标构图修正
- 上一版为适配圆形蒙版把画面整体缩小,导致图标内的蓝色方块几乎撑满整幅、失去四周留白,观感偏「闷」。
- 本版恢复方块完整轮廓与四周留白,兔子比例与居中原样保留。Android 启动器按机型裁切图标外沿属正常表现,兔子本体始终完整。
v3.56.12026-09-14
外观全新应用图标「兔兔学士款」
- 全新应用图标:戴学士帽的兔兔学长,在 Android 启动器、iOS 与设置页「关于」卡片三处同步更换。
- Android 自适应图标前景按启动器蒙版重制:圆形 / 圆角方形蒙版下兔子完整不裁切,抽屉与通知等小尺寸场景清晰可辨。
v3.56.02026-09-14
功能玻璃渲染缓存 + 三主题架构统一 + 屏幕刷新率设置
- 玻璃渲染安全缓存:底栏与悬浮玻璃的效果链按参数复用,参数不变时不再重复创建渲染效果对象。
- 今日页架构统一:书卷 / 柔绘 / 通透三主题共用同一套页面骨架与卡片实现,页面代码量减少约 39%,后续改版三主题一次生效。
- 新增「屏幕刷新率」设置:自动(在 120 / 90 / 60Hz 中匹配机型最高支持档)/ 120 / 90 / 60 三档手动,改动立即生效。
- 修复玻璃折射在容器尺寸变化(桌面缩放 / 分屏 / 内容驱动宽高)后可能使用旧尺寸着色器参数的问题。
- 三主题今日页经逐像素比对与上一版渲染完全一致,无任何视觉变化。
v3.55.02026-09-14
功能每个 Tab 独立导航栈 + 生命周期感知数据收集
- 底部四个 Tab 各自保留独立导航栈:切走再切回,子页面与滚动位置原地保留。
- 全局数据收集改为生命周期感知,页面退到后台即暂停收集、回前台自动恢复,降低后台耗电。
- 修复在 Tab 首页按返回键会「跳到另一个 Tab」的跨 Tab 返回问题,以及返回手势与系统手势动画相冲突导致的页面闪现。
v3.54.12026-09-13
修复分段控件选中胶囊形状
- 修复通透 / 书卷主题下,分段控件选中胶囊渲染为直角方块的问题;三主题选中胶囊恢复圆角胶囊形态。
v3.54.02026-09-13
功能全库体检:性能 / 动画 / 交互 / 正确性 / 结构五批次优化
- 性能:全局设置流热化共享,消除 20+ 处独立查询带来的冗余 IO;桌面组件同步链收口,拨动无关设置不再触发全量重写与 101 个闹钟重排;样式滑杆拖动仅在松手后落库一次;快速删除页 N+1 查询由 140 次降为 1 次;冷启动让路,组件初始同步推迟 3 秒。
- 动画:「已完成 / 已结束 / 淡出」状态统一接入动效令牌渐变,消除十余处二值硬跳;今日页与日程页列表接入增删位移动画;加载指示器在「减弱动态」下不再创建动画时钟。
- 交互:新建日程、待办编辑、课程编辑补齐键盘避让;全局操作提示升级为主题化应用内横幅;学校列表搜索态接管系统返回;待办标题为空时确认按钮禁用;课表列表整周无课时显示空态占位。
- 修复:修复今日页「明日课程」在周日错误显示本周一课程的问题;修复手势调课落库失败时静默无提示的问题。
- 重构:设置主页「我的」三主题三份复制(约 460 行)收敛为单一数据模型 + 三主题渲染器。
v3.53.52026-09-13
修复学校列表页巨胶囊
- 修复教务导入「选择学校」页打开后整页被一个巨大胶囊形色块占据、学校列表无法显示的问题(分类切换条的自适应高度缺陷)。
v3.53.4 · v3.53.3 · v3.53.22026-09-13
修复待办显示 / 情侣叠加 / 升级闪退
- v3.53.4:日程页无时间的待办不再显示「--:--」占位文本;今日页无时间的待办卡片铺满整行显示。
- v3.53.3:开启情侣课表叠加时不再默认在课程卡上显示起止时间,新增「显示课程时间段」开关(默认关闭)。
- v3.53.2:修复从 3.51.2 及更早版本升级后启动即闪退的问题(数据库迁移新增列缺少默认值声明)。已遇闪退的用户直接覆盖安装本版即可,原有课表数据不受影响。
v3.53.12026-09-13
修复八轮全库审查加固
- 多方案作息(夏 / 冬令时)课表的完整备份恢复失败修复,时段校验改为按作息方案分组校验。
- 情侣设置页进入「作息设置」后保存目标错误(写进本人课表)的跨表误写问题修复,读写路径统一。
- 情侣课表创建的并发幂等(确定性 ID + 事务内检查),双击不再产生不可见的重复课表。
- 开机自启的全量同步挪入 WorkManager 执行;删除某类小组件不再连带取消其它组件的任务。
- 课程提醒同步改为「先取数据、成功后再重排」,读库失败自动重试,不再清空全部提醒。
- 小组件数据读取超时保留旧快照,不再整体刷成空白。
v3.53.02026-09-13
功能时段自动顺延 + 每日零点自愈 + 学期管理重写
- 自定义时间段:修改某一节的结束时间后,后方节次自动整体顺延(按默认上课时长与下课休息逐节重排至 23:59),不再需要逐节手改。
- 免开 App 每日自动更新:新增每日 00:05 零点自愈任务,自动同步课表数据、重排未来 7 天上课提醒闹钟、勿扰时段、灵动岛并刷新全部小组件;跨天换周不再依赖手动打开 App。
- 学期管理重写:点击任意学期卡即可设为当前学期(停留本页、列表实时重排);历史学期状态按日期自动判定(未开始 / 进行中 / 已完成);同学年内按开始日期自动排序。
- 新建日程:待办默认不带时间,需要时关掉「全天」开关即可自定义。
- 修复「回到本周」等圆钮按压时水波纹呈方形扩散的问题;周切换玻璃扫光不再频闪;已完成待办不再出现在今日页「下一节课」卡片中。
v3.52.02026-09-13
功能情侣课表独立化
- 情侣课表升级为独立课表:拥有自己的课程、作息时间与学期配置,不再依附本人课表;学期管理页并排展示(带 ❤ 标记),支持添加 / 查看 / 重命名 / 删除。
- 开放完整编辑能力:点击课程即可修改名称、教师、地点、周次、节次与颜色,也可手动添加课程。
- 支持多种导入方式:教务系统导入、Excel / JSON / 文本文件导入(导入时选择目标课表即可)。
- 情侣课表可单独显示,也可与本人课表叠加;叠加视图按双方各自作息换算位置,作息不一致时课程卡顶部显示起止时间。
- 旧版本已导入的情侣课表数据升级时自动迁移,无感升级;备份与恢复完整支持。
v3.51.22026-09-13
修复根治课表切周闪退与卡顿
- 切周偶发闪退(根治):页内悬浮玻璃件位于页面背景快照的录制子树内、又采样该快照,渲染节点在特定重绘时序下互相引用成环导致栈溢出。现页内悬浮件整体改走已验证安全的 Haze 玻璃方案,底栏自研液态玻璃不受影响。
- 切周卡顿:切周时「上 / 本 / 下三周」课程缓存重建此前在主线程同步执行,造成 Skipped 36–59 帧的卡顿;现移至后台线程池,真机复测同负载下 Skipped 告警归零。
v3.51.02026-09-13
功能日程页与今日课表联动打通
- 今日页勾选的日程 / 待办,在日程页以删除线 + 变淡呈现,反向亦然——完成状态双向同步。
- 今日待办并入日程页,课程与待办、活动、考试混排同屏。