docs: harness 工程文档

This commit is contained in:
AndyChen1024
2026-09-03 19:03:35 +08:00
parent 914daa19ac
commit 1b6f6d53ad
11 changed files with 388 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
# ADR 0001:多模块 NIA 架构,feature 单模块(不做 api/impl 拆分)
- **状态**:已接受
- **日期**:2026-09-03
## 背景
项目从单模块 Compose 模板起步,需要确立可扩展、可测试、可维护的架构基础。
## 决策
采用 Google Now in Android(NIA)风格多模块架构:`app`(组合根)+ `core/*`(共享能力)+ `feature/*`(业务功能)。每个 feature 用**单模块**,不做 nowinandroid 的 `feature:*/api` + `feature:*/impl` 拆分。
## 理由
- 依赖方向单向、职责清晰,符合参考项目 `nowinandroid` 与 `app_device` 的共识。
- 团队规模小、feature 间共享少,api/impl 拆分会带来额外模块与样板,收益有限。
## 后果
- 约定插件 `mcl.android.feature` 预置 feature 通用依赖,新增 feature 只需一个插件声明。
- 若未来 feature 间需要稳定 API 边界,再引入 api/impl 拆分(成本可控)。

View File

@@ -0,0 +1,23 @@
# ADR 0002:约定插件 + 版本目录作为唯一配置事实源
- **状态**:已接受
- **日期**:2026-09-03
## 背景
多模块项目若在每个模块手写 `android {}` 模板,会出现配置漂移、版本不一致、样板重复。
## 决策
- **约定插件**(`build-logic/`,included build):提供 `mcl.*` 插件,集中编码 compileSdk/minSdk、Java/Kotlin target、Compose、Hilt、Room、Lint、Spotless 等配置。模块只声明插件 + namespace。
- **版本目录**(`gradle/libs.versions.toml`):所有依赖版本唯一事实源,主构建与 build-logic 共用。
## 理由
- 把"严谨性"编码进确定性规则(harness-engineering 的"严谨性转移"原则),而非依赖人工记忆。
- 一个版本改一处,全项目生效。
## 后果
- 新增/调整模块配置需改 build-logic;新增依赖需改版本目录。
- 好处:`verifyArchitecture` 等约束可挂在约定插件体系里统一执行。

View File

@@ -0,0 +1,23 @@
# ADR 0003:工具链与版本选型
- **状态**:已接受
- **日期**:2026-09-03
## 背景
需要为一套现代化 Android 技术栈锁定版本。项目原本是 AGP 9.4.0 + Kotlin 2.2.10 + Gradle 9.6.0。
## 决策
- **保留**:Gradle 9.6.0(wrapper)、AGP 9.4.0、compileSdk/targetSdk 37、minSdk 28、Compose BOM 2026.02.01。
- **对齐 nowinandroid 已验证矩阵**:Kotlin 2.3.0、KSP 2.3.4、Hilt 2.59、Room 2.8.3、Retrofit 2.11.0、OkHttp 4.12.0、kotlinx-coroutines 1.10.1、kotlinx-serialization 1.8.0、Navigation Compose 2.8.5、DataStore 1.2.0、Lifecycle 2.10.0、truth 1.4.4、turbine 1.2.0、spotless 8.3.0、ktlint 1.4.0。
## 理由
- 采用 AGP 9 内置 Kotlin(不显式应用 `org.jetbrains.kotlin.android`),与项目原有模板一致,且经 nowinandroid 验证可与 KSP/Hilt/Room 共存。
- Kotlin 升到 2.3.0 是为了直接复用 nowinandroid 已证明可用的 KSP 2.3.4 / Hilt 2.59 / Room 2.8.3 组合,避免为旧 Kotlin 猜测 KSP 补丁版本。
## 后果
- 全量构建已验证通过(`:app:assembleDebug`)。
- 若未来 AGP 升级改变内置 Kotlin 行为,需回归验证 KSP/Hilt/Room 兼容性。

View File

@@ -0,0 +1,22 @@
# ADR 0004:包名与显示名
- **状态**:已接受
- **日期**:2026-09-03
## 背景
项目原有包名 `com.mingyuan.android_client`(applicationId 与 namespace),显示名 `android-client`。
## 决策
- **保留包名** `com.mingyuan.android_client`(避免牵连改动),仅把显示名 `app_name` 改为「明缘进阶场」。
- 模块命名空间沿用 `com.mingyuan.android_client.<路径点分>`。
## 理由
- 重命名 applicationId/namespace 会牵连 manifest、包目录、DI 组件等;基础建设阶段优先把架构骨架跑通。
- 下划线命名虽不符合惯例,但不影响构建与运行,作为已知小问题保留。
## 后果
- 显示名已是「明缘进阶场」;包名中的下划线如需规范化,可在后续单独决策并一次性迁移。