概览
什么是 Sleepy
Sleepy 是一个干净、无广告的 Android 大学课表应用。你可以从学校的教务系统导入课表、在手机桌面添加小组件、在不同的主题配色之间切换、以及选择你习惯的界面语言。Sleepy 完全离线运行——所有课表数据存储在你手机的本地 Room 数据库中,不需要网络连接。不收集任何用户数据,不接入任何第三方统计 SDK 或广告 SDK。代码在 GitHub 上以 GPL-3.0 开源协议发布,任何人都可以查看、修改和分发。支持 Android 7.0(API 24)及以上版本。
打开 App 后你会看到什么
底部导航栏有 4 个标签页,从左到右依次排列:
课表(Schedule)
这是 App 的主视图——展示你一整周的课程安排。界面顶部是一排星期标题(周一、周二……周日),左侧是一列时间标签(第 1 节、第 2 节……按照你设定的作息时间表来显示),中间区域是彩色的课程色块。每个色块的位置精确对应这门课的星期和节次——周一第 1-2 节的课就在"周一"那一列、第 1 节和第 2 节之间的位置。左右滑动课表区域可以切换到上一周或下一周的课表。点按任意一个课程色块会弹出底部面板,显示这门课的详细信息——点击面板上的"编辑"按钮进入编辑页面修改课程信息,点击"删除"按钮从课表中移除这门课。长按课程色块直接跳转到编辑页面。右上角两个按钮分别是"导入课表"和"手动添加课程"的快捷入口。
今日(Today)
只展示今天要上的课程,按照上课时间从早到晚依次排列。每门课以列表项的形式呈现——左侧是这门课的颜色条(和在完整周视图中显示的色块颜色一致),右侧从上到下依次显示课程名称(大字加粗)、教师姓名(小字灰色)、教室编号(小字灰色)、上课时间(小字灰色)。这个视图是每天早晨出门前最实用的页面——打开 App 切换到"今日"标签,一眼就能看到今天有什么课、几点上、在哪上。
管理(Manage)
操作中心,集中了所有和课表数据管理相关的功能。页面提供 4 个操作入口,以大按钮的形式垂直排列:
- 导入课表——从学校教务系统自动抓取课表数据(支持 9 种中国大学教务系统协议),或者从文件、剪贴板文本中解析课表(支持 6 种常见文件格式)。导入前会先展示预览页面让你核对数据
- 新建课表——创建一张全新的空白课表。你需要输入课表名称(例如"2025-2026 学年第一学期课表")、选择学期起始日期(通常是开学第一周的周一)、设置总教学周数(通常 18-20 周)。创建完成后课表是空的,需要导入或手动添加课程
- 手动添加——逐门课程手动录入。适合只需要添加少量课程、教务系统暂不可用、或者课程信息比较特殊需要精确控制的场景。你可以设置课程名称、教师、教室、时间、周次和自定义颜色
- 编辑当前课表——修改当前正在使用的课表的名称、学期起始日期、总教学周数和作息时间表(每天几点开始上第一节课、一节课多长时间、课间休息多久)
我的(Mine)
设置和个人数据概览页面。从上到下依次排列以下功能和信息:
- 页面顶部展示三张统计卡片——你一共创建了多少张课表、当前课表中有多少门课程、当前是第几教学周(根据学期起始日期和今天的日期自动计算,公式为:今天减去起始日期再除以 7 加 1)
- 全部课表——查看和切换所有已创建的课表。你可以在这里从上学期的课表切换到这学期的课表,或者长按删除不再需要的旧课表。注意:删除课表会同时删除其中包含的所有课程数据,操作不可撤销。建议在删除前先用"导出课表"保存一份备份
- 导出课表——将当前课表导出为 Sleepy 的 JSON 交换格式文件。这个文件包含了课表的所有信息——名称、学期日期、作息时间表、以及所有课程数据。你可以把文件通过微信、QQ 或邮件发送给同学,对方在 Sleepy 中用"导入课表"功能打开这个文件就能看到和你完全相同的课表
- 课程提醒——配置两种类型的通知:每日课程汇总(在每天设定的时间推送一条通知,列出今天有哪些课、分别在哪个教室、几点到几点。默认触发时间是凌晨 00:05——设在零点零五分而不是零点,是为了避开零点时大量 App 集中执行定时任务造成的系统拥堵)和每节课前提醒(在每节课开始前 N 分钟推送通知,N 的值可以在 1 到 60 之间自由设置)
- 深色模式——开关按钮。开启后所有页面的背景切换为接近纯黑的深色,文字切换为暖白色。课程色块的饱和度会自动提高,保证在深色背景上仍然鲜明可辨。关闭后饱和度会降低,避免在白色背景上过于刺眼
- 主题颜色——5 套预设主题配色方案(Default 蓝色调、Spring 绿色调、Ocean 蓝绿色调、Peach 橘粉色调、Slate 灰蓝色调),每套在浅色和深色模式下各有 31 个颜色值。外加 KEY_SYSTEM 选项(需要 Android 12 及以上版本),选中后 App 会使用 Material You 动态取色引擎,从你的手机壁纸中自动提取主色调来生成专属的主题配色——换一张壁纸,App 的主题色也会跟着变
- 刷新小组件——手动触发所有桌面小组件的即时内容更新。正常情况下小组件由 WorkManager 每 15 分钟自动刷新一次,这个按钮让你可以随时强制刷新而不用等待下一个调度周期
- 更多设置——包含界面语言的切换(简体中文、繁体中文、英语、日语、西班牙语共 5 种语言,切换后即时生效无需重启 App)、课表显示模式、可见星期几的选择(比如你周末从不上课,可以取消勾选周六和周日,课表视图自动调整为 5 列而非 7 列)、作息时间表编辑器(手动逐节填写每一个节次的时间,或使用 SmartPeriodConfig 引擎输入 4 个参数自动推导出全部时间表)
- 关于——查看 App 的版本号、开源协议信息(GPL-3.0)、GitHub 仓库链接、以及项目中使用的第三方开源库列表和它们的许可证信息
功能概览
| 功能 | 说明 |
|---|---|
| 教务系统导入 | 支持 9 种中国大学教务系统协议,通过 WebView 内嵌浏览器登录后自动抓取课表数据,覆盖数百所学校 |
| 文本/文件导入 | 粘贴课表文本或选择文件,自动检测 6 种格式(WakeUp 分享文本 / JSON / ICS 日历 / CSV 表格 / HTML 网页 / 纯文本),无需手动指定格式 |
| 桌面小组件 | 4 种类型:Today(今日课程,3×2 格)、TwoDay(今明两天,4×2 格)、WeekList(一周课程数量统计,4×2 格)、WeekGrid(完整时间网格缩略图,4×5 格) |
| 多课表管理 | 可创建多张课表分别管理不同学期或不同班级的课程,随时切换。当前使用的课表决定了 App 和所有小组件显示的内容 |
| 主题配色 | 5 套预设主题 + Material You 壁纸动态取色(Android 12+)+ 深色模式,课程色块的饱和度自动随模式调整 |
| 多语言界面 | 简体中文 / 繁体中文 / 英语 / 日语 / 西班牙语,共 5 种语言。切换后即时生效,不需要重启 App |
| 通知提醒 | 每日课程汇总推送(在设定时间发送当天所有课程的列表)+ 每节课前 N 分钟提醒(N 自由设置),使用 AlarmManager 实现精确到分钟的闹钟触发 |
| 三种导入模式 | 替换当前课表(清空后全部替换)、另存为新课表(保留原课表,新数据放入独立的新课表中)、追加不冲突课程(只导入和现有课程没有时间冲突的课程,冲突的自动跳过) |
下一步
从导入课表开始,把你的课程数据导入到 App 中。
参见:技术博文:构建 Sleepy——深入解析课表解析引擎的内部原理、黄金角 HSL 颜色分配算法、Wisedu 教务系统协议的逆向工程过程,以及小组件渲染管线的技术细节。