石大课表 拥抱简单~

石大课表:把教务系统那张课表,变成手机上真正好用的样子

下载链接 : 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 进入拖动模式,松手后可撤销或应用,随时能一键重置回默认布局。

自定义加课

教务系统里没有、但你要上的课——自习、社团活动、旁听、组会——可以直接加:

  1. 课表页点「+ 加课」
  2. 点任意空白格子
  3. 填课程名、地点、教师、周次、备注、卡片颜色

还支持「仅本周一次」:选中后自动隐藏周次输入,这张卡片只在这一周出现,适合临时安排。

两套通道完全分开:自定义课程单独存储,刷新或覆盖教务课表不会动它们;退出登录清的也只是教务数据,自己加的课会保留。

位置冲突有提示:自定义课和教务课落在同一格时,卡片会描红边框并挂一个感叹号,打开详情能看到冲突说明。至于冲突时优先显示哪一门,可以在设置里自己选。

外观

  • 深色 / 浅色主题一键切换,全局 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 层(原生逻辑)

组件职责
MainActivityCAS 登录、状态机、抓取调度、课表 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国内用户推荐,无需代理
GitHubhttps://github.com/DoGeMisu/shzu-schedule/releases海外或能正常访问 GitHub 的用户

两处源码与版本完全同步,功能一致。任一处打不开就换另一处。

安装步骤:

  1. 从上面任选一个地址,下载最新的 .apk(当前版本 1.4.3)
  2. 手机浏览器下载后点击安装,系统可能提示「未知来源」,允许即可
  3. 首次打开输入学号和密码登录,成功后课表自动抓取

从 v1.2.1 起更换过签名密钥,如果你装的是更早的版本,需要先卸载旧版再装新版(卸载会清空旧数据,属正常现象)。1.2.1 之后的版本可以直接覆盖升级。


常见问题

Q:安全吗?会不会把我的学号密码传出去?

不会。凭据只存在你手机本地,用 Android Keystore 加密。应用没有任何自建账号体系,也不连接除学校域名和作者更新站点之外的服务器。源码完全开源,可以自己审。

Q:为什么有时打开是旧课表?

应用优先用本地缓存秒开,然后在后台静默比对一次教务数据。如果教务课表变了,会弹窗问你要不要更新——不确认就不会覆盖。

Q:教务系统需要短信验证怎么办?

应用会停在验证页面等你自己完成验证,验证完自动继续走流程。

Q:某门课不显示?

先确认教务系统网页版里这门课是否正常显示。如果网页正常、应用不显示,可以在设置 → 通用设置 → 课表数据诊断里导出抓取数据反馈。

Q:桌面小组件在桌面找不到?

部分国产 ROM 会屏蔽第三方小组件。去设置 → 通用设置 → 桌面小组件,点「添加到桌面」直接弹系统确认框;或长按桌面空白处,在「卡片 / 小组件」里搜索「石大课表」。

Q:会一直免费吗?

会。项目以 MIT 协议开源,作者是在校学生,利用课余时间维护,不收费、不接广告、不卖数据。


反馈与交流

用下来有问题、有想法,或者想加点什么功能,都欢迎找作者:

  • 作者:m1Su
  • QQ:196331872
  • 微信:m1SuCode
  • 邮箱:19633187@qq.com
  • 个人站点:https://misuhub.top
  • 开源地址:Gitee · GitHub

反馈问题时,如果能附上「设置 → 通用设置 → 课表数据诊断」导出的文件,定位会快很多。注意:该文件包含课程与个人信息,请勿公开发布,直接私发给作者即可。


本项目以 MIT License 开源。非官方软件,与石河子大学官方及教务部门无关。

👁 观看 17 👍 点赞 0 💬 评论 1

评论

1 条
    • Mm1Su站长

      源代码开放,可自行下载编译