广东第二师范学院校园助手的安卓客户端,Kotlin + Jetpack Compose 编写。当前版本 2.0.0-PRO。
这个仓库只有客户端。成绩、课表、校园卡这些数据来自 GdeiAssistant 后端,本仓库不包含服务端代码和部署配置。项目由学生维护,不是学校官方服务。
| 模块 | 内容 |
|---|---|
| 教务 | 成绩、课表、四六级、考研、教室、教学评价、图书馆 |
| 校园卡 | 余额查询、充值、挂失、电费 |
| 生活 | 二手交易、全民快递、失物招领、校园树洞、卖室友、表白墙、校园话题、拍好校园 |
| 资讯 | 新闻通知、系统公告、互动消息、私信会话 |
| 社交 | 用户搜索与公开主页、关注/粉丝/互关、拉黑、四档私信接收设置 |
| 个人中心 | 登录与登录态恢复、资料与头像、绑定手机/邮箱、隐私设置、登录记录、数据导出、主题与字体、意见反馈 |
匿名树洞不暴露作者身份;社区作者主页只在非匿名内容上显示入口。
Kotlin · Jetpack Compose + Material 3 · Hilt · Retrofit + OkHttp + Gson · DataStore · EncryptedSharedPreferences · Coil · JWT
| 项 | 版本 |
|---|---|
| Android Studio | 最新稳定版 |
| JDK | 17 |
| Gradle | 9.6.1(使用仓库自带 wrapper) |
| Android Gradle Plugin | 9.3.1 |
| Kotlin | 2.3.21 |
| Android SDK | 35 |
| 设备 | Android 8.0 及以上 |
git clone https://github.com/GdeiAssistant/GdeiAssistant-Android.git
cd GdeiAssistant-Android
./gradlew :app:assembleDebug
./gradlew :app:installDebugAPK 输出在 app/build/outputs/apk/debug/app-debug.apk。
首次用命令行构建前,需要先生成 local.properties 并写入 sdk.dir。最简单的办法是用 Android Studio 打开一次项目完成 Gradle Sync,它会自动生成这个文件。
走 CI:在 Actions 页打开 Android Release,选 Run workflow,填 tag_name、version_name、version_code,可勾选 prerelease。工作流先跑 lint 和单元测试,再执行 assembleRelease 与 bundleRelease,成功后把签名产物发到 Releases。
签名所需配置(仓库 secret 或 environment):
| 名称 | 内容 |
|---|---|
ANDROID_KEYSTORE_BASE64 |
release keystore 的 base64 |
ANDROID_KEYSTORE_PASSWORD |
keystore 密码 |
ANDROID_KEY_ALIAS |
key alias |
ANDROID_KEY_PASSWORD |
key 密码 |
本地签名构建:
./gradlew :app:assembleRelease \
-PGDEI_RELEASE_STORE_FILE=/path/to/release-keystore.jks \
-PGDEI_RELEASE_STORE_PASSWORD="$ANDROID_KEYSTORE_PASSWORD" \
-PGDEI_RELEASE_KEY_ALIAS="$ANDROID_KEY_ALIAS" \
-PGDEI_RELEASE_KEY_PASSWORD="$ANDROID_KEY_PASSWORD" \
-PGDEI_VERSION_NAME=2.0.0-PRO \
-PGDEI_VERSION_CODE=2| 环境 | 地址 | 用途 |
|---|---|---|
dev |
http://10.0.2.2:8080/ |
模拟器连本机后端 |
staging |
https://gdeiassistant.azurewebsites.net/ |
演示环境 |
prod |
https://gdeiassistant.cn/ |
生产环境 |
Debug 构建可以在应用内切换环境和数据源;Release 构建固定 remote + prod,没有开关。命令行覆盖地址:
./gradlew :app:assembleDebug \
-PGDEI_BASE_URL_DEV=http://10.0.2.2:8080/ \
-PGDEI_BASE_URL_STAGING=https://gdeiassistant.azurewebsites.net/ \
-PGDEI_BASE_URL_PROD=https://gdeiassistant.cn/app/src/main/java/cn/gdeiassistant/
├── data/ 本地存储与仓库层
├── di/ Hilt 模块
├── model/ 领域模型
├── network/ Retrofit 接口与 mock 路由
├── service/ 后台服务
├── ui/ 按业务域拆分的 Compose 页面
│ ├── home/ messages/ social/ profile/
│ ├── grade/ schedule/ card/ book/
│ ├── marketplace/ lostfound/ secret/ dating/
│ ├── delivery/ express/ topic/ photograph/
│ └── navigation/
└── util/
remote 请求真实接口,mock 使用本地模拟数据。默认 DEFAULT_MOCK_MODE_ENABLED=false,即默认连真实后端。只有 Debug 构建能在关于页切换 mock;Release 构建被 SettingsRepository.canUseDemoMode() 和 canChangeNetworkEnvironment() 锁死为 remote + prod。
mock 数据只用于 UI 联调和回归验证,不是真实校园业务数据。测试账号密码不要写进公开发行说明。
四个组件分工:SessionManager 管当前用户、Token 和 Cookie 会话;TokenUtils 用 EncryptedSharedPreferences 做本地加密存储;AuthInterceptor 注入鉴权头;ResponseInterceptor 统一处理错误。
Retrofit + OkHttp 负责 API Service 注入、Bearer Token 注入、Cookie 持久化与线程安全、mock 路由分发、Gson 序列化,以及错误归一化。
底部三个 Tab:首页、消息、我的。业务页面按域组织成 service、community、information、account 四张导航图,方便各域独立迭代。
固定 Campus Green 品牌色,与 Web / iOS / 小程序四端一致,不使用 Material You 动态取色。用户可选浅色/深色/跟随系统,字体四档可调,偏好存在独立的 user_preferences DataStore 里。
客户端实现见 docs/social-messaging-implementation.zh-CN.md。数据契约以主仓设计文档为准。
见 CONTRIBUTING.md。安全问题请按 SECURITY.md 处理,不要在公开 Issue 里贴真实账号、验证码或密钥。
本项目不代表学校官方服务。面向用户的协议、隐私政策和功能风险提示,以 App 内「关于」「隐私」「校园凭证」等页面展示的内容为准,本 README 不替代这些正文。发布衍生版本前,请自行确认隐私处理、校园凭证管理、Android 权限说明、日志脱敏、密钥管理、签名配置和商标使用边界。