diff --git a/AGENTS.md b/AGENTS.md index 210b524..6c587e4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -180,6 +180,34 @@ - 签名文件与密码通过 `config.gradle` / CI 环境变量注入,不进版本库。 - 客户端凭据一律加密存储(Android: security-crypto;Flutter: secure_storage;iOS: Keychain)。 +### JSON / 序列化库选型规范 +- **禁止使用 fastjson**。 +- 各平台按以下原则选型: + +| 平台 / 语言 | 推荐库 | 备选 | +|---|---|---| +| Spring Boot(Java) | **Jackson**(`spring-boot-starter-web` 已内置) | — | +| Android(Java) | **Gson** | Jackson(体积稍大但功能更强) | +| Android(Kotlin) | **kotlinx.serialization** | Moshi(已有技术积累的项目可沿用) | +| 纯后端 Kotlin(非 Spring Boot) | **kotlinx.serialization** | Jackson | +| iOS(Swift) | **Codable**(系统原生) | — | +| Flutter(Dart) | **json_annotation + json_serializable + freezed** | — | + +- **例外流程**:若因第三方依赖必须使用其他库,需提交技术评审并锁定版本、开启安全扫描。 + +### ViewModel 规则 +* **绝不持有 Context**:ViewModel 中**严格禁止**持有 `Context`、`Activity`、`Fragment` 或 `View` 的引用。若需要 `Application Context`,请继承 `AndroidViewModel`(但优先推荐使用 Hilt 注入所需依赖)。 +* **数据暴露规范**: + * 对外只暴露不可变的 `LiveData`。 + * 内部维护私有的 `MutableLiveData`。 + * 示例: + ```java + private final MutableLiveData _uiState = new MutableLiveData<>(); + public LiveData getUiState() { + return _uiState; + } + ``` + ### 代码修改 - 优先做**最小化定向修改**,不要对既有大文件做整体重写或重构。 - 修改前先读取文件当前内容,避免基于陈旧上下文编辑。 diff --git a/WebRTCController/AGENTS.md b/WebRTCController/AGENTS.md index 88a8761..fdc71fc 100644 --- a/WebRTCController/AGENTS.md +++ b/WebRTCController/AGENTS.md @@ -50,17 +50,19 @@ ``` com.ttstd.controller ├── App.java // Application 子类:初始化 MMKV、Room、全局依赖 -├── MainActivity.java // 唯一入口 Activity,承载 NavHost │ -├── ui/ // 表现层(UI) +├── ui/ // 表现层 UI (按 Feature 分包) +│ ├── base/ // 基类 +│ ├── main/ // 主功能 +│ │ ├── MainActivity.java +│ │ ├── MainViewModel.java +│ │ └── MainUiState.java │ ├── home/ // 首页 / 设备列表 │ │ ├── HomeFragment.java -│ │ ├── HomeViewModel.java -│ │ └── fragment_home.xml +│ │ └── HomeViewModel.java │ ├── control/ // 远程控制界面(投屏观看 + 触控下发) │ │ ├── ControlFragment.java -│ │ ├── ControlViewModel.java -│ │ └── fragment_control.xml +│ │ └── ControlViewModel.java │ ├── login/ // 激活 / 登录 │ └── common/ // 共享 UI(BaseFragment、适配器、自定义 View) │ @@ -74,8 +76,9 @@ com.ttstd.controller │ │ ├── secure/ // EncryptedSharedPreferences 封装(凭据存储) │ │ └── pref/ // MMKV 封装(非敏感) │ ├── remote/ // 网络(Retrofit API 接口、WebSocket 信令客户端) -│ │ ├── api/ // REST 接口定义 -│ │ └── signaling/ // WebSocket 信令连接与消息收发 +│ │ ├── api/ // REST 接口定义 +│ │ ├── model/ +│ │ └── signaling/ // WebSocket 信令连接与消息收发 │ ├── signaling/ // 信令消息(JSON)数据类 / 解析 │ ├── proto/ // 由 app/src/main/proto/*.proto 生成的指令类 + 编解码封装 │ └── repository/ // 仓储:向 UI 暴露单一数据源(组合 local + remote) @@ -93,6 +96,10 @@ com.ttstd.controller ├── service/ // 前台 / 后台 Service(如保活、长连接) │ └── SignalingService.java │ +├── receiver/ # 全局 BroadcastReceiver(系统级广播) +│ ├── BootCompletedReceiver.java # 开机启动 +│ └── NetworkChangeReceiver.java # 网络变化 +│ └── utils/ // 工具类(线程、日志、权限、网络状态) ```