视频加载失败

ManyCourse 开源项目学习指南:从零到一看懂 Kotlin Android 课表应用

1311 字
7 分钟
ManyCourse 开源项目学习指南:从零到一看懂 Kotlin Android 课表应用

前言#

ManyCourse(课多多)是一款原生 Android 大学生课表 App。填一次学号密码登录学校教务系统,姓名、课表、教学周自动同步到手机,配一个周视图课表 + 月历 + 校园地图。

它的代码体量适中、架构清晰、注释充分,非常适合作为从零开始学习 Kotlin + Android 开发的实战项目。本文是一份完整的学习路线指南,帮你规划从 “看不懂代码” 到 “能动手改、能加学校” 的全过程。

Note

本文围绕 ManyCourse 项目展开,但其中涉及的 Kotlin 语法、分层架构思想、异步编程模式,对学习任何一个 Android 项目都有帮助。


三句话认识这个项目#

  1. 它是什么:原生 Android 大学生课表 App,支持多所学校教务系统自动同步。
  2. 它用什么写:Kotlin 2.2 + Jetpack Compose(Material 3 玻璃拟态 UI)+ OkHttp 5(网络),没有 Retrofit、没有数据库框架,依赖极简。
  3. 它最大的特点:把「一所学校」抽象成一个 SchoolApi 接口,加新学校只需新增一个文件 + 注册一行,UI 完全不用改。

推荐学习顺序#

顺序文章内容适合谁预计耗时
1Kotlin 语法速成用项目代码讲 Kotlin 语法完全没写过 Kotlin 的人2-3 小时
2项目架构详解四层设计 + 数据流已过完语言、想看全貌的人1-2 小时
3核心代码导读逐文件逐行精读准备深入源码的人3-4 小时
4动手练习从改数据到加学校想动手实践的人4-8 小时

每遍之间隔一两天,记忆更牢。卡住了就回到项目 README——README 是写给”想加学校的开发者”的,细节非常详尽。

如果只想尽快把项目跑起来,跳过前三篇,直接看 动手练习 的第一节「把项目跑起来」。


项目技术栈一览#

层级技术说明
语言Kotlin 2.2Google 官方推荐的 Android 开发语言
UIJetpack Compose + Material 3声明式 UI,玻璃拟态风格
网络OkHttp 5纯 OkHttp,无 Retrofit 封装
加密RSA / SM2 / AES各校教务系统密码加密
构建Gradle (KTS)Kotlin DSL 构建脚本

从学习角度来说,这个技术栈非常”干净”——没有过度封装,每行代码都能追溯到它为什么存在。


需要准备什么#

  • 会一点英文单词(编程关键字都是英文);
  • 一台能装 Android Studio 的电脑(想跑起来的话);
  • 耐心。零基础读代码,第一遍不懂很正常,照着文档翻第二遍就通了。

环境要求#

需要版本
JDK17 或以上(项目在 JDK 21/25 上验证过)
Android SDKPlatform 37 + Build-Tools 36
Android Studio最新稳定版

项目代码在哪#

项目开源在 GitHub:https://github.com/ksayus/ManyCourse

克隆后,用 Android Studio 打开项目根目录(不是某个文件),Android Studio 会自动生成 local.properties 并同步 Gradle 依赖。

跑不起来多半是:SDK 没装 Platform 37、JDK 太老、local.properties 缺 sdk.dir。对照项目 README 的排查表逐一检查即可。


核心概念预览#

在深入阅读之前,先记住三个最核心的概念,它们贯穿整个项目:

SchoolApi 接口 —— 项目的”心脏”#

一所学校就是一个 SchoolApi 的实现。它定义了登录、拉课表、拉姓名等操作。现有 3 所学校的接入(广软、金城学院、广工),每所学校一个文件。

CourseRepository —— 全局课程仓库#

一个 object 单例,用 Compose 的 mutableStateListOf 存储课程。一旦数据变了,所有用到它的界面自动重画——不需要手动刷新。

SchoolRegistry —— 唯一的”加学校”入口#

一个清单列表,列出所有已接入的学校。登录页下拉、会话持久化、登录分发——全都由它驱动。加学校 = 在列表里加一行。


两条铁律(改代码前必读)#

项目 README 中强调过的两条规则,零基础最容易踩:

  1. 学校 id 是持久化主键,定了不许改——它存在本地 SharedPreferences 里,“上次选的学校”靠它恢复。改了就等于清空老用户的选择。全小写英文短名。
  2. 加接口不要新建 HttpMethod 实例——Cookie 会话挂在 SchoolApi 实例上,新建实例等于空会话,接口必然被认为”没登录”。

系列文章导航#

本系列共四篇文章,建议按顺序阅读:

  1. Kotlin 语法速成 —— 用 ManyCourse 项目真实代码讲 Kotlin 语法,每个语法点都指回项目源码。零基础必读。
  2. 项目架构详解 —— 四层设计(ui / data / gr_api / api)、一次登录的完整数据流。想看懂全貌必读。
  3. 核心代码导读 —— 逐文件逐行精读最关键的 5 个源码文件。准备深入源码必读。
  4. 动手练习 —— 从改一行数据到加一所学校的 7 道实战练习。想动手实践必读。

快速跳转:如果你是零基础,从第 1 篇开始;如果你已有 Kotlin 经验,直接跳到第 2 篇;如果只想尽快跑起来,直接看第 4 篇的第一节。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

ManyCourse 开源项目学习指南:从零到一看懂 Kotlin Android 课表应用
https://ksayus.top/posts/manycourse-learning-guide/
作者
Ksayus
发布于
2026-09-28
许可协议
GPLv3
随机文章随机推荐

评论区

Profile Image of the Author
Ksayus
细碎的美好也是生活的意义
Ksayus の 猫窝
This is Ksayus`s blog, is will be write some tech article.
分类
标签
最新动态
站点统计
文章
35
分类
7
标签
111
总字数
58,408
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.8
文章许可
GPLv3
文章目录