岱宗盒子 —— 给交大人做的 Android 校园工具箱
字数:785   |   时长:3分钟   |   阅读:
  1. 📶 能做什么
  2. 🛠️ 技术选型
  3. 🔧 构建
  4. 🤖 感谢 AI 们
  5. 🙏 致谢
  6. 📍 现在的状态
  7. 废话

第一次安卓开发,全程Vibe Coding,实践证明AI无敌。

做了个 Android App,叫岱宗盒子。 名字取自「会当凌绝顶,一览众山小」——岱宗是泰山的别称,也是交大里那栋图书馆楼的气质 神秘沙东小群,我爱岱宗,我爱盒子👅 仓库:yeliqin666/xjtu-toolbox-android

📶 能做什么

模块功能
🔐 统一认证CAS 登录(RSA 加密 + MFA 手机验证码),支持本科/研究生账户
🌐 WebVPN自动检测校内/校外,校外走 webvpn.xjtu.edu.cn
📅 课表周视图,带考试安排和教材信息
📊 成绩JWAPP 正式成绩 + FineReport 报表,绕过评教限制
✅ 考勤全 20 周流水,正常/迟到/缺勤统计
🏫 空闲教室按节次筛选,CDN 数据不需要登录
💳 校园卡余额 + 月度消费图表
📚 图书馆座位预约、在座/续座/签退
📢 通知公告一网通办 + 各学院通知聚合
📝 评教一键评教
🎓 研究生GMIS 系统接入

🛠️ 技术选型

纯 Kotlin + Jetpack Compose,目标是 Android 12+(API 31),Release 包 R8 压缩后约 4.4MB。

1
2
3
4
5
Kotlin 2.0
Jetpack Compose + Material 3 (Material You)
OkHttp 4.12 + Brotli 压缩
Jsoup 1.18(HTML 解析)
AGP 9.0 + Gradle 9.2

网络部分有点复杂:校园卡是公网,不需要 WebVPN;考勤和图书馆是校内服务,校外自动走 WebVPN 代理;空闲教室走 CDN,不需要任何认证。每个模块的登录态独立维护。

🔧 构建

1
2
3
4
5
# Debug
./gradlew assembleDebug

# Release(R8 压缩,约 4.4MB)
./gradlew assembleRelease

推 tag 后 GitHub Actions 自动构建并发 Release:

1
2
git tag v1.0-alpha
git push origin v1.0-alpha

🤖 感谢 AI 们

开发过程一言难尽。全程 Vibe Coding,在 ChatGPT、Gemini、Claude、豆包之间反复横跳,每次满怀希望地遇到报错,换来一段跑不通的新代码。修一个 bug 的流程大概是:问 ChatGPT → 新 bug → 问 Claude → 绕回原 bug → 问 Gemini → 发现是个拼写错误。经典开发链,最后摆烂让Agent和SubAgent博弈。

感谢 ChatGPT、Gemini、Claude、豆包,感谢你们前赴后继帮我写了那么多跑不通的代码,最终共同造就了这个 App(以及这篇Blog)。

🙏 致谢

核心算法参考了 Python 项目 XJTUToolBox@yan-xiaoo),包括 CAS 登录流程、WebVPN 加解密、FineReport 报表解析、空闲教室 CDN 数据、学期时间计算等。感谢!

📍 现在的状态

v1.1-beta,能跑,主要功能都有,部分细节还在打磨。后续想做的:

  • 图书馆定时抢座
  • 智能抢课
  • 通知订阅 + Push
  • 思源学堂解析版

废话

一开始想用的是HyperOS主题或者直接用HyperOS等OEM的控件,后来发现这种模式需要写大量xml和调试布局,效率太低了。转 Jetpack Compose 之后开发效率提升了一个数量级,至少对AI来说

Compose 的声明式 UI 对 AI 非常友好,感觉比传统 View 好写得多。Material You 的动态配色直接就能用,不用自己调 Token。就是 AGP 9.0 配置坦荡,踩了几个坑。

遇到问题欢迎 issue,或者评论区见。

上一篇 晴纸 —— 我的博客主题开源了 下一篇 人民日报一键下载 - Python 增强版