8.5 KiB
AgentAdmin 开发规则
本仓库采用需求驱动的轻量开发流程。当前项目是内部系统,不设置额外的敏感数据规则、安全审批门禁、工单门禁、原型门禁或 Wiki 同步门禁。
1. 基本原则
- 以用户当前确认的需求为实施依据。
- 收到需求后,先分析目标、现状、范围、约束和验收方式。
- 存在多种实现路径或关键事实不明确时,先与用户讨论方案,不直接猜测。
- 方案确认后按确认方案实施;需求或方案发生变化时,先重新确认再继续。
- 只修改当前需求涉及的内容,不主动扩展无关功能或重构。
- 保留与当前需求无关的工作区改动,不重置、不覆盖。
- 测试结果必须真实;未执行或无法覆盖的验证必须明确说明。
2. 标准流程
- 理解需求:整理目标、输入、输出、范围、非目标和验收标准。
- 检查现状:读取相关代码、配置和文档,确认当前实现,不凭假设修改。
- 分析方案:说明模块边界、数据流、接口、持久化、异常处理和测试方式。
- 讨论确认:方案存在重要取舍、接口不明确或可能改变既有行为时,等待用户确认。
- 实施改动:按照确认方案进行最小且完整的实现。
- 执行验证:运行受影响范围的单元测试、构建或其他必要检查。
- 交付说明:列出改动文件、实现结果、验证结果和未完成或未验证事项。
对于范围清楚、实现方式唯一、容易回退的小改动,可以在完成分析后直接实施,不必重复请求确认。
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 必须在操作前核对。
- 业务特定的页面判断、重试和恢复策略由对应适配层实现。
当前动作:
WAITCLICKINPUTBACKEXTRACT_TEXT
当前未实现的动作或能力不能仅通过修改任务 JSON 宣称可用。
8. 代码修改规则
- 开始修改前读取相关文件;不要只依据文件名推断实现。
- 优先修改已有抽象,避免复制相同逻辑。
- 保持包职责清晰:
core/model:通用数据模型;core/protocol:任务协议解析和校验;core/scheduler:任务获取与同步;core/persistence:SQLite 和本地状态;core/executor:任务步骤执行;core/accessibility:Android 无障碍能力;app:界面、生命周期和依赖装配。
- 数据库表结构、任务协议或接口发生变化时,同步更新相关测试和 README。
- 不生成无必要的备份文件、临时脚本或重复文档。
9. Git 规则
- 提交前查看工作区状态,确认没有混入无关文件。
- 一个提交只包含一个清晰的交付目标。
- 提交信息简洁描述实际变化。
- 未经用户要求,不自动推送、不发布 APK、不创建标签。
- 不改写用户已有提交,不重置或强制清理工作区。
10. 验证
默认从仓库根目录执行:
.\android\gradlew.bat -p android test
.\android\gradlew.bat -p android assembleDebug
根据改动范围选择验证:
- 模型、协议、同步或执行逻辑:运行相关单元测试,交付前运行
test。 - Android Manifest、资源、依赖或应用代码:运行
assembleDebug。 - SQLite 结构变化:补充升级或读写测试,并验证旧版本升级路径(存在已发布旧版本时)。
- 无障碍真实操作变化:自动化测试和构建之外,明确列出需要真机验证的目标 App、页面和步骤。
APK 默认输出:
android/app/build/outputs/apk/debug/app-debug.apk
11. 完成条件
满足以下条件后停止当前任务:
- 已实现用户确认的需求;
- 相关代码和测试保持一致;
- 必要验证已经通过;
- README 或本文件需要记录的长期事实已同步;
- 已向用户说明改动、验证结果以及未验证事项。
发现与当前需求无关的问题时只简要提示,不自动混入本次实现。