Sleepy 和 WakeUp 课程表是什么关系?
没有隶属关系。Sleepy 是独立的开源 Android 项目,有自己的代码库和维护者。两者只在数据格式层面兼容:Sleepy 可以导入 WakeUp 导出的 JSON / 分享文本,也可以导出 WakeUp 兼容 JSON。
以下回答只覆盖当前发布物能核实的事实。
没有隶属关系。Sleepy 是独立的开源 Android 项目,有自己的代码库和维护者。两者只在数据格式层面兼容:Sleepy 可以导入 WakeUp 导出的 JSON / 分享文本,也可以导出 WakeUp 兼容 JSON。
免费,许可证是 GPL-3.0。没有广告、订阅、内购或付费等级。公开 APK 从 GitHub Releases 下载。
不需要账号、邮箱、手机号或学号。打开应用后可以直接手动建表,或导入已有课表。
课表和设置存储在本机。项目不集成 Firebase Analytics、Crashlytics、Sentry、Bugsnag、AppCenter、Bugly 等分析或崩溃上报 SDK,也不要求登录云端账号。教务导入会访问学校站点,节假日刷新会下载公共日期数据,版本检查和下载会访问 GitHub 或项目镜像;普通查看和编辑课表可离线完成。
项目由 Lingion 维护。Bug、新学校适配和功能建议请发到 GitHub Issues;讨论可发到 Discussions。提交教务问题时不要附账号、密码、验证码、Cookie、token 或个人课表。
最低 Android 8.0(API 26),target / compile SDK 为 37。正式应用包名为 com.lingion.sleepy,调试构建为 com.lingion.sleepy.debug,二者数据隔离。
构建版本从 Git 标签派生;无可用标签时回退到发布说明。已安装版本见应用「关于」,公开发布版本以 GitHub Releases 页面为准。
发布构建分别提供:
arm64-v8a:绝大多数新手机armeabi-v7a:32 位 ARM 设备x86_64:常见 Android 模拟器universal:包含所有上述 ABI;不确定架构时可选本仓库原生应用面向 Android。另有独立在线体验,不代表网页与原生 Android 的功能完全相同;原生平台支持以项目发布物为准。
先在学校选择页搜索全名/别名,或输入教务 URL 尝试识别。仍失败时,在 Issues 使用学校适配模板,提供学校教务系统地址、失败页面和操作步骤。不要提交任何登录凭据或未脱敏的个人数据。当前学校清单见 docs/schools-list.md;清单和协议会随适配更新。
应用在设备上的 WebView 中打开学校教务登录页,由用户自己输入凭据,再解析返回的课表页面或接口数据。Sleepy 不把教务账号密码写入课表数据库。导入失败时,排查材料也必须按项目适配指南脱敏。
当前解析器支持:
【来自WakeUp课程表】)sleepy-v1 格式解析器会按内容识别格式,不需要用户先选一个内部协议名称。旧的 WakeUp 数据格式继续保留兼容。
Sleepy 的原生纯文本交换格式,包含 chk 完整性字段,用于在导入导出时校验内容。它不是对旧 WakeUp 格式的替代要求;已有 WakeUp JSON、分享文本和 ICS 仍可继续导入。
课表可以导出为 WakeUp 兼容 JSON、WakeUp 分享文本、ICS 和 sleepy-v1。Android 10+ 将 JSON/ICS 写入 Download/Sleepy/;Android 8–9 使用应用缓存并经 FileProvider 分享,分享文本与 sleepy-v1 使用系统分享面板。作息表可导出 JSON 或 sleepy-v1。ICS 可交给系统日历、Google Calendar 或其他支持 iCalendar 的应用。
可以。在导出页选设备上的可写日历、日期范围,预览后确认;此操作才申请日历读写权限。可应用调课和日历提醒。实验性第 1 节闹钟取决于日历应用和账户支持。
「通用设置 → 数据迁移」导出 .sleepybackup,包含课表、作息表、偏好和小组件配置。恢复可选合并或覆盖;合并保留本机课表并追加,但同名偏好键采用备份值;覆盖只替换备份包含的课表与设置模块,包内缺失的偏好文件保留本机值。单张课表 JSON/ICS 不等于全量备份。
学校选择的定位按钮按需请求前台位置;提醒开启时请求通知,相关页面提供精确闹钟、电池优化、勿扰访问入口;写入系统日历请求日历读写;应用内更新安装需未知来源安装权限。普通离线查看课表不要求授予这些可选权限。
可以。多张课表独立保存,每张表可以有自己的开学日期、最大周数和节次时间表。
不会因为界面只显示一层就删除数据。冲突布局保留重叠课程,点击被遮挡区域可以查看其他课程;手动添加冲突课程时会展示星期、节次、周次和冲突课程信息。
撤回最近一次课表数据修改,重做可恢复刚撤回的操作。切换当前课表不是数据修改,不会被当作一条课程编辑记录。
可以。作息表支持手动逐节填写,也支持根据首节时间、每节时长、节数和课间模板推算时间。不同课表可以绑定不同作息表。
当前有五个 widget 家族:
它们按桌面尺寸提供固定尺寸变体,当前资源中有 13 个 widget 配置 XML。渲染使用同步 RemoteViews + Canvas。
旧版本使用 Glance 异步 SessionWorker 时,部分 ColorOS 桌面会冻结该工作线程。v1.0.29 起主渲染路径改为同步 RemoteViews + Canvas。若仍不刷新,检查桌面权限、省电限制和通知权限,并先手动刷新 widget。
主题颜色来自应用的主题设置,课程颜色按稳定的黄金角 HSL 分布生成。刷新应用主题后,应用会广播 widget 更新;如果桌面仍显示旧内容,移除并重新添加 widget,或检查系统对后台和桌面组件的限制。
课前提醒支持输入 1 到 999 分钟,不限于几个固定选项。今日摘要、明日摘要和课前提醒在「我的 → 提醒」中分别设置。
节假日与调课映射在通用设置中管理,各课表单独保存调课。提醒页独立配置日期规则,并可在授予系统勿扰访问后启用上课自动勿扰、下课恢复。流体云属于实验能力,显示效果受系统和厂商支持影响。
不是。提醒在设备本地调度,使用 AlarmManager,并在 Android 版本允许的范围内提供精确与非精确路径;设备重启或应用更新后由 BootReceiver 恢复调度。
应用的提醒总开关关闭后不会主动安排新的提醒。Android 系统通知权限仍由系统设置控制;若通知被系统或厂商省电策略拦截,需要在系统设置里恢复权限。
「我的 → 外观与主题」支持跟随系统、浅色和深色模式。Android 12 及以上可以使用 Material You 壁纸动态色;不支持动态色的设备使用预设主题色。
可以创建和编辑自定义主题,设置主色、次色、第三强调色以及表面色调。编辑当前正在使用的自定义主题并保存后,颜色会立即重新应用,不需要先点击其他主题卡片再点回来。
选中指示器使用固定尺寸槽位,选中和未选中状态应保持相同卡片布局尺寸;选中态通过颜色层级和对勾表达。
需要 JDK 17。Linux / macOS:
git clone https://github.com/lingion/sleepy.git
cd sleepy
./gradlew assembleDebugWindows 使用 gradlew.bat assembleDebug。Debug APK 位于 app/build/outputs/apk/debug/,ABI 拆分构建会生成对应 ABI 文件。
./gradlew testDebugUnitTest测试源码位于 app/src/test/,覆盖解析器、课表数据、冲突布局、周次计算、widget 逻辑、主题契约和导入导出等模块。不要把本机真实账号、教务会话或个人课表放入 fixture。
先读 CONTRIBUTING.md 和对应的项目 SOP,再提交一个边界清楚的变更。新学校适配必须补协议证据、脱敏 fixture 和测试。提交作者邮箱使用项目约定的 [email protected],commit 不添加 Claude 的署名尾注。