感谢原作者 caeamer 创建 BeikeSchedule,为本项目奠定基础。
面向北京科技大学(USTB)学生的 Android 课表与教务助手。
从教务系统导入课表和成绩,在手机上查看每周课程、考试安排与空闲教室。
前往 Releases 下载最新签名 APK。
| 功能 | 说明 |
|---|---|
| 一键同步 | 统一获取课表、成绩、GPA、考试、学籍、学业进度与公告;同学期唯一课表自动更新 |
| 每周课表 | 同步教学周日历,支持滑动切周、单双周、冲突课程并排显示 |
| 桌面课表 | 2×2 今日课程卡片,显示正在上和接下来的课程 |
| 课表管理 | 新建、切换、重命名课表,支持清空课程或删除课表;校历和节次时间独立保存 |
| 课程管理 | 手动添加和编辑课程,隐藏或恢复课程,按需隐藏周末与非本周课程 |
| 成绩与学业 | 按学期查看成绩、排名、加权平均分、GPA 和学分修读进度 |
| 考试安排 | 教务同步与手动添加、编辑、删除,支持时间待定、倒计时、考点和座位号 |
| 通知公告 | 校园公告栏目,最新公告同步、历史分页、离线标题与原文链接 |
| 空闲教室 | 按教学楼查看今天各大节空教室、座位数及空座率 |
| 消息提醒 | 上课与考前提醒,支持开机后重新安排提醒 |
| 个性化 | 跟随系统、浅色和深色主题,课表字号、自定义背景图片、成绩隐藏与课程显示设置 |
| 应用更新 | 进入前台每天自动检查正式新版,确认后应用内下载,再由系统确认安装 |
展开查看功能细节
- 教学周:根据教务校历映射教学周与日期,处理不计入教学周的假期;假期中定位到后续教学周,周次选择中标记“假期后”。日期栏为学校校历标记的放假日期(含周末)显示浅色背景,今天优先高亮;已有课表需重新导入以获取逐日标记。
- 调休补课:按项目维护者提供的学期配置追加教务补课、取消指定日期的常规教务课程,手动课程保持原安排。补课按来源日期的教学周与单双周计算,课表、小组件及提醒同步生效;补课日期以底色区分,详情展示补课与原课程日期,不增加日期栏高度;含补课的周临时显示周末,假期补课可单独查看。前台每天检查一次,支持在“学期与校历”查看安排和立即刷新,离线使用缓存。
- 课表显示:完整周视图保留真实节次位置,支持手势切周、今天高亮与下一节课标记;课程名在卡片上方均衡换行,教室、教师和单双周标记靠下居中。教室放不下一行时优先将楼名和房间号分行,较长或无法拆分的地点自然换行显示完整。默认尽量一屏显示,课名按剩余高度显示,至少保留一行,放不下的末尾省略;教室等必要信息及左侧时间栏决定最小节次高度,必要时仍可上下滑动。非本周课程降低底色强调,文字保持清晰,也可按需隐藏。
- 多课表:点击课表顶部名称快速切换,或从课表更多菜单、课表设置及“我的”进入“课表管理”。每份课表独立保存课程、学期校历和节次时间;外观及显示开关共用。切换后桌面小组件和上课提醒跟随当前课表。清空课程保留名称和校历;删除课表会同时删除其配置,删除最后一份时自动创建空白默认课表,成绩与考试不受影响。
- 页面入口:底部为“课表、校园、我的”。课表更多菜单包含导入、添加课程、无固定时间课程与课表设置;保留长按空白格添加课程。
- 课表设置:课表菜单与“我的”共用“学期与校历、课表显示、上课提醒、隐藏课程”页面。学期编辑使用草稿,保存后生效,取消不修改数据;官方校历优先于备用开学日期。
- 课表外观:固定蓝色强调配合中性底色,支持跟随系统、浅色与深色。课表字号支持 80%–160% 调节:课名按比例缩放,辅助信息以较缓幅度缩放,均遵循系统字号。节次高度可独立按 80%–160% 统一调节,步长 5%;100% 以当前可用网格高度为目标,“适应一屏”恢复到 100%,不改变字号。各天时间保持对齐,跨节课程按节次数增加高度,日期栏固定。设置中按当前五天或七天列宽预览短课名、长课名和冲突课程,高度以示例大节 96dp 为参考即时更新。自定义背景、图片适配、遮罩、模糊及课程显示开关即时保存;字号和背景可分别恢复默认,保留高度偏好。
- 课程详情:卡片在同一界面中展开为详情,支持返回、遮罩点击和向下拖动关闭;来源卡片消失时淡出。动效遵循系统动画缩放设置。
- 课程管理:教务导入、自定义和示例课程均可隐藏,隐藏后停止上课提醒;教务导入课程仅支持隐藏,自定义和示例课程可删除。同名调课与单双周拆分行自动合并。
- 教务同步:在“我的 → 账号与数据”一键同步全部教务数据和最新公告,课表及成绩/考试刷新共用此流程。各项独立保存和显示状态,可只重试失败项;普通刷新无需二次确认。成绩/考试刷新留在当前页面,先检查并复用登录会话;失效时自动进入统一身份认证,显示“发送登录链接到微信”入口。同步中途过期可在认证后自动续接一次,失败保留旧数据;各项同步结果在“我的 → 账号与数据”查看,成绩/考试页不额外展示同步状态栏。切换栏目和返回前台不重复刷新。
- 成绩分析:加权平均分按必修课计算,可按学年或学期筛选并自定义排除课程;GPA 在本地按项目内置 4.0 制计算,补考和重修覆盖正考。成绩默认隐藏,可通过小眼睛按钮显示。
- 学分进度:展示毕业总进度和课程性质分类进度;成绩详情包含接口提供的排名、考核方式、学分与开课学院等信息。
- 考试管理:在“校园 → 考试”点击“添加考试”,无需登录即可录入。仅名称必填,日期、开始时间和结束时间可逐步补全,地点、座位号、类型和备注选填;不支持跨日时段。带“手动”标识的考试可点击编辑或删除,教务考试只读。教务刷新与“清除成绩缓存”均保留手动考试及其提醒,手动记录独立于课表和学期。
- 考试提醒:已知日期时在前一天 20:00 提醒,已知开始时间时另在开考前 1 小时提醒;日期待定不安排提醒。编辑或删除后更新对应提醒,提醒失败可单独重试,不会重复录入考试。上课默认提前 15 分钟提醒,可自行调整。
- 空闲教室:无需登录教务账号,支持下拉刷新和楼栋筛选;优先展示当前或下一时段,已结束时段默认收起,全天结束后展示当天记录。数据来源说明位于校园更多菜单。
- 校园:空教室、公告、成绩、考试四个栏目分别保留选择与滚动位置;成绩按摘要、筛选、列表、学分进度组织,已结束考试归入次要分组。评教和大创入口位于更多菜单。
- 我的:紧凑身份摘要可进入完整学籍信息;设置按课表、外观、账号与数据、关于分组;账号与数据页集中同步进度、最近成功时间、缓存清理与退出登录。检查更新、版本、仓库及联系开发者集中在“关于”。
- 应用更新:启动或返回前台时检查 GitHub 正式新版,两次自动检查至少间隔 24 小时,失败也计入间隔;“我的 → 关于 → 检查更新”可随时手动重试。新版弹窗展示说明及安装包大小,支持稍后提醒和忽略此版本;手动检查仍可查看被忽略的版本。确认后在应用内下载,移动网络下再次确认,未授权时仅 Wi-Fi 下载。系统下载任务可在后台继续,回到 App 恢复进度;完成后校验包名、版本、签名与可用摘要,点击安装并按系统提示授权、确认。教务登录或导入时暂缓更新弹窗,后台不会自动拉起安装器。下载失败或没有唯一 APK 附件时可前往发布网页。旧版需先手动安装一次包含此功能的版本。
最低支持 Android 14(API 34)。选择下载渠道:
- GitHub Releases:下载签名 APK。
- 蓝奏云:密码
1234。
安装后:
- 在“我的 → 账号与数据”点击“登录并同步”,登录学校教务系统后一次获取课表、成绩、考试、学籍、学业进度和最新公告。
- 同学期只有一份课表时直接更新;首次导入或存在多份匹配课表时选择保存目标。成绩、考试和公告在“校园”查看,成绩默认隐藏。按需开启通知权限与提醒选项。
- 在“我的”或“课表 → 更多 → 课表设置”的“课表”分组中,点击“添加桌面小组件”,按系统提示添加“今日课表”。显示“已向桌面发出添加请求”但没有系统弹窗时,可点击下方“没有弹出?查看手动添加方法”;桌面不支持快捷添加或请求失败时会直接显示手动指引:长按桌面空白处,在小组件列表中找到“贝壳课表 / 今日课表”并添加。未导入课表时也可添加,已有小组件时可继续添加多个实例。
自动同步按学年与学期精确匹配,唯一匹配时更新该课表且不切换当前课表。无匹配或有多个匹配时进入预览;也可在账号与数据页手动选择新建或更新目标。更新仅替换目标的教务课程、校历和节次时间,保留手动课程、教务课程隐藏状态及自定义课表名称,并清除目标中的示例课程;跨学期更新需确认。导入失败时保留预览和目标选择,显式确认导入成功后切换到目标课表。
统一同步页独立展示课表、成绩、GPA、考试、学籍、学业进度与公告的结果。单项失败保留旧缓存,不影响其他成功项;网络任务最多等待 90 秒(重建不延长),课表目标选择不计入超时。空成绩或未发布课表不清空旧数据;合法空考试只替换教务考试,保留手动考试。公告首次同步获取 15 条,历史公告按需加载,原文在外部浏览器打开。
- 学号和密码由你在系统 WebView 中直接输入学校认证页面,App 不读取、不存储密码。
- 课表、成绩和历史个人日程记录保存在本机,App 不将这些数据上传到开发者服务器。
- 个人日程功能已下线,已有本地记录保留;启动、升级和开机时清理旧日程闹钟与通知,不影响课程和考试提醒。旧校园栏目自动迁移为稳定标识,原日程栏目回到空教室。
- 自选课表背景在本机缩小后保存于应用私有目录,不上传,也不参与云备份;删除相册原图不影响已保存的背景。
- WebView 保存登录会话;学籍信息会随成绩抓取缓存在本机,供离线展示。可在“我的 → 账号与数据 → 退出教务登录”清除会话并取消待处理同步,退出前的迟到回调不能继续写入。仅在用户发起登录或刷新时同步,不增加后台定时刷新。
- 空闲教室数据来自贝壳教学平台(
ustb.smartclass.cn)。请求携带平台公开配置生成的签名参数和设备网络出口 IP,不包含学号、姓名或本机课表等个人数据。 - 应用需要访问学校服务及 GitHub 更新接口;对应服务的可用性会影响导入、查询或更新检查。
项目采用单个 app 模块:
| 层次 | 技术 |
|---|---|
| 界面 | Kotlin · Jetpack Compose · Material 3 |
| 本地数据 | Room · DataStore |
| 提醒 | AlarmManager · BroadcastReceiver |
| 桌面小组件 | Jetpack Glance · WorkManager,本地读取课表 |
| 教务导入 | WebView 登录会话 · JavaScript 注入 · 结构化 JSON |
| 公告缓存 | Room 本地分页缓存 · WebView 同源获取 |
| 空闲教室 | 贝壳教学平台接口 |
工具链、SDK 和依赖要求以仓库配置为准,当前 Gradle daemon 请求 Java 21。在仓库根目录使用自带的 Gradle wrapper:Windows PowerShell 为 .\gradlew.bat,macOS / Linux 为 ./gradlew。常用任务包括 assembleDebug、testDebugUnitTest、lintDebug 和 minifyReleaseWithR8。
正式签名 APK 使用 assembleRelease 构建,需要维护者自己的 keystore.properties 和签名密钥;私人配置、密钥与 APK 不加入源码提交。
- 教务与空闲教室接口参考:集成开发前先查阅,避免重复探查学校接口。
- 技术设计:架构与早期设计背景;历史版本描述请与当前源码对照。
- 桌面课表 Widget:布局、数据流、后台调度限制与手动验收步骤。
- 调休配置维护与验收:JSON 格式、在线更新、已确认安排与数据库迁移检查。
- CI 配置:自动检查任务的来源。
- 手动考试验收清单:录入、编辑、删除、刷新隔离、数据库迁移与提醒检查。
- 统一同步与公告验收清单:分项同步、自动更新课表、公告分页、缓存清理与版本 9 迁移。
- App 自动更新验收清单:版本检查、下载恢复、安装授权与同签名覆盖安装。
- 教务自动同步验收清单:登录入口、请求去重、重建、超时与缓存隔离检查。
- 多课表管理验收清单:升级迁移、数据隔离、导入目标与提醒联动。
- 清透布局验收清单:布局、手势、设置与覆盖升级的手动验证步骤。
- 发布说明:查看各版本更新内容。
- 维护者:study-233
- 邮箱:mrtaoyx@gmail.com
- 问题与建议:GitHub Issues
反馈时请附上应用版本、Android 版本、问题描述和复现步骤;截图或日志中请遮挡学号、姓名和登录信息,不要发送密码或会话凭证。
本项目基于 coderirse/BeikeSchedule,原作者为 caeamer。BeikeSchedulePro 由 study-233 维护,以下保留原项目版权声明:
© 2026 caeamer. All rights reserved.