193 lines
8.5 KiB
Markdown
193 lines
8.5 KiB
Markdown
# AgentAdmin 开发规则
|
||
|
||
本仓库采用需求驱动的轻量开发流程。当前项目是内部系统,不设置额外的敏感数据规则、安全审批门禁、工单门禁、原型门禁或 Wiki 同步门禁。
|
||
|
||
## 1. 基本原则
|
||
|
||
- 以用户当前确认的需求为实施依据。
|
||
- 收到需求后,先分析目标、现状、范围、约束和验收方式。
|
||
- 存在多种实现路径或关键事实不明确时,先与用户讨论方案,不直接猜测。
|
||
- 方案确认后按确认方案实施;需求或方案发生变化时,先重新确认再继续。
|
||
- 只修改当前需求涉及的内容,不主动扩展无关功能或重构。
|
||
- 保留与当前需求无关的工作区改动,不重置、不覆盖。
|
||
- 测试结果必须真实;未执行或无法覆盖的验证必须明确说明。
|
||
|
||
## 2. 标准流程
|
||
|
||
1. **理解需求**:整理目标、输入、输出、范围、非目标和验收标准。
|
||
2. **检查现状**:读取相关代码、配置和文档,确认当前实现,不凭假设修改。
|
||
3. **分析方案**:说明模块边界、数据流、接口、持久化、异常处理和测试方式。
|
||
4. **讨论确认**:方案存在重要取舍、接口不明确或可能改变既有行为时,等待用户确认。
|
||
5. **实施改动**:按照确认方案进行最小且完整的实现。
|
||
6. **执行验证**:运行受影响范围的单元测试、构建或其他必要检查。
|
||
7. **交付说明**:列出改动文件、实现结果、验证结果和未完成或未验证事项。
|
||
|
||
对于范围清楚、实现方式唯一、容易回退的小改动,可以在完成分析后直接实施,不必重复请求确认。
|
||
|
||
## 3. 项目标识
|
||
|
||
- 仓库 / 项目名:`AgentAdmin`
|
||
- 当前 Android 子项目 Gradle 名:`AutoAgent`
|
||
- Android 包名 / Application ID:`cn.auto.agent`
|
||
- Kotlin namespace:`cn.auto.agent`
|
||
- 应用显示名:`Auto Agent`
|
||
- 无障碍服务显示名:`autoagent`
|
||
|
||
`AgentAdmin` 是仓库级项目名;其余为当前 Android 子项目的既有标识。未经用户明确要求,不修改 Android 标识。
|
||
|
||
## 4. 系统、Java 与依赖版本
|
||
|
||
### 开发环境基线
|
||
|
||
以下版本已在当前开发机实际核验:
|
||
|
||
| 项目 | 版本 / 路径 |
|
||
|---|---|
|
||
| 操作系统 | Windows 10,版本 `10.0.19045.3803`,amd64 |
|
||
| PowerShell 7 | `7.3.12`,有条件时优先使用 |
|
||
| Windows PowerShell | `5.1.19041.3803` |
|
||
| Java / JDK | Eclipse Temurin OpenJDK `17.0.13+11`,64 位 |
|
||
| Git | `2.49.0.windows.1` |
|
||
| Android SDK | `C:\Users\ila20\AppData\Local\Android\Sdk` |
|
||
|
||
开发和构建使用 Java 17;除非依赖升级明确要求,不自行切换 Java 主版本。Android SDK 的本机绝对路径只描述当前开发环境,不写入可提交的 `local.properties` 或业务代码。
|
||
|
||
### 构建工具版本
|
||
|
||
| 项目 | 版本 |
|
||
|---|---|
|
||
| Gradle Wrapper | `8.2` |
|
||
| Android Gradle Plugin | `8.2.0` |
|
||
| Kotlin Android Plugin | `1.9.22` |
|
||
| Java source compatibility | `17` |
|
||
| Java target compatibility | `17` |
|
||
| Kotlin JVM target | `17` |
|
||
|
||
`gradlew --version` 显示的 Kotlin `1.8.20` 是 Gradle 自身内嵌的 Kotlin 版本;项目 Kotlin 源码编译版本以 `build.gradle.kts` 声明的 Kotlin Android Plugin `1.9.22` 为准。
|
||
|
||
### Android SDK 与应用版本
|
||
|
||
| 项目 | 当前值 |
|
||
|---|---:|
|
||
| `compileSdk` | `34` |
|
||
| `targetSdk` | `34` |
|
||
| `minSdk` | `23` |
|
||
| `versionCode` | `1` |
|
||
| `versionName` | `0.1.0` |
|
||
|
||
### 生产依赖
|
||
|
||
| 依赖 | 版本 | 用途 |
|
||
|---|---:|---|
|
||
| `androidx.appcompat:appcompat` | `1.7.0` | Android 兼容 UI 和 `AppCompatActivity` |
|
||
| `com.google.android.material:material` | `1.12.0` | Material Components 主题和控件 |
|
||
|
||
### 测试依赖
|
||
|
||
| 依赖 | 版本 | 用途 |
|
||
|---|---:|---|
|
||
| `junit:junit` | `4.13.2` | JVM 单元测试 |
|
||
| `org.json:json` | `20240303` | JVM 测试中的 JSON 实现 |
|
||
|
||
版本的可执行事实来源依次为 `gradle/wrapper/gradle-wrapper.properties`、根目录 `build.gradle.kts` 和 `app/build.gradle.kts`;本节用于开发约束和快速查阅。升级系统基线、Java、Gradle、AGP、Kotlin、Android SDK 级别或依赖时,必须先分析兼容性,按需求确认方案,然后同步修改构建文件、本节和受影响测试。不得只修改本文档来宣称升级完成。
|
||
|
||
## 5. 架构与解耦
|
||
|
||
- 通用任务模型、协议解析、任务同步、持久化、执行器和 Android 无障碍驱动保持分层。
|
||
- 核心执行器依赖抽象接口,不直接依赖具体服务端或目标 App 的业务逻辑。
|
||
- 外部服务端差异通过 `TaskGateway` 或后续等价适配器隔离。
|
||
- Android 无障碍实现通过 `ActionDriver` 向执行器提供能力。
|
||
- 目标 App 的包名、页面识别和业务步骤放入独立适配层,不写入通用协议和执行内核。
|
||
- 不把 GoAuto 的 PDD、采集、采购、规格、地址或订单业务逻辑带入本项目,除非用户提出明确需求。
|
||
- 优先进行满足当前需求的简单实现,不为未确认的未来需求预建复杂框架。
|
||
|
||
## 6. 当前任务规则
|
||
|
||
- Agent 从外部服务获取任务列表。
|
||
- 任务使用 `assignedAgentName` 指定设备名。
|
||
- 只有 `assignedAgentName` 与本机配置的 Agent 设备名精确一致时,任务才允许保存到 SQLite。
|
||
- 设备名比较区分大小写,不使用包含、前缀、后缀或模糊匹配。
|
||
- 不属于本设备的任务仅忽略,不写入 SQLite,也不作为本设备执行失败处理。
|
||
- 格式无效的任务不写入 SQLite,并在同步结果中计入无效任务。
|
||
- SQLite 当前以 `task_id + revision` 作为任务版本的幂等键。
|
||
- 任务是否入库与任务是否开始执行是两个独立阶段;自动执行、领取、租约和结果提交按后续需求实现。
|
||
|
||
上述规则可由用户后续需求修改;修改时同步更新实现、测试和本文件中的长期规则。
|
||
|
||
## 7. 任务执行约定
|
||
|
||
- 任务步骤使用类型化动作,不通过字符串分支散落实现。
|
||
- 新动作需要同步更新模型、协议解析、执行器和测试。
|
||
- 控件选择器和执行结果使用通用模型。
|
||
- 默认要求控件唯一;匹配多个控件时明确失败,不随意选择第一个。
|
||
- 每个步骤必须具有有限超时,任务执行不得无限等待或无限循环。
|
||
- 包名和已声明的 Activity 必须在操作前核对。
|
||
- 业务特定的页面判断、重试和恢复策略由对应适配层实现。
|
||
|
||
当前动作:
|
||
|
||
- `WAIT`
|
||
- `CLICK`
|
||
- `INPUT`
|
||
- `BACK`
|
||
- `EXTRACT_TEXT`
|
||
|
||
当前未实现的动作或能力不能仅通过修改任务 JSON 宣称可用。
|
||
|
||
## 8. 代码修改规则
|
||
|
||
- 开始修改前读取相关文件;不要只依据文件名推断实现。
|
||
- 优先修改已有抽象,避免复制相同逻辑。
|
||
- 保持包职责清晰:
|
||
- `core/model`:通用数据模型;
|
||
- `core/protocol`:任务协议解析和校验;
|
||
- `core/scheduler`:任务获取与同步;
|
||
- `core/persistence`:SQLite 和本地状态;
|
||
- `core/executor`:任务步骤执行;
|
||
- `core/accessibility`:Android 无障碍能力;
|
||
- `app`:界面、生命周期和依赖装配。
|
||
- 数据库表结构、任务协议或接口发生变化时,同步更新相关测试和 README。
|
||
- 不生成无必要的备份文件、临时脚本或重复文档。
|
||
|
||
## 9. Git 规则
|
||
|
||
- 提交前查看工作区状态,确认没有混入无关文件。
|
||
- 一个提交只包含一个清晰的交付目标。
|
||
- 提交信息简洁描述实际变化。
|
||
- 未经用户要求,不自动推送、不发布 APK、不创建标签。
|
||
- 不改写用户已有提交,不重置或强制清理工作区。
|
||
|
||
## 10. 验证
|
||
|
||
默认从仓库根目录执行:
|
||
|
||
```powershell
|
||
.\android\gradlew.bat -p android test
|
||
.\android\gradlew.bat -p android assembleDebug
|
||
```
|
||
|
||
根据改动范围选择验证:
|
||
|
||
- 模型、协议、同步或执行逻辑:运行相关单元测试,交付前运行 `test`。
|
||
- Android Manifest、资源、依赖或应用代码:运行 `assembleDebug`。
|
||
- SQLite 结构变化:补充升级或读写测试,并验证旧版本升级路径(存在已发布旧版本时)。
|
||
- 无障碍真实操作变化:自动化测试和构建之外,明确列出需要真机验证的目标 App、页面和步骤。
|
||
|
||
APK 默认输出:
|
||
|
||
```text
|
||
android/app/build/outputs/apk/debug/app-debug.apk
|
||
```
|
||
|
||
## 11. 完成条件
|
||
|
||
满足以下条件后停止当前任务:
|
||
|
||
- 已实现用户确认的需求;
|
||
- 相关代码和测试保持一致;
|
||
- 必要验证已经通过;
|
||
- README 或本文件需要记录的长期事实已同步;
|
||
- 已向用户说明改动、验证结果以及未验证事项。
|
||
|
||
发现与当前需求无关的问题时只简要提示,不自动混入本次实现。
|