石大课表:把教务系统那张课表,变成手机上真正好用的样子
下载链接 : shzu-schedule.apkshzu-schedule-v1.5.1.apk · 4.6 MB下载
非官方说明:石大课表不是石河子大学官方软件,由在校学生利用课余时间出于学习目的独立开发维护,与学校官方及教务部门无任何关联。项目开源、免费,不收取任何费用。
如果你在石河子大学读书,大概对这个流程不陌生:打开微信 → 进微门户 → 找教务系统 → 等页面一层层加载 → 输入学号和密码 → 可能还要过短信验证 → 最后在一张挤满小字的表格里找自己今天有哪几节课。
石大课表做的事很简单:把这个流程压缩成"点开就看见"。
它解决什么问题
| 原来的麻烦 | 石大课表的做法 |
|---|---|
| 每次看课表都要重新登录、层层点击 | 一次登录,凭据加密保存,之后打开直接出课表 |
| 教务页面在手机上排版拥挤、要横向滚动 | 重绘为原生观感的周课表,一屏看完一周 |
| 没网就看不了课表 | 整学期数据存本机,断网照样打开 |
| 教务系统改了一门课,不知道改了 | 后台静默比对,真的变了才提示你 |
| 自己加的课(自习、社团、旁听)没地方放 | 能在任意空白格加自己的课,可改可删 |
| 想知道下节课在哪、几点 | 桌面小组件常驻显示接下来的课程 |
核心功能
课表本身
- 自动登录:学号密码保存一次,走学校 CAS 统一身份认证自动续期,Cookie 持久化,不用反复登录。
- 短信验证也能过:CAS 触发 MFA 二次验证时,应用会停在验证页等你手动完成,验证完流程自动继续,不会卡死。
- 整学期一次抓完:不是只拉当前周,而是把整个学期的课表一次性抓下来存到本机,之后按周快速过滤。
- 周次自动识别:第 1 周周一的日期、学期总周数从教务教学周历接口读取,不写死。
3-16(周)、单双周、3-6,8-9,12-13(周)这类多段表达式都能正确解析。 - 节次时间真实提取:作息时间表(如 1-2 节 10:00–11:40)从教务页面实时提取,不是猜的。
- 分周加载:启动只渲染当天所在周并立刻显示,其余周次在后台预生成,切周几乎零等待。
交互
- 滑动切周、今日高亮、同课同色、空课周提示。
- 点卡片放大展开:显示课程全部信息;同一格有多门重叠课会逐门列出,不会漏。
- 长按拖动改位置:长按 700ms 进入拖动模式,松手后可撤销或应用,随时能一键重置回默认布局。
自定义加课
教务系统里没有、但你要上的课——自习、社团活动、旁听、组会——可以直接加:
- 课表页点「+ 加课」
- 点任意空白格子
- 填课程名、地点、教师、周次、备注、卡片颜色
还支持「仅本周一次」:选中后自动隐藏周次输入,这张卡片只在这一周出现,适合临时安排。
两套通道完全分开:自定义课程单独存储,刷新或覆盖教务课表不会动它们;退出登录清的也只是教务数据,自己加的课会保留。
位置冲突有提示:自定义课和教务课落在同一格时,卡片会描红边框并挂一个感叹号,打开详情能看到冲突说明。至于冲突时优先显示哪一门,可以在设置里自己选。
外观
- 深色 / 浅色主题一键切换,全局 0.35 秒过渡。
- 支持从相册选一张图当课表背景,卡片、星期栏、按钮自动半透明,网格不留白底。
- 应用图标是自定义设计的:青绿渐变底 + 书法笔触 + 课程卡片书签,圆形、方形、水滴等系统遮罩下都清晰。
桌面小组件
主屏直接显示接下来的课程,一门一行,按时间先后排序:
- 每行课程名用与课表一致的配色,左侧有同色标记条
- 课程名下方标注「地点 · 时间段」,今天 / 明天用相对日期
- 半透明磨砂玻璃背景 + 细腻描边,不遮挡壁纸
- 浅色 / 深色两套配色,跟随尺寸自动选择,也能手动切换
- 支持 1×2 / 1×3 / 2×2 等网格,高度越大显示行数越多
⚠️ 注意:部分国产 ROM(如 ColorOS、澎湃 OS)会屏蔽第三方应用的小组件,小组件中心可能不显示「石大课表」。这是系统限制,不是应用问题。应用内提供了「添加到桌面」按钮,可以直接弹系统确认框绕开组件库。
自动更新
- 启动后每天最多检查一次有没有新版本(也可在设置里手动点「检查更新」)
- 有新版本时展示版本号、更新时间、安装包大小和更新日志
- 下载完成必须通过 SHA-256 校验才交给系统安装器,校验不过直接删文件并提示,防止下载损坏或传输被篡改
- 下载过程可随时取消,取消后保留已下载文件,下次可继续
隐私与安全
这部分是刻意设计的,值得单独说。
| 措施 | 说明 |
|---|---|
| 密码加密存储 | 学号密码用 Android Keystore(AES-256-GCM)加密后落盘,密钥不出安全硬件;旧版明文凭据在打开应用时自动迁移 |
| 网络白名单 | 只允许访问 *.shzu.edu.cn,其他跳转一律拦截 |
| 证书校验 | SSL 错误只对校内域名放行,其余直接拒绝,防中间人 |
| 禁明文流量 | 默认策略禁止 HTTP 明文,仅校内域名放宽 |
| 不参与备份 | allowBackup=false,应用数据无法被备份导出 |
| 账号数据不出本机 | 课表与凭据不经过任何第三方服务器;检查更新只请求作者自己的站点,只传版本号,不涉及任何账号信息 |
权限只有两项:网络(访问教务系统)、安装未知应用(安装更新包,Android 8+ 需在系统设置里手动授权)。
没有通知权限、没有悬浮窗、没有开机自启、没有后台唤醒——这些在本项目里一律没有申请。
技术实现
给好奇的同学:这个项目在技术选型上做了一个不太常见的决定——零 Kotlin,纯 Java,界面全部用 WebView 承载。
整体分两层,中间通过 JS 桥接通信。
上层:Java 层(原生逻辑)
| 组件 | 职责 |
|---|---|
MainActivity | CAS 登录、状态机、抓取调度、课表 HTML 生成 |
ScheduleStore | 课表数据存取(内存缓存)、周次计算 |
UpdateManager | 版本检查、下载、SHA-256 校验 |
NextCourse | 下一节课计算(排序、配色、周次过滤) |
NextCourseWidgetProvider | 桌面小组件渲染 |
中间:桥接层
Java 与网页之间通过 Android 的 addJavascriptInterface(Java 暴露方法给 JS)和 evaluateJavascript(Java 主动调用 JS)双向通信。
下层:WebView 层(学校页面 + 自绘界面)
| 用途 | 做法 |
|---|---|
| CAS / 教务页面 | 注入 JS 自动填表登录、解析课表 DOM |
| 课表展示页 | Java 拼接 HTML/CSS/JS 渲染,交互动画全在网页里实现 |
- 语言:Java(零 Kotlin)
- 界面:WebView + HTML/CSS/JS,课表、弹窗、动画全是网页实现
- 兼容:Android 7.0+(API 24),适配 Android 12+ 系统 SplashScreen
- 体积:约 4.8 MB
这样做的取舍:好处是界面迭代快、动画表现力强、不用维护两套 UI;代价是 WebView 的性能天花板比原生低,所以做了分周渲染 + LRU 缓存 + 状态指纹失效这些优化来补。
课表解析的思路是注入 JS 读教务 DOM:金智教务的课表是标准表格,按 th(节次+时间)/ td(7 列课程)结构提取,用 font[title] 属性区分教师、教室、周次、班级、备注等字段,支持同一格多门课程拆分。相比正则匹配 HTML 字符串,这种方式对页面改版更耐受。
下载安装
| 渠道 | 地址 | 建议 |
|---|---|---|
| Gitee(国内直连) | https://gitee.com/m1sucode/shzu-schedule/releases | 国内用户推荐,无需代理 |
| GitHub | https://github.com/DoGeMisu/shzu-schedule/releases | 海外或能正常访问 GitHub 的用户 |
两处源码与版本完全同步,功能一致。任一处打不开就换另一处。
安装步骤:
- 从上面任选一个地址,下载最新的
.apk(当前版本 1.4.3) - 手机浏览器下载后点击安装,系统可能提示「未知来源」,允许即可
- 首次打开输入学号和密码登录,成功后课表自动抓取
从 v1.2.1 起更换过签名密钥,如果你装的是更早的版本,需要先卸载旧版再装新版(卸载会清空旧数据,属正常现象)。1.2.1 之后的版本可以直接覆盖升级。
常见问题
Q:安全吗?会不会把我的学号密码传出去?
不会。凭据只存在你手机本地,用 Android Keystore 加密。应用没有任何自建账号体系,也不连接除学校域名和作者更新站点之外的服务器。源码完全开源,可以自己审。
Q:为什么有时打开是旧课表?
应用优先用本地缓存秒开,然后在后台静默比对一次教务数据。如果教务课表变了,会弹窗问你要不要更新——不确认就不会覆盖。
Q:教务系统需要短信验证怎么办?
应用会停在验证页面等你自己完成验证,验证完自动继续走流程。
Q:某门课不显示?
先确认教务系统网页版里这门课是否正常显示。如果网页正常、应用不显示,可以在设置 → 通用设置 → 课表数据诊断里导出抓取数据反馈。
Q:桌面小组件在桌面找不到?
部分国产 ROM 会屏蔽第三方小组件。去设置 → 通用设置 → 桌面小组件,点「添加到桌面」直接弹系统确认框;或长按桌面空白处,在「卡片 / 小组件」里搜索「石大课表」。
Q:会一直免费吗?
会。项目以 MIT 协议开源,作者是在校学生,利用课余时间维护,不收费、不接广告、不卖数据。
反馈与交流
用下来有问题、有想法,或者想加点什么功能,都欢迎找作者:
反馈问题时,如果能附上「设置 → 通用设置 → 课表数据诊断」导出的文件,定位会快很多。注意:该文件包含课程与个人信息,请勿公开发布,直接私发给作者即可。
本项目以 MIT License 开源。非官方软件,与石河子大学官方及教务部门无关。
m1SuHub