Skip to content

Latest commit

 

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

石大课表 (SHZU Schedule)

非官方声明:本项目非石河子大学官方软件,由在校学生利用课余时间出于学习目的独立开发维护,与学校官方及教务部门无任何关联。

石河子大学课表安卓应用:自动登录学校统一身份认证(CAS),抓取教务系统整学期课表,本地离线渲染,支持课前提醒、深浅主题与自定义背景。

📥 下载

渠道 地址 说明
Gitee(国内直连) https://gitee.com/m1sucode/shzu-schedule/releases 推荐国内用户使用,无需代理,下载速度快
GitHub https://github.com/DoGeMisu/shzu-schedule/releases 海外或可正常访问 GitHub 的用户

两处源码与版本完全同步,功能一致。若 Gitee 打不开,请改用 GitHub,反之亦然。

Platform Language UI Version

✨ v1.1.3 更新亮点

  • 🐛 修复切应用回来闪白:在澎湃 OS 等机型上切屏或切到其他应用再切回来时界面闪动、深色主题下先闪一下白的问题已修复(背景图改异步解码 + 避免无谓重绘 + 窗口底色跟随主题)
  • 🐛 修复小组件课程位置:在课表里拖动调整过位置的课程,桌面小组件现在会同步显示到新位置,不再停留在原始位置
  • 🐛 修复自定义背景下的课程详情弹窗:使用自定义背景图时,弹窗弹出动画结束后会跳成不透明纯白,现正确保持半透明毛玻璃
  • 🐛 修复弹窗闪烁:打开课程详情时页面「先暗一下再亮」、关闭时「缩小后又闪一下」
  • 🐛 修复点击高亮:点卡片和按钮时出现的蓝色背景块已去除

v1.1.2 更新亮点

  • 🪟 桌面小组件(全新):主屏直接显示接下来的课程,按时间先后排序,可同时列出多节;课程名用课程配色,下方标注地点与时间
  • 🎨 小组件玻璃拟态:半透明磨砂玻璃背景,圆角与系统组件一致,不遮挡壁纸
  • 🌗 小组件深浅主题:自带浅色 / 深色两套配色,随小组件尺寸自动适配,也可点卡片上的切换按钮手动换
  • 📐 多尺寸适配:支持 1×2 / 1×3 / 2×2 等桌面网格,行数随组件高度自动增减
  • 🐛 修复弹窗闪烁:打开课程详情时页面「先暗一下再亮」、关闭时「缩小后又闪一下」的问题已修复
  • 🐛 修复点击高亮:点卡片和按钮时出现的蓝色背景块已去除

v1.1.1 更新亮点

  • 🛡 权限体检清单:设置页一眼看出缺哪项权限(悬浮窗 / 通知 / 后台运行 / 自启动),点任一项直接跳转去开
  • 📱 机型专属指引:按小米红米、华为荣耀、OPPO/realme/一加、vivo/iQOO、魅族、三星分别给出具体设置路径
  • 小米/红米专项:一键直达「后台弹出界面」权限页(这项不开,提醒弹不出来,只会发通知)
  • 🔔 新增通知权限检测与一键申请,未开启时明确提示会降级为通知提醒

v1.1.0 主要更新

  • 🔔 课前提醒全面重做:课程卡片右上角铃铛一键开关,到点用悬浮窗弹提醒页面,来电式循环响铃 + 震动,退出应用、锁屏也照常提醒
  • 📅 整学期课表:一次拉取全学期并本地保存,总周数从教务教学周历自动获取(不再写死),无需再按窗口反复刷新
  • 🎨 外观可定制:深色 / 浅色主题一键切换(带过渡动画),支持从相册选图当课表背景,卡片自动半透明
  • 🔒 安全加固:密码改用系统密钥库加密存储,网络请求限校内域名白名单,禁止明文流量与外部跳转
  • 🧩 细节优化:重叠课程(同一时段多门课)详情完整展示、空课周提示、切周不再闪屏、卡片放大展开动画

