Files
android-client/AGENTS.md
2026-09-04 17:54:27 +08:00

70 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 明缘进阶场 Android 客户端
「明缘进阶场」的 Android 客户端(`com.mingyuan.android_client`),对接 `wechat-backend` 提供的 auth / checkin / plan / course-vote / survey / feedback / profile API。当前处于**基础建设阶段**:多模块骨架已就绪,各 feature 为空占位,尚未接入真实后端。
## 快速开始
```bash
./gradlew :app:assembleDebug # 构建调试 APK
./gradlew test testDebugUnitTest # 运行单元测试(JVM + Android)
bash scripts/verify.sh # 完整验证(格式 / 测试 / 构建 / 架构检查)
```
## 架构概览
多模块 NIA 架构:`app` 是组合根(Hilt 入口 + 单一 `AppNavHost`),`feature/*` 承载各业务界面,`core/*` 提供共享能力。依赖方向严格单向,由 `verifyArchitecture` Gradle 任务强制执行(违规即失败)。详见 [docs/architecture.md](docs/architecture.md)。
## 目录结构
```
app/ 组合根:MingyuanApplication、MainActivity、AppNavHost
core/common 纯 Kotlin 工具(无 Android 依赖)
core/model 领域模型(纯 Kotlin)
core/domain UseCase + Repository 接口(纯 Kotlin)
core/data Repository 实现,编排 network/database/datastore
core/network Retrofit/OkHttp、DTO、序列化
core/database Room 实体 / DAO / 数据库
core/datastore DataStore 偏好
core/designsystem 主题 / 颜色 / 字体 / 通用组件
core/ui 共享 Compose UI + 导航辅助
feature/* 业务功能(auth/checkin/plan/course/survey/feedback/profile)
build-logic/ 约定插件(mcl.*)+ verifyArchitecture
docs/ 架构 / 规范 / 决策记录(见下方文档地图)
scripts/verify.sh 确定性验证脚本
```
## 关键约定
1. **依赖方向单向**:`app → 所有`;`feature/* → core(ui/designsystem/domain/model)`;`core:data → domain/model/network/database/datastore`;`core:model`/`core:domain` 保持纯 Kotlin、不依赖 Android。新增模块或跨层依赖必须同步更新 `build-logic` 的 `RootPlugin.kt` allow-list 与 `docs/architecture.md`。
2. **版本唯一事实源**:所有依赖版本在 [gradle/libs.versions.toml](gradle/libs.versions.toml),禁止在模块里硬编码版本号。
3. **模块配置走约定插件**:每个模块只声明 `mcl.*` 插件 + namespace,不要手写 `android {}` 模板代码。新增模块/插件流程见 [build-logic/convention/DESIGN_NOTES.md](build-logic/convention/DESIGN_NOTES.md)。
4. **确定性格式化**:`spotlessCheck` 必须通过(ktlint 规则在 [.editorconfig](.editorconfig));提交前用 `./gradlew spotlessApply` 修正。
5. **命名空间规则**:`com.mingyuan.android_client.<路径点分>`(如 `feature:checkin` → `com.mingyuan.android_client.feature.checkin`)。
6. **验证优先于声称完成**:任何"完成/通过"声明都必须以 `scripts/verify.sh` 的新鲜输出为证据。
7. **Commit 格式**:`type(scope): description`,一次提交一个变更集。
8. **新 feature 模式**:在 `feature/<name>/` 下用 `mcl.android.feature` 插件,暴露 `<Name>Screen` 组合函数 + `<NAME>_ROUTE` 路由常量 + `<Name>ViewModel`,并在 `app` 的 `AppNavHost` 注册路由。
9. **Git 分支流**:`feature/<name>` 从 `dev` 拉、merge 回 `dev`;`dev` 稳定后经确认再 merge 到 `main`(详见 [docs/gitflow.md](docs/gitflow.md),决策记录 ADR-0005)。
## 文档地图
| 主题 | 文档 |
|------|------|
| 架构与模块依赖 | [docs/architecture.md](docs/architecture.md) |
| 编码规范 / 命名 / commit | [docs/conventions.md](docs/conventions.md) |
| Git 分支策略(简化版 GitFlow) | [docs/gitflow.md](docs/gitflow.md) |
| 测试策略与命令 | [docs/testing.md](docs/testing.md) |
| 构建 / 签名 / 发布 | [docs/deployment.md](docs/deployment.md) |
| 工作状态与遗留项 | [docs/progress.md](docs/progress.md) |
| 架构决策记录(ADR) | [docs/decisions/](docs/decisions/) |
| 约定插件设计说明 | [build-logic/convention/DESIGN_NOTES.md](build-logic/convention/DESIGN_NOTES.md) |
| domain 层设计说明 | [core/domain/DESIGN_NOTES.md](core/domain/DESIGN_NOTES.md) |
## 常见任务
| 任务 | 做法 |
|------|------|
| 新增一个 feature 模块 | 建 `feature/<name>/` + `mcl.android.feature` + Screen/ViewModel,在 `RootPlugin.kt` 与 `settings.gradle.kts` 注册,更新 `docs/architecture.md` |
| 新增一个依赖 | 加进 `gradle/libs.versions.toml`,模块里用 `libs.xxx` 引用 |
| 修改模块依赖关系 | 改对应模块的 `build.gradle.kts`,跑 `./gradlew verifyArchitecture` 确认不违规 |
| 本地完整验证 | `bash scripts/verify.sh` |