轻课表 2.0 的 Kotlin Multiplatform + Compose Multiplatform 工程,已作为仓库主工程(原 legacy Android 工程 app/ 已移除,历史保留在 git 中)。
- Kotlin 2.4.10
- Compose Multiplatform 1.11.1
- Room 3.0.1 KMP + bundled SQLite
- DataStore Preferences 1.2.1
- Ksoup 0.2.6 KMP
- Android、Desktop、iOS device/simulator targets
core:纯 Kotlin 领域模型、仓储端口、周次/作息/倒计时/冲突/配色算法、v1 分享主体协议和共享测试。importing:跨平台强智 HTML 解析边界,仅依赖core与 Ksoup。data:Room/DataStore、实体映射、事务仓储、真实文件迁移测试和三端路径适配。composeApp:共享 UI、会话状态、自适应导航、数据交换页和全局设计系统;commonMain不依赖持久化模块。androidApp:Android 应用壳;承载通知、WebView、相机/相册扫码、小组件和应用内更新等平台能力。
AGP 9 不允许在同一模块混用 Android Application 与 Kotlin Multiplatform 插件,因此共享模块使用 com.android.kotlin.multiplatform.library,Android 应用入口保持独立。
- 首页、周课表、数据、设置四个共享页面;小屏底部导航与宽屏侧边栏自适应。
- 统一浅色/深色主题(300ms 动画过渡)、设计令牌、课程色板、卡片与页头组件;一套 Formal 设计语言(
AppScreenHeader/AppElevatedCard/AppTopAppBar)。 - 页面过渡动效:tab 级 700ms 淡入淡出、课程编辑页 300ms 横滑(与正式版 NavHost 语义一致)。
- 课程、学期、作息 CRUD,课程时间冲突校验,相邻课程贪心配色。
- 每 30 秒刷新的当前周/倒计时;作息不完整时使用默认 45 分钟模板回退。
- Room v3 和旧 v1→v2→v3 迁移;真实 SQLite 重开、v1 文件迁移、整学期原子导入与 DataStore 文件回归测试。
- 强智课表 HTML 跨平台解析,采用"解析预览→确认覆盖"流程;HTTP 教务支持(edu.cn 明文白名单)。
- 与旧版 v1 字节布局一致的二进制分享主体,以及跨平台
LS2.文本交换码;字段、课程数、解压后大小边界均集中定义。 - Android HTTPS WebView 登录与强智课表自动提取;保留粘贴 HTML 回退路径。
- Android 旧版 raw-Deflate/Base64URL 二维码生成,兼容
LS2.扫码,相机与相册识别。 - Android 课程提醒、Android 13+ 通知权限、重启/时区变化后恢复,以及今日课表桌面组件。
- Android HTTPS 应用内更新、APK 大小/类型/SHA-256 校验、FileProvider 安装;更新源默认为关闭。
需要 JDK 17。Android 构建使用 SDK Platform 36.1;iOS Framework 需要 macOS + Xcode。
.\gradlew.bat --no-daemon :core:desktopTest :importing:desktopTest :data:desktopTest
.\gradlew.bat --no-daemon :composeApp:compileKotlinDesktop
.\gradlew.bat --no-daemon :androidApp:assembleDebug
.\gradlew.bat --no-daemon :androidApp:testDebugUnitTest :androidApp:lintDebug
.\gradlew.bat --no-daemon :composeApp:runAndroid debug APK:androidApp/build/outputs/apk/debug/androidApp-debug.apk。
Android 壳使用正式包名 com.cacl2.schedule,版本与正式版保持为 versionCode 7 / versionName 1.5.0。Room 表名、字段、数据库名 schedule_database、DataStore 文件名 schedule_settings.preferences_pb 和旧键名保持兼容,覆盖安装后会直接读取原应用沙箱数据。
Release 必须使用旧正式版的原始签名证书;仅有相同包名、版本号或密码仍不足以覆盖。构建脚本支持用 scheduleKeystorePath、scheduleKeystoreAlias 和临时环境变量 SCHEDULE_KEYSTORE_PASSWORD/SCHEDULE_KEY_PASSWORD 注入签名。发布前仍必须按 迁移清单 完成真机覆盖安装、回滚和备份恢复验证。
Android 平台壳已补齐 WebView 自动提取、旧版兼容二维码/扫码、课程通知、今日课表组件和应用内更新。教务 WebView 与更新源均为 HTTPS-only;纯 HTTP 教务站仅在 edu.cn 域白名单内放行(见 androidApp/src/main/res/xml/network_security_config.xml)。
更新检查在没有配置源时保持关闭。构建时可传入:
.\gradlew.bat --no-daemon :androidApp:assembleRelease -PscheduleUpdateUrl=https://example.edu/update.jsonupdate.json 包含 versionCode、versionName、downloadUrl,可选 changelog、forceUpdate、fileSize、sha256;下载地址也必须为 HTTPS。仍待平台侧完成的是 iOS 通知/原生扫码适配,以及 iOS Xcode 宿主、签名和真机 UI 测试。
这些能力不会反向进入 core 或共享 UI;平台只通过窄接口接收已验证的领域数据。