功能特性

课表

  • 自动登录:学号密码一次保存,CAS 统一认证自动续期,Cookie 持久化免频繁登录
  • MFA 兼容:CAS 触发短信二次验证时自动停留验证页,手动验证后流程无缝继续
  • 整学期课表:一次抓取全学期数据本地保存,按周快速过滤渲染
  • 周次自动识别:从教务教学周历接口获取第 1 周周一日期与学期总周数,拒绝硬编码
  • 节次时间动态提取:作息时间表(如 1-2 节 10:00-11:40)从教务页面实时提取
  • 课程详情:点击卡片放大展开,重叠课程(同一格多门课)逐门完整展示
  • 拖动调位置:长按 700ms(含震动反馈)进入拖动模式,松手后可撤销/应用,随时一键重置布局
  • 交互体验:滑动切周、同课同色、今日高亮、空课周提示、开屏动画

课前提醒(v1.1.0 重做)

  • 一键开关:卡片右上角铃铛,灰=关、金=开,无需进入子页面
  • 自建定时器:前台服务内置计时,不依赖系统闹钟,Android 12+ 无需精确闹钟权限
  • 悬浮窗提醒:到点弹出提醒页面,盖在桌面、微信、浏览器之上(白色毛玻璃卡片)
  • 来电式响铃:循环播放系统来电铃声 + 循环震动,点“知道了”停止(60 秒自动静音)
  • 通知兜底:未授予悬浮窗权限时自动降级为高优先级通知,提醒不会丢
  • 过期保护:今日以前的提醒、以及错过 10 分钟以上的提醒一律不补弹
  • 状态可视:常驻通知栏显示“下次提醒:x月x日 xx:xx 课程名”
  • 权限引导:悬浮窗 / 自启动 / 后台运行三项一键跳转系统设置

外观

  • 深色 / 浅色主题切换,全局 0.35s 过渡
  • 自定义图片背景(相册选取),课程卡片、星期栏、按钮自动半透明,网格无白底
  • 自适应图标 + Android 13 主题图标(Monochrome)适配

桌面小组件(v1.1.2 新增)

  • 接下来的课程:主屏直接显示按时间先后排序的后续课程,一门一行
  • 课程配色:每行课程名使用与课表一致的课程颜色,左侧有同色标记条
  • 地点与时间:课程名下方标注「地点 · 时间段」,今天 / 明天用相对日期
  • 玻璃拟态:半透明磨砂背景 + 细描边,圆角 22dp,不遮挡壁纸
  • 深浅自适应:浅色 / 深色两套配色,按小组件尺寸自动选择,也可点顶部 ◐ 按钮手动切换
  • 多尺寸:支持 1×2 / 1×3 / 2×2 等网格,高度越大显示行数越多(最多 4 行)

⚠️ 注意:部分国产 ROM(如 ColorOS / 澎湃 OS)会屏蔽第三方应用的小组件, 小组件中心可能不显示「石大课表」。这是系统限制,非应用问题。

技术架构

┌────────────────── Java 层(原生逻辑)──────────────────┐
│ MainActivity     CAS登录 / 状态机 / 抓取调度 / HTML生成   │
│ ScheduleStore    课表数据存取(内存缓存)/ 周次计算       │
│ reminder/        提醒前台服务 · 悬浮窗 · 权限 · 开机自启   │
│ NextCourse       下一节课计算(排序 / 配色 / 周次过滤)    │
│ widget/          桌面小组件 RemoteViews 渲染             │
│ util/            密码加密(Keystore) · 权限跳转           │
└────────────────────────┬───────────────────────────────┘
                         │ addJavascriptInterface ↔ evaluateJavascript
┌────────────────────────▼───────────────────────────────┐
│              WebView 层(学校页面 + 自绘界面)              │
│  · CAS/教务页面:注入 JS 自动化操作(登录、DOM 解析课表)    │
│  · 课表展示页:Java 拼接 HTML/CSS/JS 渲染 + 交互动画       │
└─────────────────────────────────────────────────────────┘
  • 语言:Java(零 Kotlin)
  • 界面:WebView + HTML/CSS/JS(课表、弹窗、动画全部为网页实现)
  • 兼容:Android 7.0+(minSdk 24),适配 Android 12+ 系统 SplashScreen

工作原理

  1. 登录链路:访问教务系统 → 无会话则 302 到 CAS → 注入 JS 自动填表登录 →(如触发短信验证则等待用户手动完成)→ 凭据在到达教务系统后才落盘
  2. 课表入口探测:教务首页扫描链接(href 特征 xskb/kbcx → 文字特征“课表”)→ 空结果复扫 → 超时转入预设 URL 猜测,多层兜底
  3. DOM 解析:金智教务课表表格按 th(节次+时间)/td(7 列课程)结构提取,font[title] 属性区分教师/教室/周次/班级/备注等字段,支持同格多课程拆分
  4. 周次推导:教学周历接口获取第 1 周周一日期与学期覆盖范围 → 推算总周数 → weekMatches() 解析“3-16(周)”“单双周”等表达式
  5. 提醒调度:已选课程的每节课 × 每个上课周次算出提醒时刻表 → 前台服务每秒心跳比对 → 到点弹悬浮窗并响铃

构建

环境要求:JDK 21、Android SDK(compileSdk 34,需含 platforms/android-34build-tools/34.0.0)、Gradle 8.4 + AGP 8.3.2

# 国内推荐(Gitee,直连)
git clone https://gitee.com/m1sucode/shzu-schedule.git
# 或 GitHub
git clone https://github.com/DoGeMisu/shzu-schedule.git

cd shzu-schedule
gradle assembleDebug
# 产物: app/build/outputs/apk/debug/app-debug.apk

首次构建必须自行配置 SDK 路径:在项目根目录新建 local.properties,写入本机 Android SDK 的绝对路径(该文件不入库,每个人的路径都不同):

sdk.dir=C\:\\Android\\Sdk

注意 Windows 路径需按 Java Properties 规则转义(\ 写成 \\,冒号写成 \:)。 也可以用环境变量 ANDROID_HOME 代替,或在 Android Studio 中打开项目,IDE 会自动生成该文件。

若报 Failed to apply plugin 'com.android.internal.application',通常是 SDK 路径不对或缺少 platforms/android-34build-tools/34.0.0,用 SDK Manager 补齐即可。

隐私与安全

  • 密码加密存储:学号密码使用 Android Keystore(AES-256-GCM)加密后落盘,密钥不出安全硬件;旧版明文凭据打开应用时自动迁移
  • 网络白名单:仅允许访问 *.shzu.edu.cn,其余跳转一律拦截
  • 证书校验:SSL 错误只对校内域名放行,其余直接拒绝(防中间人)
  • 禁明文流量:默认策略禁止 HTTP 明文,仅校内域名放宽
  • 不参与备份allowBackup=false,应用数据无法被备份导出
  • 无第三方服务器:课表与凭据不经过任何第三方,本项目不含任何硬编码凭据

权限说明

权限 用途
网络 / 网络状态 访问学校教务系统
通知 提醒与提醒服务常驻状态
悬浮窗 到点把提醒页面弹在任意界面之上(可关闭,关闭后降级为通知提醒)
前台服务 应用内自建提醒定时器常驻
开机自启 重启手机后自动恢复提醒
震动 / 音频设置 响铃与震动提醒

免责声明

  • 本项目为非官方的学生业余作品,与石河子大学及其教务部门无任何关联
  • 由在校学生在业余时间独立开发,仅供学习交流
  • 请合理使用,遵守学校相关规定
  • 使用本项目产生的一切后果由使用者自行承担

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages